🔍 typesense-langgraph-checkpointer
LangGraph checkpoint saver backed by Typesense — for Python and JavaScript/TypeScript.
Features · Installation · Quick Start · API Reference · Development · Contributing
✨ Features
- Drop-in LangGraph saver — implements the full
BaseCheckpointSaverinterface - Dual-language — first-class Python and TypeScript packages from the same repo
- Blazingly fast search — leverages Typesense's in-memory engine for sub-millisecond checkpoint retrieval
- Thread management — full CRUD for threads, checkpoints, and pending writes
- Automatic schema setup — call
setup()once and collections are created for you - Zero-config local dev — Docker Compose included for instant Typesense instance
📦 Installation
Python
pip install langgraph-checkpoint-typesense
JavaScript / TypeScript
npm install @typesense-langgraph/checkpoint
🚀 Quick Start
Python
import typesense
from langgraph_checkpoint_typesense import AsyncTypesenseSaver
# 1. Create the saver
saver = AsyncTypesenseSaver.from_config(
host="localhost",
port=8108,
api_key="your-api-key",
protocol="http",
)
# 2. Initialize collections (run once)
await saver.setup()
# 3. Use with any LangGraph graph
from langgraph.graph import StateGraph
graph = StateGraph(...)
# ... define your nodes & edges ...
app = graph.compile(checkpointer=saver)
# 4. Invoke with a thread
config = {"configurable": {"thread_id": "my-thread"}}
result = await app.ainvoke({"input": "hello"}, config)
JavaScript / TypeScript
import { TypesenseSaver } from "@typesense-langgraph/checkpoint";
// 1. Create the saver
const saver = TypesenseSaver.fromConfig({
host: "localhost",
port: 8108,
apiKey: "your-api-key",
protocol: "http",
});
// 2. Initialize collections (run once)
await saver.setup();
// 3. Use with any LangGraph graph
import { StateGraph } from "@langchain/langgraph";
const graph = new StateGraph(...)
// ... define your nodes & edges ...
.compile({ checkpointer: saver });
// 4. Invoke with a thread
const config = { configurable: { thread_id: "my-thread" } };
const result = await graph.invoke({ input: "hello" }, config);
⚙️ Configuration
| Parameter | Python | JS/TS | Default | Description |
|---|---|---|---|---|
| Host | host |
host |
localhost |
Typesense server hostname |
| Port | port |
port |
8108 |
Typesense API port |
| API Key | api_key |
apiKey |
— | Typesense API key |
| Protocol | protocol |
protocol |
http |
http or https |
| Timeout | connection_timeout_seconds |
connectionTimeoutSeconds |
5 |
Connection timeout in seconds |
You can also pass a pre-configured Typesense Client directly to the constructor.
📖 API Reference
Python — AsyncTypesenseSaver
| Method | Description |
|---|---|
from_config(cls, **kwargs) |
Create a saver from connection parameters |
setup() |
Create Typesense collections if they don't exist |
aget_tuple(config) |
Retrieve a checkpoint tuple |
aput(config, checkpoint, metadata, new_versions) |
Store a checkpoint |
aput_writes(config, writes, task_id) |
Store pending writes |
alist(config, *, filter, before, limit) |
List checkpoint tuples |
adelete_thread(thread_id) |
Delete all data for a thread |
JavaScript / TypeScript — TypesenseSaver
| Method | Description |
|---|---|
fromConfig(config) |
Create a saver from connection parameters |
setup() |
Create Typesense collections if they don't exist |
getTuple(config) |
Retrieve a checkpoint tuple |
put(config, checkpoint, metadata, newVersions) |
Store a checkpoint |
putWrites(config, writes, taskId) |
Store pending writes |
list(config, options?) |
Async-generator of checkpoint tuples |
deleteThread(threadId) |
Delete all data for a thread |
🏗️ Architecture
graph LR
A["LangGraph Runtime"] -->|checkpoint & writes| B["TypesenseSaver"]
B -->|upsert / search| C["Typesense"]
C --> D[("checkpoints collection")]
C --> E[("writes collection")]
B -->|getTuple / list| A
The saver manages two Typesense collections:
langgraph_checkpoints— stores serialized checkpoint state, metadata, and channel versionslanggraph_writes— stores pending writes keyed by(thread_id, checkpoint_id, task_id, idx)
Both collections are created automatically by setup() with optimized schemas and sorting fields.
🛠️ Development
Prerequisites
- Docker
- Python ≥ 3.9
- Node.js ≥ 22
Start Typesense
docker compose up -d
Default API key: test-api-key (override with TYPESENSE_API_KEY env var).
Python
cd python
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest tests/ -v
JavaScript / TypeScript
cd js
npm ci
npm run build
npm test
🤝 Contributing
Contributions are welcome! Please read the Contributing Guide and the Code of Conduct before opening a PR.
📄 License
This project is licensed under the MIT License.
Metadata
Release files for typesense-langgraph-checkpointer 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| typesense_langgraph_checkpointer-0.1.7.tar.gz | 9.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| typesense_langgraph_checkpointer-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.3 kB
Release files / typesense_langgraph_checkpointer-0.1.7.tar.gz
| Download URL | typesense_langgraph_checkpointer-0.1.7.tar.gz |
|---|---|
| Size | 9.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1bdd08c148ab20d36523b725ce7c9b25cbbddddc5d6345eaae852723daf6be25
|
|
BLAKE2b-256 checksum How to use checksums |
31fd1d6f3e5b2c9e9e476c4160aaec2a8917e6b17337614969e3e6822d9da5d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 30, 2026.
Transparency logRelease files / typesense_langgraph_checkpointer-0.1.7-py3-none-any.whl
| Download URL | typesense_langgraph_checkpointer-0.1.7-py3-none-any.whl |
|---|---|
| Size | 8.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e4e8c3589d32eb81f96663f081e6539a6a12a88108990ed91a79340bef721df0
|
|
BLAKE2b-256 checksum How to use checksums |
286d237e81868c04f0db53fb0bdc1b460720f0a745d83a753fa1665abd03d7b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 30, 2026.
Transparency log