Skip to main content

LangChain Over Time

Due to the rapidly evolving field, LangChain has also evolved rapidly. This document serves to outline at a high level what has changed and why.


The 0.1 release marked a few key changes for LangChain. By this point, the LangChain ecosystem had become large both in the breadth of what it enabled as well as the community behind it.

Split of packages

LangChain was split up into several packages to increase modularity and decrease bloat. First, @langchain/core is created as a lightweight core library containing the base abstractions, some core implementations of those abstractions, and the generic runtime for creating chains. Next, all third party integrations are split into @langchain/community or their own individual partner packages. Higher level chains and agents remain in langchain.


Having a specific class for each chain was proving not very scalable or flexible. Although these classes were left alone (without deprecation warnings) for this release, in the documentation much more space was given to generic runnables.

< 0.1​

There are several key characteristics of LangChain pre-0.1.

Singular Package

LangChain was largely a singular package. This meant that ALL integrations lived inside langchain.

Chains as classes

Most high level chains were largely their own classes. There was a base Chain class from which all chains inherited. This meant that in order to chain the logic inside a chain you basically had to modify the source code. There were a few chains that were meant to be more generic (SequentialChain, RouterChain)

Was this page helpful?

You can also leave detailed feedback on GitHub.