Fast, reliable, and secure dependency management.
|
Datadog has been sponsoring the time of 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](https://yarnpkg.com/getting-started/install).
## Migration
Consult the [Migration Guide](https://yarnpkg.com/getting-started/migration).
## Documentation
The documentation can be found at [yarnpkg.com](https://yarnpkg.com/).
## API
The API documentation can be found at [yarnpkg.com/api](https://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!
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-create-vue-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-docusaurus-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-esbuild-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-eslint-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-fsevents-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-gatsby-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-gulp-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-husky-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-jest-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-mocha-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-next-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-nm-angular-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-nm-babel-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-nm-berry-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-nyc-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-parcel-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-pnp-angular-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-prettier-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-rollup-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-storybook-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-svelte-kit-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-typescript-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-vite-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-vitest-workflow.yml)
- [](https://github.com/yarnpkg/berry/actions/workflows/e2e-webpack-workflow.yml)
## Contributing
Consult the [Contributing Guide](https://yarnpkg.com/advanced/contributing).
### Building your own bundle
Clone this repository, then run the following commands:
```bash
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](packages/plugin-compat) contains a few built-in patches applied to improve PnP support.
- [plugin-constraints](packages/plugin-constraints) adds support for [constraints](https://yarnpkg.com/features/constraints) to Yarn.
- [plugin-dlx](packages/plugin-dlx) adds support for the [`yarn dlx`](https://yarnpkg.com/cli/dlx) command.
- [plugin-essentials](packages/plugin-essentials) adds various commands deemed necessary for a package manager (add, remove, ...).
- [plugin-exec](packages/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](packages/plugin-file) adds support for using the `file:` protocol within your dependencies.
- [plugin-git](packages/plugin-git) adds support for cloning packages from Git repositories.
- [plugin-github](packages/plugin-github) adds support for using GitHub references as dependencies. [This plugin doesn't use git.](https://stackoverflow.com/a/13636954/880703)
- [plugin-http](packages/plugin-http) adds support for using straight URL references as dependencies (tgz archives only).
- [plugin-init](packages/plugin-init) adds support for the [`yarn init`](https://yarnpkg.com/cli/init) command.
- [plugin-interactive-tools](packages/plugin-interactive-tools) adds support for various interactive commands ([`yarn upgrade-interactive`](https://yarnpkg.com/cli/upgrade-interactive)).
- [plugin-link](packages/plugin-link) adds support for using [`link:`](https://yarnpkg.com/protocol/link) and [`portal:`](https://yarnpkg.com/protocol/portal) references as dependencies.
- [plugin-nm](packages/plugin-nm) adds support for installing packages through a `node_modules` folder.
- [plugin-npm](packages/plugin-npm) adds support for using [semver ranges](https://semver.org) dependencies, resolving them from an npm-like registry.
- [plugin-npm-cli](packages/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](packages/plugin-pack) adds support for the [`yarn pack`](https://yarnpkg.com/cli/pack) command.
- [plugin-patch](packages/plugin-patch) adds support for the `patch:` protocol.
- [plugin-pnp](packages/plugin-pnp) adds support for installing JavaScript dependencies through the [Plug'n'Play](https://yarnpkg.com/features/pnp) specification.
- [plugin-stage](packages/plugin-stage) adds support for the [`yarn stage`](https://yarnpkg.com/cli/stage) command.
- [plugin-typescript](packages/plugin-typescript) improves the user experience when working with TypeScript.
- [plugin-version](packages/plugin-version) adds support for the new [release workflow](https://yarnpkg.com/features/release-workflow).
- [plugin-workspace-tools](packages/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](https://yarnpkg.com/advanced/plugin-tutorial).
## Generic packages
The following packages are generic and can be used for a variety of purposes (including to implement other package managers, but not only):
- [@yarnpkg/core](packages/yarnpkg-core) allows any application to manipulate a project programmatically.
- [@yarnpkg/fslib](packages/yarnpkg-fslib) is a set of tools to abstract the filesystem through type-safe primitives.
- [@yarnpkg/libzip](packages/yarnpkg-libzip) contains zlib+libzip bindings compiled to WebAssembly.
- [@yarnpkg/nm](packages/yarnpkg-nm) contains the `node_modules` tree builder and hoister.
- [@yarnpkg/parsers](packages/yarnpkg-parsers) can be used to parse the language used by [@yarnpkg/shell](packages/yarnpkg-shell).
- [@yarnpkg/pnp](packages/yarnpkg-pnp) can be used to generate [Plug'n'Play](https://yarnpkg.com/features/pnp)-compatible hooks.
- [@yarnpkg/pnpify](packages/yarnpkg-pnpify) is a CLI tool to transparently add PnP support to various tools.
- [@yarnpkg/sdks](packages/yarnpkg-sdks) is a CLI tool to generate the [PnP Editor SDKs](https://yarnpkg.com/getting-started/editor-sdks).
- [@yarnpkg/shell](packages/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](packages/yarnpkg-builder) contains a CLI tool to package berry and its plugins.
- [@yarnpkg/cli](packages/yarnpkg-cli) is a CLI entry point built on top of [@yarnpkg/core](packages/yarnpkg-core).