NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4362 most downloaded on npm
Core LangChain.js abstractions and schemas
Last release 5 days ago
01 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
355 releases · first in 2023
Adds a new @langchain/core/testing/matchers export containing custom Vitest matchers (toBeHumanMessage, toBeAIMessage, toBeSystemMessage, toBeToolMess
#10271 7373b4c Thanks @jacoblee93! - feat(core): Use uuid7 instead of v4 for generating run ids
#10262 b0175a5 Thanks @maahir30! - fix: Move fakeModel from utils/testing to testing namespace
move to updated namespace
#10185 414f6ed Thanks @maahir30! - feat: add custom Vitest matchers for LangChain message and tool call assertions
Adds a new @langchain/core/testing/matchers export containing custom Vitest matchers (toBeHumanMessage, toBeAIMessage, toBeSystemMessage, toBeToolMessage, toHaveToolCalls, toHaveToolCallCount, toContainToolCall, toHaveToolMessages, toHaveBeenInterrupted, toHaveStructuredResponse) that external users can register via expect.extend(langchainMatchers) in their Vitest setup files. Re-exported from langchain for convenience.
One column per month.
TypeScript infers unique symbol type when Symbol.for() is used without an explicit type annotation, causing type incompatibility when multiple version
#10243 96c630d Thanks @hntrl! - fix: add explicit : symbol type annotations to Symbol.for() declarations for cross-version compatibility
TypeScript infers unique symbol type when Symbol.for() is used without an explicit type annotation, causing type incompatibility when multiple versions of the same package are present in a dependency tree. By adding explicit : symbol annotations, all declarations now use the general symbol type, making them compatible across versions while maintaining identical runtime behavior.
Changes:
: symbol to MESSAGE_SYMBOL in messages/base.ts: symbol to MIDDLEWARE_BRAND in agents/middleware/types.ts (also changed from Symbol() to Symbol.for() for cross-realm compatibility)#10256 a8b9ccc Thanks @colifran! - fix(core): standard schema type guards don't support callable schemas
#10204 a1f22bb Thanks @colifran! - feat(core): implement standard schema support for structured output
The uuid v10 package has ambiguous exports in its package.json which causes Metro (used by Expo/React Native) to resolve the wrong entry point, result
#10106 9f30267 Thanks @hntrl! - Add package version metadata to runnable traces. Each package now stamps its version in this.metadata.versions at construction time, making version info available in LangSmith trace metadata.
#10154 403a99f Thanks @kanweiwei! - fix(core): add usage_metadata to AIMessage lc_aliases
#10169 3b1fd54 Thanks @hntrl! - fix(core, langchain): bump uuid dependency from ^10.0.0 to ^11.0.0 to fix Metro bundler error
The uuid v10 package has ambiguous exports in its package.json which causes Metro (used by Expo/React Native) to resolve the wrong entry point, resulting in Cannot read properties of undefined (reading 'v1'). The uuid v11 package fixes its exports map to work correctly with Metro's package exports resolution.
#10044 77bd982 Thanks @hntrl! - fix(core): remove inherited LangChainTracer handlers when tracingEnabled is false
When a RunTree explicitly disables tracing via tracingEnabled: false, CallbackManager._configureSync now strips any inherited LangChainTracer handlers so child runs don't produce traces.
### Patch Changes - #10140 `10a876c` Thanks @hntrl! - Merge content blocks by string index during streaming. - #10102 `b46d96a` Thanks @colifran! - fe
Updated dependencies \[`9270c48`, `589ab9b`]:
Updated dependencies \[`6933769`, `50d5f32`, `5552999`, `8331833`]:
Updated dependencies \[`478652c`, `3d35eb1`, `bbbfea1`, `52e501b`]:
#10002 27186c5 Thanks @aditya-gg04! - fix(core): support reasoning/thinking blocks in StringOutputParser
#10077 05396f7 Thanks @christian-bromann! - feat(core): add ContextOverflowError, raise in anthropic and openai
#10081 5a6f26b Thanks @hntrl! - feat(core): add namespace-based symbol branding for error class hierarchies
Introduces createNamespace utility for hierarchical symbol-based branding of class hierarchies.
All LangChain error classes now use this pattern, replacing hand-rolled duck-type isInstance checks
with reliable cross-realm Symbol.for-based identity.
LangChainError base class that all LangChain errors extendcreateNamespace / Namespace API in @langchain/core/utils/namespaceModelAbortError, ContextOverflowError to use namespace brandingContextOverflowError.fromError() static factory methodaddLangChainErrorFields in favor of LangChainError subclassesGoogleError, ConfigurationError, etc.) to namespace brandingContextOverflowError.fromError()Nothing published for this version
Updated dependencies \[`6db417b`, `af9bbd3`, `d69dfcc`]:
#10425 792d573 Thanks @pawel-twardziak! - fix(community): auto-detect VL model endpoint and add apiUrl override for ChatAlibabaTongyi
#10004 a40ddc7 Thanks @aditya-gg04! - fix/community-better-sqlite3-node24-support
#10298 aad77ab Thanks @pawel-twardziak! - fix(community): Add multimodal content support to Bedrock Anthropic formatter
#10399 1edc658 Thanks @pawel-twardziak! - add missing AWS inference profile region prefixes (au, jp, global)
#10413 7a3774a Thanks @shivamtiwari3! - fix(community): update PPTXLoader to use officeparser v6 API (fixes #10168)
Updated dependencies [6db417b, af9bbd3, d69dfcc]:
70a4400 Thanks @christian-bromann! - fix(core): fix web_search_call and file_search_call contentBlocks for OpenAI Responses APIUpdated dependencies \[`26488b5`, `aacbe87`, `ca826f6`, `a602c42`, `db7d017`]:
#10304 7560180 Thanks @MunemHashmi! - fix(community): use generous default max_length for Milvus metadata VarChar fields
#10253 07b8619 Thanks @pawel-twardziak! - fix(community): switch JiraProjectLoader to POST+JSON and propagate API errors
#10303 46fc5d8 Thanks @mitchell-fox! - feat(community): add jql and maxTotal params to JiraProjectLoader
#10051 e86ac89 Thanks @FilipZmijewski! - fix(community): valid params check for ChatWatsonx by IBM (#70)
Updated dependencies [26488b5, aacbe87, ca826f6, a602c42, db7d017]:
#10000 71d08c0 Thanks @hntrl! - feat(google): add @langchain/google -- unified Google/Gemini integration
New package that replaces the fragmented @langchain/google-genai / @langchain/google-common / Vertex AI package stack with a single integration.
Published as 0.1.0 (early release). Existing Google packages will continue to receive maintenance updates.
### Patch Changes - #9995 `8f166b1` Thanks @kaigritun! - fix(core): skip empty text blocks in ChatOpenAI contentBlocks
8f166b1 Thanks @kaigritun! - fix(core): skip empty text blocks in ChatOpenAI contentBlocksfix(community): Harden RecursiveUrlLoader against SSRF attacks by integrating validateSafeUrl and replacing string-based URL comparison with origin-ba
#9990 d5e3db0 Thanks @hntrl! - feat(core): Add SSRF protection module (@langchain/core/utils/ssrf) with utilities for validating URLs against private IPs, cloud metadata endpoints, and localhost.
fix(community): Harden RecursiveUrlLoader against SSRF attacks by integrating validateSafeUrl and replacing string-based URL comparison with origin-based isSameOrigin from the shared SSRF module.
### Patch Changes - #9957 `71c3cba` Thanks @jacoblee93! - feat(langchain,core): Update prompt pulling params, LangSmith version
71c3cba Thanks @jacoblee93! - feat(langchain,core): Update prompt pulling params, LangSmith version### Patch Changes - #9905 `41bfea5` Thanks @christian-bromann! - fix(classic/community/core): avoid long lived abort signals
41bfea5 Thanks @christian-bromann! - fix(classic/community/core): avoid long lived abort signalsUpdated invoke, stream, generate, and generatePrompt method signatures across Runnable, BaseChatModel, and BaseLLM to correctly accept Partial instead
#9900 a9b5059 Thanks @hntrl! - fix(core): update method signatures to use Partial<CallOptions> for options parameters
Updated invoke, stream, generate, and generatePrompt method signatures across Runnable, BaseChatModel, and BaseLLM to correctly accept Partial<CallOptions> instead of full CallOptions. This aligns the implementation with the RunnableInterface specification and allows users to pass partial options (e.g., { signal: abortedSignal }) without TypeScript errors.
#9900 a9b5059 Thanks @hntrl! - Improved abort signal handling for chat models:
ModelAbortError class in @langchain/core/errors that contains partial output when a model invocation is aborted mid-streaminvoke() now throws ModelAbortError with accumulated partialOutput when aborted during streaming (when using streaming callback handlers)stream() throws a regular AbortError when aborted (since chunks are already yielded to the caller)_generate() and _streamResponseChunks() methods### Patch Changes - #9842 `05a9733` Thanks @encodedz! - Adding on_tool_error event into EventStreamCallbackHandler
### Patch Changes - #9830 `70387a1` Thanks @bracesproul! - fix: More undefined null errors and tests - #9679 `a7c6ec5` Thanks @christian-bromann! - fe
#9830 70387a1 Thanks @bracesproul! - fix: More undefined null errors and tests
#9679 a7c6ec5 Thanks @christian-bromann! - feat(openai): elevate OpenAI image generation outputs to proper image content blocks
#9817 5e04543 Thanks @Ashx098! - read error.status when response.status is absent to avoid retrying OpenAI SDK 4xx
#9819 40b4467 Thanks @MrDockal! - Tool call content returns compacted json
#9815 17e30bd Thanks @hntrl! - fix(core): respect tracingEnabled=false from RunTree when env tracing is enabled
### Patch Changes - #9781 `230462d` Thanks @christian-bromann! - fix(core): preserve index and timestamp fields in \_mergeDicts
230462d Thanks @christian-bromann! - fix(core): preserve index and timestamp fields in _mergeDicts### Patch Changes - #9797 `bd1ab45` Thanks @christian-bromann! - handle undefined error objects in async-caller
bd1ab45 Thanks @christian-bromann! - handle undefined error objects in async-caller### Patch Changes - #9777 `3efe79c` Thanks @christian-bromann! - fix(core): properly elevate reasoning tokens - #9789 `b8561c1` Thanks @hntrl! - sourc
### Patch Changes - #9517 `23be5af` Thanks @christian-bromann! - fix(@langchain/core): add literal name type inference to tool()
23be5af Thanks @christian-bromann! - fix(@langchain/core): add literal name type inference to tool()Nothing published for this version
### Patch Changes - #9753 `a46a249` Thanks @christian-bromann! - fix(core): allow shared object references in serialization
a46a249 Thanks @christian-bromann! - fix(core): allow shared object references in serializationNothing published for this version
### Patch Changes - #9746 `817fc9a` Thanks @bracesproul! - fix: _mergeDicts error when merging undefined values
817fc9a Thanks @bracesproul! - fix: _mergeDicts error when merging undefined values### Patch Changes - #9725 `56600b9` Thanks @Orenoid! - fix(langchain): update merge logic for numeric values in mergeDicts - #9736 `dc5c2ac` Thanks @h
#9725 56600b9 Thanks @Orenoid! - fix(langchain): update merge logic for numeric values in mergeDicts
#9736 dc5c2ac Thanks @hntrl! - fix(core): handle circular references in load
#9739 c28d24a Thanks @christian-bromann! - fix(core): use getBufferString for message summarization
#9702 bfcb87d Thanks @christian-bromann! - fix(core): improve interop with Zod
Updated dependencies [`3b0e4c4`]:
3b0e4c4]:
Nothing published for this version
Nothing published for this version
Updated dependencies [`3fe4c43`]:
3fe4c43]:
#9686 df9c42b Thanks @hntrl! - add usage_metadata to metadata in LangChainTracer
#9665 8d2982b Thanks @jacoblee93! - feat(core): Make runnable transform trace in a single payload in LangChainTracer
#9675 af664be Thanks @jacoblee93! - Bump LangSmith dep to 0.4.0
Updated dependencies [`e654022`]:
e654022]:
#9668 a7b2a7d Thanks @bracesproul! - fix: Cannot merge two undefined objects error
#9657 a496c5f Thanks @dqbd! - fix(core): avoid writing to TransformStream in EventStreamCallbackHandler when underlying ReadableStream is closed
#9658 1da1325 Thanks @dqbd! - fix(core): ensure streaming test chat models respect AbortSignal
### Patch Changes - #10134 `a46d28c` Thanks @YJack0000! - feat(groq): add reasoning_effort support to ChatGroq
a46d28c Thanks @YJack0000! - feat(groq): add reasoning_effort support to ChatGroq#9641 005c729 Thanks @christian-bromann! - fix(community/core): various security fixes
#7907 ab78246 Thanks @jasonphillips! - fix(core): handle subgraph nesting better in graph_mermaid
#9589 8cc81c7 Thanks @nathannewyen! - test(core): add test for response_metadata in streamEvents
#9644 f32e499 Thanks @hntrl! - add bindTools to FakeListChatModel
#9508 a28d83d Thanks @shubham-021! - Fix toFormattedString() to properly display nested objects in tool call arguments instead of [object Object]
#9165 2e5ad70 Thanks @pawel-twardziak! - fix(mcp-adapters): preserve timeout from RunnableConfig in MCP tool calls
#9647 e456c66 Thanks @hntrl! - handle missing parent runs in tracer to prevent LangSmith 400 errors
Nothing published for this version
Nothing published for this version
Nothing published for this version
### Patch Changes - #10210 `6d5d1bf` Thanks @colifran! - feat(groq): implement standard schema support for structured output
Updated dependencies \[`3205b35`]:
3205b35]:
#9534 bd2c46e Thanks @christian-bromann! - fix(@langchain/core): update and bundle p-retry, ansi-styles, camelcase and decamelize dependencies
#9544 487378b Thanks @hntrl! - fix tool chunk concat behavior (#9450)
#9505 138e7fb Thanks @chosh-dev! - feat: replace btoa with toBase64Url for encoding in drawMermaidImage
Updated dependencies \[`05936ab`, `798cb70`, `80c790b`]:
add shared query escaping and field validation helpers for Redis filter builders
880e396 Thanks @hntrl! - fix(redis): improve RediSearch query escaping and filter validation
buildCustomQuery tag/text/numeric pathsUpdated dependencies \[`2e28115`]:
2e28115 Thanks @christian-bromann! - feat(deepseek): enable native OpenAI-compatible streamEvents events2e28115]:
2e28115 Thanks @christian-bromann! - feat(cohere): add native streamEvents event conversion2e28115 Thanks @christian-bromann! - feat(cloudflare): add native streamEvents event conversion#10873 a74d574 Thanks @baptistejamin! - chore(mistralai): upgrade to @mistralai/mistralai v2
Also populates response_metadata.model on chat completions (was missing before).
708d360 Thanks @christian-bromann! - allow to concat system messagesRemove @types/uuid from package manifests that rely on @langchain/core/utils/uuid or do not require uuid type stubs directly, and refresh the lockfile
### Patch Changes - #9308 `04bd55c` Thanks @ro0sterjam! - respect JSON schema references in interopZodTransformInputSchema - #9387 `ac0d4fe` Thanks @h
8319201: Export standard converter function utility
Remove @types/uuid from package manifests that rely on @langchain/core/utils/uuid or do not require uuid type stubs directly, and refresh the lockfile
Remove @types/uuid from package manifests that rely on @langchain/core/utils/uuid or do not require uuid type stubs directly, and refresh the lockfile
BaseMessage.toFormattedString()cacc137: remove bad import map exports
Backward compatible: Content blocks can be loaded lazily with no breaking changes to existing code
🎉 LangChain v1.0 is here! This release provides a focused, production-ready foundation for building agents with significant improvements to the core abstractions and APIs. See the release notes for more details.
A new unified API for accessing modern LLM features across all providers:
contentBlocks property: Provides provider-agnostic access to reasoning traces, citations, built-in tools (web search, code interpreters, etc.), and other advanced LLM featuresExample:
const response = await model.invoke([
{ role: "user", content: "What is the weather in Tokyo?" },
]);
// Access structured content blocks
for (const block of response.contentBlocks) {
if (block.type === "thinking") {
console.log("Model reasoning:", block.thinking);
} else if (block.type === "text") {
console.log("Response:", block.text);
}
}
For more information, see our guide on content blocks.
Improvements to the core message types:
The @langchain/core package remains focused on essential abstractions:
Backward Compatibility: This release maintains backward compatibility with existing code. Content blocks are loaded lazily, so no changes are required to existing applications.
New Features: To take advantage of new features like content blocks and middleware:
Update to @langchain/core@next:
npm install @langchain/core@1.0.0
Use the new contentBlocks property to access rich content:
const response = await model.invoke(messages);
console.log(response.contentBlocks); // New API
console.log(response.content); // Legacy API still works
For middleware and createAgent, install langchain@next:
npm install langchain@1.0.0 @langchain/core@1.0.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
1063b43: fix chunks constructed with tool calls + chunks
1519a97: update chunk concat logic to match on missing ID fields
Nothing published for this version
41bd944: support base64 embeddings format
d6d841f: fix(core): Fix deep nesting of runnables within traceables
Your coding agent can read these notes before it upgrades. Set up the MCP server →