LangGraphLangGraph 1.2 · Python 3.10+
Dashboard
0%
1
Curious builder0 XP earned · 300 to level 2
0 daysFinish a lesson to begin
Badge collection0 of 6 unlocked
38 small wins to finish your pathNext lesson →

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 usedA real or other onePackage
InMemorySaverSqliteSaver, PostgresSaverlanggraph-checkpoint-sqlite, langgraph-checkpoint-postgres
InMemoryStorea Postgres or Redis storelanggraph store backends
groq:openai/gpt-oss-120bany other provider, same init_chat_model calllangchain-openai, langchain-google-genai, ...
the keyword search in RAGa real vector storelangchain-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.

Example
# 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))

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.

python
# 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

InMemorySaverSqliteSaverPostgresSaver
Survives a restartNoYes, one fileYes, a server
SetupNoneA file pathA database
Use forTests and demosLocal and single-machineProduction 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.
Watch out. 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.
Try it yourself
  • Install langgraph-checkpoint-sqlite and compile a graph with SqliteSaver, then run it twice and confirm the thread survives.
  • Add PostgresSaver to the drop-in check and confirm it is also a BaseCheckpointSaver.
  • Change the model string to another provider from the setup lesson's table and rerun the chat-models example.
PreviousRAG

Every expert started right here.