june-langgraph
Give your LangGraph agent a June memory. If your agent saves conversations with a LangGraph checkpointer (SQLite or Postgres), this connects that history to Junê — so you can search every conversation, ask questions about them ("what did we decide about pricing?") and get grounded, cited answers, and give the agent itself memory of past sessions.
No code changes required. Three commands:
pip install "june-langgraph[sqlite]" # [postgres] / [mysql] for server DBs
june-langgraph connect # one-time setup — it finds everything
june-langgraph watch # keeps June updated while your agent runs
connect is a small wizard: it looks for June on your computer (it finds the
Junê desktop app automatically), looks for your agent's chat database in the
current folder, checks the whole path works, and saves the setup. watch
then quietly mirrors every new message into a June canvas as your agent runs.
Run june-langgraph sync once to bring in the history you already have.
your LangGraph app ──▶ checkpointer DB ──▶ june-langgraph ──▶ June canvas
(unchanged) (unchanged) (watch/sync) (search · ask · cite)
Your checkpoint database is never modified — it is only read, and always through LangGraph's own deserializer, so what June sees is exactly what your agent saved.
Why
LangGraph checkpointers are built for resuming a conversation, not for finding one. The history lives in serialized checkpoint blobs across several tables — fine for the framework, hopeless for "show me everything we said about the contract". June turns that history into a searchable, cited knowledge graph.
Everyday commands
| command | what it does |
|---|---|
june-langgraph connect |
one-time setup wizard (safe to re-run any time) |
june-langgraph sync |
one catch-up pass — brings existing history into June |
june-langgraph watch |
keeps syncing while your agent runs (Ctrl+C to stop) |
june-langgraph install-service |
make watch automatic — background service that survives reboots (Linux/macOS) |
june-langgraph uninstall-service |
stop + remove the background service |
june-langgraph status |
what's configured + how much has synced |
june-langgraph doctor |
checks every part of the setup, PASS/FAIL per item |
Want fully hands-off syncing? After connect, run june-langgraph install-service once: it writes your platform's native user-level service
(systemd on Linux, launchd on macOS) and starts it. From then on new
messages flow into June whenever your machine is on — no terminal to keep
open. Logs: journalctl --user -u june-langgraph -f (Linux) or
~/Library/Logs/june-langgraph.log (macOS).
Everything is incremental: only new messages are sent, tracked per message in
a small ledger, so re-running never duplicates. If June is offline, watch
keeps trying quietly and catches up when it's back; your agent is never
affected.
For developers: mirror in-process instead
If you'd rather not run a second process, wrap your checkpointer — one line:
from langgraph.checkpoint.sqlite import SqliteSaver
from june_langgraph import JuneSaver
with SqliteSaver.from_conn_string("checkpoints.sqlite") as inner:
app = graph.compile(checkpointer=JuneSaver(
inner, # any BaseCheckpointSaver
june_url="http://127.0.0.1:8799", # the Junê app's local engine
api_key="local",
canvas="agent-chats",
state_file=".june_pushed.json", # dedupe ledger, survives restarts
))
LangGraph behaviour is untouched (resume, time travel, .list() — everything
delegates to the inner saver). New messages mirror to June at save time, while
they're still live objects — nothing is ever deserialized. Sync and async
graphs both work. If June is down the agent keeps running and unpushed
messages retry on the next save.
Pairs with june-mcp
Both packages speak the same env vars (JUNE_BASE_URL, JUNE_API_KEY,
JUNE_CANVAS) and the same canvas semantics. Point
june-mcp at the same canvas and Claude
(Desktop or Code) can answer questions over your agent's entire chat history —
june_answer with citations, june_search, june_enumerate — while
june-langgraph watch keeps it current. Your LangGraph app can also read June
at runtime (/v1/search, /v1/context) to give the agent long-term memory.
Which databases work
| your checkpointer | install | --db looks like |
|---|---|---|
SqliteSaver |
june-langgraph[sqlite] |
checkpoints.sqlite |
PostgresSaver |
june-langgraph[postgres] |
postgresql://user:pw@host/db |
PyMySQLSaver (community) |
june-langgraph[mysql] |
mysql://user:pw@host/db |
| anything else (Redis, Mongo, …) | that saver's package | its conn string + --saver |
The --saver escape hatch accepts any BaseCheckpointSaver via a
package.module:factory spec — the factory is called with your --db string:
june-langgraph sync --db "redis://localhost:6379" \
--saver "langgraph.checkpoint.redis:RedisSaver.from_conn_string"
So new community checkpointers work the day they exist, without waiting for a june-langgraph release. (Custom savers always use the full-scan change detection; the metadata-only fast path is SQLite-specific.)
Configuration
connect writes ~/.june/langgraph.json (key-holding, chmod 600). Everything
can be overridden per-run with flags (--db, --june-url, --june-key,
--canvas) or the env vars above. JUNE_LANGGRAPH_HOME relocates the config
directory. Custom state key? messages_key in the config file (default
messages).
Troubleshooting
Run june-langgraph doctor. It checks, in order: configuration → June
reachable → canvas resolves → database readable → ledger writable, and prints
a mapped hint for each FAIL. Exits 0 only when everything passes.
License
MIT. The Junê engine itself is a separate, closed-source product — this connector is the open part, by design.
Metadata
Release files for june-langgraph 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| june_langgraph-0.1.2.tar.gz | 29.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| june_langgraph-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.4 kB
Release files / june_langgraph-0.1.2.tar.gz
| Download URL | june_langgraph-0.1.2.tar.gz |
|---|---|
| Size | 29.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
93628689df8a34ca576d947a85f95e48c1684578fbef99b623c00fb50291c59b
|
|
BLAKE2b-256 checksum How to use checksums |
2c47cab402f9ae031bc21fdb48a1aad332f44a78b72a94a53a5ad6d6e23a148c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Jul 31, 2026.
Transparency logRelease files / june_langgraph-0.1.2-py3-none-any.whl
| Download URL | june_langgraph-0.1.2-py3-none-any.whl |
|---|---|
| Size | 25.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
22bcdb3e12d34dc27d7e923d902ef838c81fec7bb2f4f53cb83e3ab3622d1279
|
|
BLAKE2b-256 checksum How to use checksums |
d2ae78b4d06f6ea5170e0a366f6e0937c0f7e32f4b5da5034be548bc1e6628b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Jul 31, 2026.
Transparency log