# kvstore: Async Key-Value Store for Native and WASM `kvstore` provides a runtime-agnostic, async trait for key-value storage, with robust implementations for both native (using `sled`) and browser/WASM (using IndexedDB via the `idb` crate) environments. ## Features - **Unified async trait**: Same API for all platforms. Methods: `get`, `set`, `remove`, `contains_key`, `keys`, `clear`. - **Native backend**: Uses `sled` for fast, embedded storage. Blocking I/O is offloaded with `tokio::task::spawn_blocking`. - **WASM backend**: Uses IndexedDB via the `idb` crate for browser storage. Fully async and Promise-based. - **Error handling**: Consistent error types across platforms. - **Conditional compilation**: Uses Cargo features and `cfg` to select the backend. ## Usage Add to your `Cargo.toml`: ```toml [dependencies] kvstore = { path = "../kvstore" } ``` ### Example ```rust use kvstore::{KVStore, NativeStore}; #[tokio::main] async fn main() { let store = NativeStore::open("/tmp/mydb").unwrap(); store.set("foo", b"bar").await.unwrap(); let val = store.get("foo").await.unwrap(); println!("Got: {:?}", val); } ``` For WASM/browser, use `WasmStore` and run in a browser environment. ## Testing ### Native ```sh cargo test -p kvstore --features native ``` ### WASM (browser) ```sh cd kvstore wasm-pack test --headless --firefox --features web ``` ## Architecture - See `../docs/Architecture.md` for full design details. ## License MIT OR Apache-2.0