TL;DR
- @langchain/langgraph 1.6.0 corrects how messages and tools stream events carry the namespace of the graph that ran them, affecting subgraph event handling.
- Root tokens now stream under the root namespace (empty array) instead of including the node that made the call; subgraph tokens stream under their subgraph namespace.
- Messages and events emitted through Command updates now stream in messages mode, matching the Python implementation and ensuring consistent behavior across client applications.
- Apps showing subagent messages as they stream must now pass streamSubgraphs: true when submitting, as they did with Python servers.
- Version
- 1.6.0
- Package
- @langchain/langgraph
- Type
- Minor release
What Changed
LangGraph JS 1.6.0 addresses how stream events report their namespace when routed through graphs and subgraphs. Previously, event namespaces included the node that made the call, which created inconsistencies when streaming subgraph events. The release ensures that root tokens stream under the root namespace (an empty array) and subgraph tokens stream under their subgraph namespace, without the calling node in the path.
When a subgraph is called via task(), events from models or tools inside that task now belong to the graph that called the task, not the subgraph itself. Without streamSubgraphs: true, events from inside subgraphs no longer stream at all. Returned messages from subgraph nodes still stream when the node ends, and nodes that stream their own subgraph with streamMode 'messages' or 'tools' still receive that subgraph's events. This behavior now aligns with the Python version of LangGraph.
Message Streaming and Command Updates
The release fixes how messages are handled in messages stream mode. Previously, id-less messages returned by a node could share IDs with siblings or lose their identity in the messages reducer. Now each id-less message returned by a node gets its own unique ID, preserving the full set of returned messages.
Messages sent through Command({ update }) now emit in messages stream mode, matching Python behavior. This includes messages in lists of updates, such as those returned by ToolNode when one of its tools returns a Command. Before this fix, messages in command updates did not stream until the next values event. Models tagged with nostream still do not stream tokens, but when the node returns its message in a list with a Command, that message now streams as a whole when the node ends.
RemoteGraph Subgraph Event Routing
When a node streams a RemoteGraph and the parent graph is streamed with subgraphs: true, the event routing now matches local graph behavior. Previously, nodes received the remote graph's subgraph events only if they themselves passed subgraphs: true, which caused inconsistencies with local graphs. With streamMode 'updates', a node received updates like ['model', 'child'] where a local graph would give only ['child'].
Now the parent receives the remote graph's subgraph events at every depth, whereas before it received only top-level events. When a node passes subgraphs: false, subgraph events no longer turn off for the parent. A node streaming with streamMode 'messages' and subgraphs: false now receives subgraph message tokens individually instead of the whole message at the top level, matching Python's RemoteGraph behavior.
Tool Metadata and Tool State Handling
The release adds tool names under the __tools node metadata key in getGraph() and getGraphAsync(), bringing the JavaScript version into alignment with Python. This allows graph viewers such as LangGraph Studio to display which tools a ToolNode runs.
Additionally, tools that call interrupt() or whose run is drained no longer emit on_tool_error on the tools stream. The tool is now correctly reported as paused rather than failed, and on resume it runs again and emits on_tool_start and on_tool_end events. ToolNode now re-throws a drain condition instead of converting it to an error ToolMessage.
Migration Considerations
Apps that show subagent messages as they stream, such as useStream with filterSubagentMessages, must now pass streamSubgraphs: true when they submit, as they already did with Python servers. The streamEvents call with version 'v3' remains unchanged and is not affected by these namespace fixes.
Developers upgrading to 1.6.0 should review how their applications handle subgraph events and messages in streaming contexts, particularly if they rely on filtering or routing events based on namespace information.
Source
LangGraph JS Releaseshttps://github.com/langchain-ai/langgraphjs/releases/tag/%40langchain%2Flanggraph%401.6.0AI-assisted, verified against the source. This post was drafted with AI from the primary source linked above and checked automatically against it. For anything you depend on, read the original.
- #langgraph
- #javascript
- #streamevents
- #subgraphs
- #aiagents



