LangGraph Tigris Checkpoint
Implementation of a LangGraph BaseCheckpointSaver that persists agent state in
Tigris globally-distributed object storage over
the S3 API (sync and async), plus a zero-copy bucket-fork helper for instant
branching of an entire thread's checkpoint lineage.
Why Tigris
- Durable, global, cheap state — checkpoints live in globally-replicated object storage with no egress fees.
- Instant branching —
fork()creates a zero-copy fork of the bucket, so an agent's entire checkpoint history can be branched in O(1) for parallel experiments, evals, or what-if exploration. Writes to the fork are isolated from the source. - Pure object store — no separate database to operate. "Latest checkpoint" is found via a sorted list under strong consistency; conditional writes are available for idempotency/CAS.
Bucket requirement
Use a Single-region or Multi-region Tigris bucket. These provide strong, globally consistent reads, lists, and conditional operations, which this saver relies on. Global and Dual-region buckets give only eventual cross-region consistency and can return stale "latest" results.
Install
pip install langgraph-checkpoint-tigris
Usage
from langgraph.checkpoint.tigris import TigrisSaver
# Credentials from the standard AWS env chain
# (AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY), endpoint defaults to Tigris.
with TigrisSaver.from_conn_string("my-bucket") as checkpointer:
checkpointer.setup()
graph = builder.compile(checkpointer=checkpointer)
graph.invoke({"messages": [...]}, {"configurable": {"thread_id": "1"}})
Async:
from langgraph.checkpoint.tigris.aio import AsyncTigrisSaver
async with AsyncTigrisSaver.from_conn_string("my-bucket") as checkpointer:
await checkpointer.setup()
graph = builder.compile(checkpointer=checkpointer)
await graph.ainvoke({"messages": [...]}, {"configurable": {"thread_id": "1"}})
Instant branching with forks
with TigrisSaver.from_conn_string("prod-agent-state") as checkpointer:
# Branch the ENTIRE bucket (all threads/checkpoints) instantly.
experiment = checkpointer.fork("experiment-run-42")
# `experiment` is an isolated TigrisSaver; writes here never touch prod.
Object layout
{prefix}checkpoints/{thread}/{ns}/{checkpoint_id}/manifest.json
{prefix}checkpoints/{thread}/{ns}/{checkpoint_id}/checkpoint.bin
{prefix}checkpoints/{thread}/{ns}/{checkpoint_id}/writes/{task_id}/{idx}.bin
Checkpoints are immutable and uniquely keyed; checkpoint_ids are time-sortable
so the latest is max(...) of a prefix listing — no mutable HEAD pointer.
Development
cd libs/checkpoint-tigris
uv sync
make format && make lint && make test # unit tests run without creds
# Full suite (conformance + integration + fork) needs a live Tigris bucket:
TIGRIS_TEST_BUCKET=my-bucket \
AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... \
make test
Integration, conformance, and fork tests are skipped automatically when those
environment variables are absent. The pure key-layout unit tests
(tests/test_keys.py) always run.
Status
The synchronous and asynchronous savers, the copy_thread/acopy_thread
branching capability, and the zero-copy fork() helper are implemented and
pass the LangGraph checkpointer conformance suite
(langgraph-checkpoint-conformance) against a live Tigris bucket. The pure
key-layout and manifest logic are additionally unit-tested offline.
Release files for langgraph-checkpoint-tigris 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| langgraph_checkpoint_tigris-0.1.0.tar.gz | 183.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langgraph_checkpoint_tigris-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 199.7 kB
Release files / langgraph_checkpoint_tigris-0.1.0.tar.gz
| Download URL | langgraph_checkpoint_tigris-0.1.0.tar.gz |
|---|---|
| Size | 183.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d6ee266a2f82ce6b94d826081c864aed6f02c9b726f5f278e76880326c1dd63f
|
|
BLAKE2b-256 checksum How to use checksums |
5a0b54dc8e6c0ca3fc0058e213529a5f48f29ed1271c6afcb4124a583d089f49
|
| 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 Jun 23, 2026.
Transparency logRelease files / langgraph_checkpoint_tigris-0.1.0-py3-none-any.whl
| Download URL | langgraph_checkpoint_tigris-0.1.0-py3-none-any.whl |
|---|---|
| Size | 16.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e434082eec038843c2fd23b84a2709d85811e296263eced8c97bcbcafeb805c1
|
|
BLAKE2b-256 checksum How to use checksums |
4345b738b906031e975c68138c6121d7886299805996ca548c0c72827f448a8f
|
| 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 Jun 23, 2026.
Transparency log