langgraph-checkpoint-grafomem
Signed checkpoints and provable thread erasure for LangGraph.
A drop-in LangGraph checkpointer that wraps the saver you already use and adds two things standard checkpointers can't give you:
- Signed checkpoints — every persisted checkpoint is Ed25519-signed and tamper-evident.
- Verifiable erasure —
delete_thread()produces a signed state-transition receipt: cryptographic proof that a user's thread was erased, bound to a key and a timestamp. The receipt for right-to-be-forgotten you can hand an auditor.
Install
pip install langgraph-checkpoint-grafomem
Quickstart
import sqlite3
from langgraph.checkpoint.sqlite import SqliteSaver
from grafomem_checkpoint import GrafomemSerializer, GrafomemCheckpointSaver
# your own signing identity — self-hosted keys, no cloud
conn = sqlite3.connect("memory.db", check_same_thread=False)
inner = SqliteSaver(conn, serde=GrafomemSerializer(private_key, key_id=key_id, trusted_keys=trusted_keys))
saver = GrafomemCheckpointSaver(inner)
graph = builder.compile(checkpointer=saver) # persist as usual
# right to be forgotten, with proof:
saver.delete_thread("user-123")
receipt = saver.last_receipt("user-123")
assert receipt.verify(public_key) # signed proof the erasure transition occurred
print(receipt.to_json())
The receipt cryptographically binds the hash of the entire thread's checkpoint history before deletion to the empty state after it — so it commits to the specific data that was erased, not a placeholder.
What the receipt proves (and what it doesn't)
A signed state-transition receipt attests that the erasure operation occurred — the thread's state was overwritten and the transition is bound to a key and a timestamp. It is not a claim of media sanitization or information-theoretic unrecoverability. That precision is the point: an honest, independently verifiable record of deletion, not an unprovable guarantee.
Full example
A runnable reference agent (persist memory, /recall, /forget → verified receipt) lives at
grafomem-langgraph-example.
Licensing
This adapter is Apache-2.0. It depends on the GRAFOMEM runtime, which is Fair Source (FSL-1.1-Apache-2.0) — self-host and modify freely; not "open source." See grafomem.com.
A project of Ulissy s.r.l. · the standard is stewarded by the GNS Foundation.
Metadata
Release files for langgraph-checkpoint-grafomem 1.0.1
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_grafomem-1.0.1.tar.gz | 7.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langgraph_checkpoint_grafomem-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.9 kB
Release files / langgraph_checkpoint_grafomem-1.0.1.tar.gz
| Download URL | langgraph_checkpoint_grafomem-1.0.1.tar.gz |
|---|---|
| Size | 7.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c3a6f9427e197bf830f9d777d0338960b71515097f3e6bc973de402869d5bfac
|
|
BLAKE2b-256 checksum How to use checksums |
69fc3ea07254bd07526663554430c63fb0ee3c40e4dc819efa03efd192cb303f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.8
|
Release files / langgraph_checkpoint_grafomem-1.0.1-py3-none-any.whl
| Download URL | langgraph_checkpoint_grafomem-1.0.1-py3-none-any.whl |
|---|---|
| Size | 6.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cbce8204619ce480681f24b8e8886dc31772f92963f54ad4070f011639514353
|
|
BLAKE2b-256 checksum How to use checksums |
91f9de1bbd51e74e6e6e354e8b5b074fb1beb800e0f65b9e96861619d2d25872
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.8
|