Inspect the complete delta
Resolve the desired corpus and price only known cache misses without changing state.
steadlith planPython CLI + library · local SQLite · offline by default
Steadlith maintains local RAG indexes when source documents change. It gives chunks stable identities, shows a dry-run plan, reuses cached embeddings, then publishes one transactional SQLite update.
Plan first. No network or index write unless you explicitly allow it.
steadlith planThe cost of unstable boundaries
Offset-based chunking can shift every downstream boundary after an early insertion. The text may be unchanged while its chunk hashes and embeddings are not.
Steadlith reports a concrete manifest delta. It does not promise that every edit changes only a fixed number of chunks.
One explicit state model
Chunk identity, cache identity, manifest state, and index publication remain separate so the plan can explain what will happen before it happens.
| Stage | Mechanism | Observable behavior | Default |
|---|---|---|---|
| Identity | Content-defined chunks | Normalize words, place Rabin boundaries, and hash canonical content with versioned parameters. | Deterministic |
| Plan | Manifest diff | Classify add, keep, move, and delete operations before any provider call or state write. | Read only |
| Cache | Content-addressed embeddings | Reuse vectors by chunk, provider, model, and embedding parameters. | Local SQLite |
| Apply | Transactional publication | Reject stale plans, tombstone removals, and publish one validated index generation. | Explicit approval |
| Verify | Manifest and index checks | Compare generations, record digests, active rows, and Merkle roots. | Offline |
| Query | Pluggable embeddings | Use deterministic lexical retrieval or an explicitly selected learned provider. | No credentials |
One workflow, three explicit stages
The CLI exposes the same planner and index service available from the Python API.
Resolve the desired corpus and price only known cache misses without changing state.
steadlith planReuse cached vectors, embed misses, and approve destructive operations explicitly.
steadlith index --allow-deleteConfirm that the active index, manifest, generation, and record digests agree.
steadlith verifySmall, explicit trust boundary
Chunking and planning stay deterministic. Files, credentials, providers, and SQLite enter through explicit application boundaries.
Read the architectureNormalize words and place content-defined Rabin boundaries.
Hash canonical content with the versioned chunking recipe.
Compare manifests and resolve reusable embedding identities.
Apply one transaction, tombstone removals, and verify state.
Install the release
Install v1.0.0, start with the offline provider, inspect the plan, and measure churn before connecting a paid embedding service.
Open the quick startpython -m pip install steadlith
steadlith init
steadlith planApache-2.0, Python 3.10+, local SQLite reference backend
View on PyPI