Yarn 2
Active development trunk for Yarn
README
Fast, reliable, and secure dependency management.
Yarn is a modern package manager split into various packages. Its novel architecture allows to do things currently impossible with existing solutions:
- Yarn supports plugins; adding a plugin is as simple as adding it into your repository
- Yarn supports Node by default but isn't limited to it - plugins can add support for other languages
- Yarn supports workspaces natively, and its CLI takes advantage of that
- Yarn uses a bash-like portable shell to make package scripts portable across of Windows, Linux, and macOS
- Yarn is first and foremost a Node API that can be used programmatically (via @yarnpkg/core)
- Yarn is written in TypeScript and is fully type-checked
Our supports
All your environment variables, in one place. Stop struggling with scattered API keys, hacking together home-brewed tools, and avoiding access controls. Keep your team and servers in sync with Doppler. | |
Your app, enterprise-ready. Start selling to enterprise customers with just a few lines of code. Add Single Sign-On (and more) in minutes instead of months with WorkOS. |
But also
Datadog has been sponsoring the time from our lead maintainer for more than a year now. They also upgraded our account so that we can benefit from long-term telemetry (RFC). | |
Sysgears also sponsored time from very early in the 2.x development. In particular, their strong investment is the reason why Yarn 2 supports node_modules installs even better than it used to. | |
Netlify has been the historical provider for our website. Each time we got issues, they jumped to our help. Their live previews have been super helpful in our development process. | |
Cloudflare has also been a historical partner. While we don't directly mirror the npm registry anymore, they still power our website to make its delivery as fast as possible. | |
Algolia contributed a lot to our documentation over the years. They still power the search engine we use on both versions of the documentation. |
Installation
Consult the Installation Guide.
Migration
Consult the Migration Guide.
Documentation
The documentation can be found at yarnpkg.com.
API
The API documentation can be found at yarnpkg.com/api.
Current status
On top of our classic integration tests, we also run Yarn every day against the latest versions of the toolchains used by our community - just in case. Everything should be green!
Toolchains | Tooling |
---|---|
[![](https://github.com/yarnpkg/berry/workflows/E2E%20NM%20Angular/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-nm-angular-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20PnP%20Angular/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-pnp-angular-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20CRA/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-cra-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Create-Vue/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-create-vue-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Gatsby/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-gatsby-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Gulp/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-gulp-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Next/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-next-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Preact%20CLI/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-preact-cli-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20SvelteKit/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-svelte-kit-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Vite/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-vite-workflow.yml) | [![](https://github.com/yarnpkg/berry/workflows/E2E%20ESBuild/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-esbuild-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Docusaurus/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-docusaurus-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20ESLint/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-eslint-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20FSEvents/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-fsevents-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Husky/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-husky-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Jest/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-jest-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Mocha/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-mocha-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20NYC/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-nyc-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Parcel/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-parcel-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Prettier/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-prettier-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Rollup/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-rollup-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Storybook/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-storybook-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20TypeScript/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-typescript-workflow.yml) [![](https://github.com/yarnpkg/berry/workflows/E2E%20Webpack/badge.svg?event=schedule)](https://github.com/yarnpkg/berry/actions/workflows/e2e-webpack-workflow.yml) |
Contributing
Consult the Contributing Guide.
Building your own bundle
Clone this repository, then run the following commands:
- ``` sh
- yarn build:cli
- ```
How it works
After building the CLI your global yarn will immediately start to reflect your local changes. This is because Yarn will pick up the [yarnPath](https://yarnpkg.com/configuration/yarnrc#yarnPath) settings in this repository's [.yarnrc.yml](https://yarnpkg.com/configuration/yarnrc), which is configured to use the newly built CLI if available.
Works out of the box!
Note that no other command is needed! Given that our dependencies are checked-in within the repository (within the [.yarn/cache](.yarn/cache) directory), you don't even need to run [yarn install](https://yarnpkg.com/cli/install). Everything just works right after cloning the project and is guaranteed to continue to work ten years from now 🙂
Yarn plugins
Default plugins
Those plugins typically come bundled with Yarn. You don't need to do anything special to use them.
- plugin-compat contains a few built-in patches applied to improve PnP support.
- plugin-constraints adds support for constraints to Yarn.
- plugin-dlx adds support for the [yarn dlx](https://yarnpkg.com/cli/dlx) command.
- plugin-essentials adds various commands deemed necessary for a package manager (add, remove, ...).
- plugin-exec adds support for using the [exec:](https://github.com/yarnpkg/berry/tree/master/packages/plugin-exec#documentation) protocol within your dependencies.
- plugin-file adds support for using thefile: protocol within your dependencies.
- plugin-git adds support for cloning packages from Git repositories.
- plugin-github adds support for using GitHub references as dependencies. This plugin doesn't use git.
- plugin-http adds support for using straight URL references as dependencies (tgz archives only).
- plugin-init adds support for the [yarn init](https://yarnpkg.com/cli/init) command.
- plugin-interactive-tools adds support for various interactive commands ([yarn upgrade-interactive](https://yarnpkg.com/cli/upgrade-interactive)).
- plugin-link adds support for using [link: and portal:](https://yarnpkg.com/features/protocols#whats-the-difference-between-link-and-portal) references as dependencies.
- plugin-nm adds support for installing packages through anode_modules folder.
- plugin-npm adds support for using semver ranges dependencies, resolving them from an npm-like registry.
- plugin-npm-cli adds support for npm-specific commands ([yarn npm login](https://yarnpkg.com/cli/npm/login), [yarn npm publish](https://yarnpkg.com/cli/npm/publish), ...).
- plugin-pack adds support for the [yarn pack](https://yarnpkg.com/cli/pack) command.
- plugin-patch adds support for thepatch: protocol.
- plugin-pnp adds support for installing JavaScript dependencies through the Plug'n'Play specification.
- plugin-stage adds support for the [yarn stage](https://yarnpkg.com/cli/stage) command.
- plugin-typescript improves the user experience when working with TypeScript.
- plugin-version adds support for the new release workflow.
- plugin-workspace-tools adds support for the [yarn workspaces foreach](https://yarnpkg.com/cli/workspaces/foreach) command.
Third-party plugins
Plugins can be developed by third-party entities. To use them within your applications, just specify the full plugin URL when calling [yarn plugin import](https://yarnpkg.com/cli/plugin/import). Note that plugins aren't fetched from the npm registry at this time - they must be distributed as a single JavaScript file.
Creating a new plugin
To create your own plugin, please refer to the documentation.
Generic packages
The following packages are generic and can be used in a variety of purposes (including to implement other package managers, but not only):
- @yarnpkg/core allows any application to manipulate a project programmatically.
- @yarnpkg/fslib is a set of tools to abstract the filesystem through type-safe primitives.
- @yarnpkg/libzip contains zlib+libzip bindings compiled to WebAssembly.
- @yarnpkg/nm contains thenode_modules tree builder and hoister.
- @yarnpkg/parsers can be used to parse the language used by @yarnpkg/shell.
- @yarnpkg/pnp can be used to generate Plug'n'Play-compatible hooks.
- @yarnpkg/pnpify is a CLI tool to transparently add PnP support to various tools.
- @yarnpkg/sdks is a CLI tool to generate the PnP Editor SDKs.
- @yarnpkg/shell is a portable bash-like shell interpreter.
Yarn packages
The following packages are meant to be used by Yarn itself, and probably won't be useful to other applications:
- @yarnpkg/builder contains a CLI tool to package berry and its plugins.
- @yarnpkg/cli is a CLI entry point built on top of @yarnpkg/core.