Integrations
An integration is the real backend that replaces an in-memory piece: a persistent checkpointer, a store, or a vector store, each passed in where the course's stand-in went.
Last updated: 29 Sep, 2026 · LangGraph 1.2
The course kept its storage in memory so it needed no setup. To ship, you swap each in-memory piece for a real backend. The graph code does not change; only the piece you pass in does. The model is already real, and changing provider is one string.
The pieces you used, and their real versions
| What you used | A real or other one | Package |
|---|---|---|
InMemorySaver | SqliteSaver, PostgresSaver | langgraph-checkpoint-sqlite, langgraph-checkpoint-postgres |
InMemoryStore | a Postgres or Redis store | langgraph store backends |
groq:openai/gpt-oss-120b | any other provider, same init_chat_model call | langchain-openai, langchain-google-genai, ... |
| the keyword search in RAG | a real vector store | langchain-postgres (PGVector), langchain-chroma |
Why the swap is drop-in
Every real checkpointer subclasses the same BaseCheckpointSaver that InMemorySaver does, so the graph accepts any of them in the same checkpointer= slot. Install the SQLite backend first: pip install langgraph-checkpoint-sqlite.
# pip install langgraph-checkpoint-sqlite
from langgraph.checkpoint.base import BaseCheckpointSaver
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.checkpoint.sqlite import SqliteSaver
for saver in (InMemorySaver, SqliteSaver):
print(saver.__name__, "is a checkpointer:", issubclass(saver, BaseCheckpointSaver))InMemorySaver is a checkpointer: True SqliteSaver is a checkpointer: True
Using a persistent checkpointer
Install the backend's package, open the saver, and compile with it. The checkpointer= call is the one from the checkpointer lesson, now pointing at a file.
# pip install langgraph-checkpoint-sqlite
from langgraph.checkpoint.sqlite import SqliteSaver
# same compile call, a real file instead of memory
with SqliteSaver.from_conn_string("checkpoints.db") as saver:
graph = builder.compile(checkpointer=saver)InMemorySaver vs SqliteSaver vs PostgresSaver
| InMemorySaver | SqliteSaver | PostgresSaver | |
|---|---|---|---|
| Survives a restart | No | Yes, one file | Yes, a server |
| Setup | None | A file path | A database |
| Use for | Tests and demos | Local and single-machine | Production and many users |
When to switch a piece
- Anything a user comes back to needs a persistent checkpointer, not
InMemorySaver. - Moving to another model provider is one string in
init_chat_model; the graph code stays the same. - RAG over real documents needs a vector store, not the keyword search.
InMemorySaver and InMemoryStore lose everything when the process exits. They are for tests and demos; a persistent backend is what keeps a thread across restarts.Related
- Previous: RAG
- Next: Deploy
- Reference: Checkpointer integrations
- Install
langgraph-checkpoint-sqliteand compile a graph withSqliteSaver, then run it twice and confirm the thread survives. - Add
PostgresSaverto the drop-in check and confirm it is also aBaseCheckpointSaver. - Change the model string to another provider from the setup lesson's table and rerun the chat-models example.
Every expert started right here.