# Roshi β Kalshi SDK for Rust
**Roshi** is a fully asynchronous, type-safe, and ergonomic SDK for interacting with the [Kalshi](https://kalshi.com/) prediction market exchange.
This crate wraps both Kalshiβs **REST** and **WebSocket** APIs, providing a modern, Rust-native interface for trading, market data, and more.
---
## Features
- β
Full support for [Kalshi's REST API](https://docs.kalshi.com/api-reference/)
- π‘ Real-time market data over Kalshi's WebSocket feeds
- π API key authentication and request signing
- π§ Typed models for events, markets, orders, and more
- π¦ Built on `reqwest`, `tokio`, `serde`, and `tokio-tungstenite`
---
## Quick Start
### REST Client Example
```rust
use roshi::HttpClient;
use roshi::mode::Mode;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = HttpClient::new(Mode::Demo, Some("your-api-key".to_string()), None);
let markets = client.get_markets().await?;
for market in markets.markets.unwrap_or_default() {
println!("{} - {}", market.ticker.unwrap_or_default(), market.title.unwrap_or_default());
}
Ok(())
}
```
### WebSocket Client Example
```rust
use roshi::WebSocketClient;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let mut ws = WebSocketClient::connect().await?;
ws.subscribe_market("INFLATION2024").await?;
while let Some(event) = ws.next_event().await {
match event {
roshi::WebSocketEvent::MarketUpdate(update) => println!("{:#?}", update),
roshi::WebSocketEvent::Error(e) => eprintln!("WebSocket error: {:?}", e),
_ => {}
}
}
Ok(())
}
```
---
## Modules
- [`client`] β REST and WebSocket API support
- [`constants`] β API Endpoints
- [`types`] β Typed data structures for markets, events, orders, etc.
- [`utils`] β Utility functions for signing, formatting, etc.
---
## Crate Features
Enable optional features in your `Cargo.toml`:
```toml
[dependencies.roshi]
version = "0.1"
features = ["rest_client", "ws_client", "debug"]
```
---
## License
Licensed