Roadmap¶
swarmstate is built in verifiable milestones. Status below reflects what is shipped.
| Milestone | Scope | Status |
|---|---|---|
| M0 | Scaffolding - maturin project, Rust core, Python API, CI | ✅ done |
| M1 | Rust store - concurrent KV, msgpack codec, O(1) snapshots, incremental diffs, GIL released | ✅ done |
| M2 | HandoffGraph - conditional DAG, safe condition evaluator (no eval), deterministic route(), cycle detection |
✅ done |
| M3 | LangGraph adapter - SwarmStateSaver implementing BaseCheckpointSaver (drop-in for SqliteSaver) |
✅ done |
| M4 | Benchmarks - checkpoint latency (p50/p99) and throughput vs SqliteSaver and in-memory dict |
✅ done |
| M5 | CrewAI adapter + optional Redis backend (state portability across frameworks) | ✅ done |
| M6 | Docs + cross-platform abi3 wheels + PyPI release via Trusted Publishing (OIDC) | ✅ done |
Since 0.1¶
Beyond the initial milestones, these have shipped:
| Area | Scope | Status |
|---|---|---|
| Backends | DiskStore (SQLite file) and PostgresStore, alongside RedisStore - all drop-in, all msgpack wire-format |
✅ done |
| Incremental checkpoints | opt-in per-version channel dedup in SwarmStateSaver (incremental=True) for long threads with large, stable channels |
✅ done |
| Sharded write locking | namespace-hashed RwLocks so writers to different namespaces don't serialize (removes the lock bottleneck for free-threaded builds) |
✅ done |
| Observability | opt-in metrics hooks on put/put_writes/get_tuple with in-memory and OpenTelemetry sinks (swarmstate[otel]) |
✅ done |
| Developer experience | strict mypy in CI, exposed dumps/loads codec, runnable examples |
✅ done |
Under consideration¶
- Docs versioning (per-release documentation) once a stable line is cut.
- Free-threaded (
cp314t) wheels to turn the sharded store into measurable multi-core throughput.
Guiding rules¶
- Zero install friction -
pip install swarmstatemust work with no compiler. - Never break the drop-in -
SwarmStateSaverstays swappable forSqliteSaver. - Reproducible benchmarks - document hardware, versions and cache state.
- Stable state format - the msgpack codec won't change incompatibly across minor versions.
- Safe by construction -
HandoffGraphconditions run in a bounded Rust evaluator, nevereval().
Track progress on GitHub.