Expand description
§Roshi — Kalshi SDK for Rust
Roshi is a fully asynchronous, type-safe, and ergonomic SDK for interacting with the Kalshi prediction market exchange.
This crate wraps both Kalshi’s REST and WebSocket APIs.
§Features
- ✅ Full support for Kalshi’s REST API
- 📡 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, andtokio-tungstenite
§Quick Start
§REST Client Example
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
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 supportconstants— API Endpointstypes— Typed data structures for markets, events, orders, etc.utils— Utility functions for signing, formatting, etc.
§Crate Features
Enable optional features in your Cargo.toml:
[dependencies.roshi]
version = "0.1"
features = ["rest_client", "ws_client", "debug"]§License
Licensed under the MIT License.
Re-exports§
pub use constants::endpoints;pub use utils::format_endpoint;pub use types::*;