This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @langchain/langgraph-checkpoint-validation@1.1.0 ### Minor Changes - [#2503](https://github.com/langchain-ai/langgraphjs/pull/2503) [`6e850fb`](https://github.com/langchain-ai/langgraphjs/commit/6e850fbabc842bb495352fbd6ef424c67ab0948f) Thanks [@jkennedyvz](https://github.com/jkennedyvz)! - fix(langgraph-checkpoint-validation): align node engine with vitest ## @langchain/langgraph-api@1.3.0 ### Minor Changes - [#2505](https://github.com/langchain-ai/langgraphjs/pull/2505) [`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5) Thanks [@christian-bromann](https://github.com/christian-bromann)! - Consolidate the protocol session's channel inference, channel-set validation, and namespace prefix matching onto the shared `@langchain/langgraph/stream` helpers instead of maintaining local copies. This removes duplicated logic across `session/index.mts`, `session/namespace.mts`, `session/internal-types.mts`, and `service.mts`. This also aligns SSE event-sink filtering (`matchesSinkFilter`) with the WebSocket subscription matcher: both now normalize dynamic namespace suffixes (e.g. a `["fetcher"]` namespace filter matches an event emitted under `["fetcher:<uuid>"]`). Previously the SSE path used a stricter exact-segment match. Because the session now imports `@langchain/langgraph/stream`, the `@langchain/langgraph` peer dependency floor is raised to `^1.3.6` (the first release that ships the `/stream` entrypoint). ### Patch Changes - Updated dependencies \[]: - @langchain/langgraph-ui@1.3.0 ## @langchain/langgraph-checkpoint-sqlite@1.0.2 ### Patch Changes - [#2504](https://github.com/langchain-ai/langgraphjs/pull/2504) [`e8a0940`](https://github.com/langchain-ai/langgraphjs/commit/e8a09409ac4a997012e78081160c91188ebe39fc) Thanks [@jackjin1997](https://github.com/jackjin1997)! - fix: `SqliteSaver.list({}, { filter })` now honors arbitrary metadata keys (e.g. `tenant_id`, `env`), matching the behavior of the MongoDB, Postgres, and Redis checkpointers. Previously only `source`, `step`, and `parents` were honored — any other key was silently dropped, returning unfiltered results. ## @langchain/langgraph-cli@1.3.0 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph-api@1.3.0 ## @langchain/langgraph@1.3.7 ### Patch Changes - [#2505](https://github.com/langchain-ai/langgraphjs/pull/2505) [`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5) Thanks [@christian-bromann](https://github.com/christian-bromann)! - Add the `@langchain/langgraph/stream` entrypoint — a transport-agnostic backend toolkit for building custom servers on top of the v2 streaming protocol. Alongside the existing `StreamChannel` and `convertToProtocolEvent`, it exposes subscription primitives, typed against a minimal `MatchableEvent` shape so they work on both the core `ProtocolEvent` and the wire-level `Event` from `@langchain/protocol`: - `inferChannel(event)` — map an event to its subscription `Channel` (named `custom:<name>` channels included). - `matchesSubscription(event, definition)` — decide whether a buffered event should be delivered for a `SubscribeParams` filter, honoring channel, namespace prefix/depth, and an optional `since` replay cursor. - `isPrefixMatch(namespace, prefix)` / `normalizeNamespaceSegment(segment)` — namespace prefix matching with dynamic-suffix normalization (e.g. `fetcher:<uuid>` matches the `fetcher` prefix). - `SUPPORTED_CHANNELS` / `isSupportedChannel(value)` — the recognized channel set and a guard for validating subscription requests. - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph-sdk@1.9.19 ## @langchain/langgraph-sdk@1.9.19 ### Patch Changes - [#2505](https://github.com/langchain-ai/langgraphjs/pull/2505) [`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5) Thanks [@christian-bromann](https://github.com/christian-bromann)! - Deduplicate the client stream transports: the protocol transport now shares the SSE decoder and `IterableReadableStream` helpers with the legacy transport instead of carrying its own copies. Removes the redundant `transport/decoder.ts` and `transport/stream.ts` shims (and a dead `StreamPart` re-export), importing the shared utilities from `utils/sse.ts` directly. No public API or behavior change. ## @langchain/angular@1.0.19 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph-sdk@1.9.19 ## @langchain/react@1.0.19 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph-sdk@1.9.19 ## @langchain/svelte@1.0.19 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph-sdk@1.9.19 ## @langchain/vue@1.0.19 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph-sdk@1.9.19 ## @langchain/langgraph-ui@1.3.0 ## @example/ai-elements@0.1.34 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph@1.3.7 - @langchain/react@1.0.19 ## @examples/assistant-ui-claude@0.1.34 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph@1.3.7 - @langchain/react@1.0.19 ## @examples/ui-angular@0.0.44 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5), [`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph@1.3.7 - @langchain/langgraph-sdk@1.9.19 - @langchain/angular@1.0.19 ## @examples/ui-multimodal@0.0.20 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph@1.3.7 - @langchain/react@1.0.19 ## @examples/ui-react@0.0.20 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5), [`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph@1.3.7 - @langchain/langgraph-sdk@1.9.19 - @langchain/react@1.0.19 ## langgraph@1.0.39 ### Patch Changes - Updated dependencies \[[`cad31b4`](https://github.com/langchain-ai/langgraphjs/commit/cad31b42f001a87fcdf57c4c084c655c8762b6a5)]: - @langchain/langgraph@1.3.7 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@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.
Install
pnpm add @langchain/langgraph-sdk @langchain/core
# or: npm install @langchain/langgraph-sdk @langchain/core
# or: yarn add @langchain/langgraph-sdk @langchain/core
Quick start
import { Client } from "@langchain/langgraph-sdk";
const client = new Client({ apiUrl: "http://localhost:2024" });
// Open a thread-centric stream (the recommended way to stream).
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
| Sub-client | Purpose | Docs |
|---|---|---|
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) andclient.threads.joinStreamare preserved for backwards compatibility only. New code should useclient.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:
@langchain/langgraph-sdk/react@langchain/langgraph-sdk/vue@langchain/langgraph-sdk/svelte@langchain/langgraph-sdk/angular
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/:
| Path | Module |
|---|---|
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.