# 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.

## 0.2


## 0.1

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`.

**`Runnables`**

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.
The only exception was was `langchain-experimental`, which largely held more experimental code.
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`)