@langchain/langgraph-sdk
The JavaScript / TypeScript SDK for talking to a LangGraph API server.
Use it to create and manage assistants, threads, runs, cron
schedules, and the KV store โ and, most importantly, to stream
graph executions in real time.
๐ Full documentation
Install
pnpm add @langchain/langgraph-sdk @langchain/core
Quick start
import { Client } from "@langchain/langgraph-sdk";
const client = new Client({ apiUrl: "http://localhost:2024" });
const thread = client.threads.stream({ assistantId: "my-agent" });
await thread.run.start({
input: { messages: [{ role: "user", content: "hello" }] },
});
for await (const message of thread.messages) {
for await (const token of message.text) {
process.stdout.write(token);
}
}
console.log(await thread.output);
await thread.close();
With no apiUrl, the SDK points at http://localhost:2024 (the
default langgraph dev URL).
What's in the SDK
client.threads | Create threads, manage state, and stream runs. | Threads ยท Streaming |
client.assistants | CRUD for assistants (schemas, graphs, versions). | Assistants |
client.runs | Trigger / join / cancel runs without streaming. | Runs (legacy) |
client.crons | Schedule recurring runs. | Crons |
client.store | Namespaced KV + semantic store. | Store |
Streaming
client.threads.stream(...) returns a ThreadStream
with typed, lazy projections for every aspect of a run:
thread.messages / thread.toolCalls โ assembled chat output.
thread.values / thread.output โ graph state and final answer.
thread.interrupts / thread.interrupted โ human-in-the-loop.
thread.subgraphs / thread.subagents โ nested / deep-agent work.
thread.extensions.<name> โ typed custom server projections.
thread.audio / thread.images / thread.video / thread.files
โ media.
Deprecated. The generator-based streaming APIs on
client.runs.* (stream, joinStream) and client.threads.joinStream
are preserved for backwards compatibility only. New code should use
client.threads.stream(...). See
Runs (legacy) for migration guidance.
Transports
Streaming defaults to Server-Sent Events (SSE) over HTTP. You can
switch to WebSocket per-call or globally, or plug in a custom
AgentServerAdapter:
const thread = client.threads.stream({
assistantId: "my-agent",
transport: "websocket",
});
See Transports for full details.
Framework adapters
If you're building a UI, use the framework-specific packages that
wrap this SDK:
Use the SDK directly when you need low-level control, run it from a
non-browser environment (Node.js server, edge workers, scripts), or
integrate into a framework that does not yet have a first-party
adapter.
Architecture
The client code is organized into sub-client modules under
src/client/:
client/assistants/ | AssistantsClient |
client/threads/ | ThreadsClient (includes the v2 stream(...) primitive) |
client/runs/ | RunsClient (legacy streaming + CRUD) |
client/crons/ | CronsClient |
client/store/ | StoreClient |
client/stream/ | ThreadStream, assemblers, transports |
client/base.ts | BaseClient, shared config & helpers |
client/index.ts | Main Client class & re-exports |
Change log
See CHANGELOG.md.