langchain breaking changes
Every breaking API change we have recorded in langchain on PyPI: 563 breaking changes in 18 versions. Below are its newest 6 versions, removals and renames first, each with its source.
Newest change June 12, 2026

On this page
1.3.8
- Signature changed
langchain.agents.create_agent
Was def create_agent(model: str | BaseChatModel, tools: Sequence[BaseTool | Callable[..., Any] | dict[str, Any]] | None = None, *, system_prompt: str | SystemMessage | None = None, middleware: Sequence[AgentMiddleware[StateT_co, ContextT]]... pypi.org - Signature changed
langchain.agents.middleware.ModelCallResult
Was ModelCallResult: TypeAlias; now ModelCallResult. pypi.org
1.3.7
- Signature changed
langchain.agents.middleware.dynamic_prompt
Was def dynamic_prompt(func: _CallableReturningSystemMessage[StateT, ContextT] | None = None) -> Callable[[_CallableReturningSystemMessage[StateT, ContextT]], AgentMiddleware[StateT, ContextT]] | AgentMiddleware[StateT, ContextT]; now def... pypi.org - Signature changed
langchain.agents.middleware.wrap_model_call
Was def wrap_model_call(func: _CallableReturningModelResponse[StateT, ContextT, ResponseT] | None = None, *, state_schema: type[StateT] | None = None, tools: list[BaseTool] | None = None, name: str | None = None) ->... pypi.org - Signature changed
langchain.agents.structured_output.OutputToolBinding.parse
Was def parse(self, tool_args: dict[str, Any]) -> SchemaT; now def parse(self, tool_args: dict[str, Any]) -> SchemaT | dict[str, Any]. pypi.org - Signature changed
langchain.agents.structured_output.ProviderStrategyBinding.parse
Was def parse(self, response: AIMessage) -> SchemaT; now def parse(self, response: AIMessage) -> SchemaT | dict[str, Any]. pypi.org
1.3.6
- Signature changed
langchain.agents.middleware.SummarizationMiddleware.__init__
Was def __init__(self, model: str | BaseChatModel, *, trigger: ContextSize | list[ContextSize] | None = None, keep: ContextSize = ('messages', _DEFAULT_MESSAGES_TO_KEEP), token_counter: TokenCounter = count_tokens_approximately... pypi.org - Signature changed
langchain.agents.middleware.SummarizationMiddleware.trigger
Was trigger: ContextSize | list[ContextSize] | None; now trigger: ContextSize | TriggerClause | list[ContextSize | TriggerClause] | None. pypi.org
1.3.2
- Signature changed
langchain.agents.create_agent
Was def create_agent(model: str | BaseChatModel, tools: Sequence[BaseTool | Callable[..., Any] | dict[str, Any]] | None = None, *, system_prompt: str | SystemMessage | None = None, middleware: Sequence[AgentMiddleware[StateT_co, ContextT]]... pypi.org
1.3.0
- Signature changed
langchain.agents.create_agent
Was def create_agent(model: str | BaseChatModel, tools: Sequence[BaseTool | Callable[..., Any] | dict[str, Any]] | None = None, *, system_prompt: str | SystemMessage | None = None, middleware: Sequence[AgentMiddleware[StateT_co, ContextT]]... pypi.org
1.2.14
- Removed
langchain.agents.middleware.todo.InjectedToolCallId
langchain.agents.middleware.todo.InjectedToolCallId was removed in langchain 1.2.14 pypi.org
Check your code
These are the changes. To see which of them reach your code, scan a public repository, or have your coding agent call check_code with your manifest or lockfile over MCP. The API reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

Put your code on continuous management.
Scan a public repository now, or give your agent one line.
See how out of date your code is.
Tell your agent what changed since it was trained.
claude mcp add --transport http since https://api.since.dev/mcp