Expand description
§kiteconnect-async-wasm
A modern, async Rust implementation of the Zerodha KiteConnect API with WASM support. This library provides comprehensive access to KiteConnect’s REST APIs for trading, portfolio management, and market data.
§Features
- 🚀 Async/Await: Built with modern Rust async patterns using
tokio - 🌐 WASM Compatible: Run in browsers with WebAssembly support
- 🔄 Cross-Platform: Native (Linux, macOS, Windows) and Web targets
- 📦 Modern Dependencies: Updated to latest Rust ecosystem libraries
- 🧪 Well Tested: Comprehensive test coverage with mocked responses
- ⚡ High Performance: Efficient HTTP client with connection pooling
- 🛡️ Type Safe: Leverages Rust’s type system for safer API interactions
§Quick Start
Add to your Cargo.toml:
[dependencies]
kiteconnect-async-wasm = { version = "0.1.0", features = ["native"] }
# For WASM targets
# kiteconnect-async-wasm = { version = "0.1.0", features = ["wasm"] }§Basic Usage
use kiteconnect_async_wasm::connect::KiteConnect;
use serde_json::Value as JsonValue;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize KiteConnect client
let mut kiteconnect = KiteConnect::new("<YOUR-API-KEY>", "");
// Step 1: Get login URL
let login_url = kiteconnect.login_url();
println!("Login URL: {}", login_url);
// Step 2: After user login, generate session with request token
let session_response = kiteconnect
.generate_session("<REQUEST-TOKEN>", "<API-SECRET>")
.await?;
println!("Session: {:?}", session_response);
// Step 3: Use the API (access token is automatically set)
let holdings: JsonValue = kiteconnect.holdings().await?;
println!("Holdings: {:?}", holdings);
Ok(())
}§Available APIs
The library provides access to all KiteConnect REST APIs:
§Authentication
login_url()- Generate login URLgenerate_session()- Create session with request tokeninvalidate_session()- Logout user
§Portfolio
holdings()- Get user holdingspositions()- Get user positionsmargins()- Get account margins
§Orders
orders()- Get all ordersorder_trades()- Get trades for specific ordertrades()- Get all trades
§Market Data
instruments()- Get instrument listtrigger_range()- Get trigger range for instruments
§Mutual Funds
mf_orders()- Get mutual fund ordersmf_instruments()- Get mutual fund instruments
§Error Handling
The library uses anyhow::Result for comprehensive error handling:
match kiteconnect.holdings().await {
Ok(holdings) => println!("Holdings: {:?}", holdings),
Err(e) => eprintln!("Error fetching holdings: {}", e),
}§Platform-Specific Features
§Native (Tokio)
- Full CSV parsing for instruments
- Complete async/await support
- High-performance HTTP client
§WASM (Browser)
- All APIs supported
- Raw CSV returned for client-side parsing
- Compatible with web frameworks
§Examples
See the examples/ directory for comprehensive usage examples:
connect_sample.rs- Basic API usageasync_connect_example.rs- Advanced async patterns
§Thread Safety
The KiteConnect struct is Clone + Send + Sync, making it safe to use across
multiple threads and async tasks. The underlying HTTP client uses connection
pooling for optimal performance.
let kiteconnect = KiteConnect::new("<API-KEY>", "<ACCESS-TOKEN>");
// Clone for use in different tasks
let kc1 = kiteconnect.clone();
let kc2 = kiteconnect.clone();
// Use in concurrent tasks
let (holdings, positions) = tokio::try_join!(
kc1.holdings(),
kc2.positions()
)?;Modules§
- connect
- KiteConnect API Client