LangGraph v1 migration guide ↗
noOriginal Documentation
Documentation Index#
Fetch the complete documentation index at: https://docs.langchain.com/llms.txt Use this file to discover all available pages before exploring further.
This guide outlines changes in LangGraph v1 and how to migrate from previous versions. For a high-level overview of what’s new, see the release notes.
To upgrade,
npm install @langchain/langgraph@latest @langchain/core@latestpnpm add @langchain/langgraph@latest @langchain/core@latestyarn add @langchain/langgraph@latest @langchain/core@latestbun add @langchain/langgraph@latest @langchain/core@latestSummary of changes#
| Area | What changed |
|---|---|
| React prebuilt | createReactAgent deprecated; use LangChain createAgent |
| Interrupts | Typed interrupts supported via interrupts config |
toLangGraphEventStream removed | Use graph.stream with the desired encoding format |
useStream | Supports custom transports |
Deprecation: createReactAgent → createAgent#
LangGraph v1 deprecates the createReactAgent prebuilt. Use LangChain’s createAgent, which runs on LangGraph and adds a flexible middleware system.
See the LangChain v1 docs for details:
import { createAgent } from "langchain"; const agent = createAgent({ model, tools, systemPrompt: "You are a helpful assistant.", // [!code highlight] });import { createReactAgent } from "@langchain/langgraph/prebuilts"; const agent = createReactAgent({ model, tools, prompt: "You are a helpful assistant.", // [!code highlight] });
Typed interrupts#
You can now define interrupt types at graph construction to strictly type the values passed to and received from interrupts.
import { StateGraph, interrupt } from "@langchain/langgraph";
import * as z from "zod";
const State = z.object({ foo: z.string() });
const graphConfig = {
interrupts: {
approve: interrupt<{ reason: string }, { messages: string[] }>(),
},
}
const graph = new StateGraph(State, graphConfig)
.addNode("node", async (state, runtime) => {
const value = runtime.interrupt.approve({ reason: "review" }); // [!code highlight]
return { foo: value };
})
.compile();import { StateGraph } from "@langchain/langgraph";
const graph = new StateGraph(State)
.addNode("node", async (state, runtime) => {
const value = runtime.interrupt.approve({ reason: "review" }); // [!code highlight]
return state;
})
.compile();See Interrupts to learn more.
Event stream encoding#
The low-level toLangGraphEventStream helper is removed. Streaming responses are handled by the SDK; when using low-level clients, select the wire format via an encoding option passed to graph.stream.
const stream = await graph.stream(input, {
encoding: "text/event-stream",
streamMode: ["values", "messages"],
});
return new Response(stream, {
headers: { "Content-Type": "text/event-stream" }, // [!code highlight]
});return toLangGraphEventStreamResponse({
stream: graph.streamEvents(input, {
version: "v2",
streamMode: ["values", "messages"],
}),
});Breaking changes#
Dropped Node 18 support#
All LangGraph packages now require Node.js 20 or higher. Node.js 18 reached end of life in March 2025.
New build outputs#
Builds for all langgraph packages now use a bundler based approach instead of using raw typescript outputs. If you were importing files from the dist/ directory (which is not recommended), you will need to update your imports to use the new module system.
Edit this page on GitHub or file an issue.
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.