State of Yarn 2 (Berry) in 2021
Yarn 2, aka Berry, was announced back in April 2019, it was a pretty big deal at the time. I've moved 2 clients since and still, no one is talking about it. I got curious recently and did some research about this topic. In this post, we'll see what is the deal with Yarn 2, and what the adoption is like after 2 years.
What was the biggest change in Yarn 2?
But why did the maintainers want everyone to use PnP so bad?
Yarn install time is used to generate
node_modules. Sadly, without drastic changes, there is no way for package managers to optimise anything. This means the problems are not going to get better over time without intervention.
If you are interested here are a few other ways why the
node_modules design is wasteful and impractical see Yarn: The Node Module Problem.
So, how does PnP fix these issues?
PnP generates a
.pnp.cjs file that points to packages in local disk location. Instead of Node looking for a package in a folder, Yarn will tell Node where to find the packages instead. Since now Yarn only needs to generate a single file instead of creating a
node_modules folder of modules during install. It is much faster and has way fewer I/O operations, meaning a massive performance boost!
.npn.cjs file it is even possible to avoid running
yarn install (hence the name Plug'n'Play). Node apps will also launch much faster without Node iterating over files to find what it needs. Just remember back when Windows XP supported USB devices without the user installing any drivers, this was meant to be a game-changer.
If Yarn 2's PnP feature is so awesome then why so much resistance?
As mentioned above the main issue is around the breaking changes and requires existing packages to be updated by their respective maintainers to be compatible with PnP. This caused further discussions around if Yarn 2 should be released as a separate package manager altogether under a different name e.g. Berry. It is obvious now looking back, the suggestion wasn't adopted.
In the early stages, people who tried Yarn 2 reported a lot of errors when they tried to upgrade. A lot of tools and libraries people rely on stopped working or experienced issues after the upgrade. Yarn 2 offers workarounds such as adding
pnpMode: loose into
.yarnrc.yml to disable PnP. But even this was a highly experimental feature at the time.
Unfortunately, not everyone is on board with this change. Facebook and Twitter both came out and said they plan on staying with Yarn 1. There must be a lot of other smaller companies which also didn't want to spend ages upgrade to Yarn 2 and risk their product stability and product roadmap.
The Yarn maintainers wanted to push the brilliant PnP feature, which has been in Yarn 1 for ages, for wider adoption. To achieve that goal, they wanted to force developers to start building and using PnP (reminds me of how Apple forces people to move to newer I/O ports).
If you are familiar with Python 2 and 3 drama over the past ten plus years then you'll find the story pretty similar here. Python 3 breaking changes were introduced without real ways for developers to bridge the gap. So for years, Python devs struggled with the two major versions. Unable to move to the new version completed and unable to use newer libraries that only support v3. From my own experience, it seems like that's been getting better.
State of Yarn 2 in 2021
In all the companies I've worked at over the past 3 years, only one company looked into adopting Yarn 2. As far as I'm aware, other than a presentation showcasing its benefits, that didn't go anywhere. I almost can't find any discussions online regarding Yarn 2. I don't think Yarn 2 is dead, but compared to Yarn 1 the adoption rate is much slower.