Yarnrc files (named this way because they must be called .yarnrc.yml) are the one place where you'll be able to configure Yarn's internal settings. While Yarn will automatically find them in the parent directories, they should usually be kept at the root of your project (often your repository). Starting from the v2, they must be written in valid Yaml and have the right extension (simply calling your file .yarnrc won't do).
Environment variables can be accessed from setting definitions by using the ${NAME} syntax when defining the values. By default Yarn will require the variables to be present, but this can be turned off by using either ${NAME-fallback} (which will return fallback if NAME isn't set) or ${NAME:-fallback} (which will return fallback if NAME isn't set, or is an empty string).
Finally, note that most settings can also be defined through environment variables (at least for the simpler ones; arrays and objects aren't supported yet). To do this, just prefix the names and write them in snake case: YARN_CACHE_FOLDER will set the cache folder (such values will overwrite any that might have been defined in the RC files - use them sparingly).
cacheFolder
The path where the downloaded packages are stored on your system. They'll be normalized, compressed, and saved under the form of zip archives with standardized names. The cache is deemed to be relatively safe to be shared by multiple projects, even when multiple Yarn instances run at the same time on different projects. For setting a global cache folder, you should use enableGlobalCache instead.
caFilePath
changesetBaseRefs
changesetIgnorePatterns
checksumBehavior
compressionLevel
The compression level employed for zip archives, with 0 being 'no compression, faster' and 9 being 'heavy compression, slower'. The default is 'mixed', which is a variant of 9 where files may be stored uncompressed if the builtin libzip heuristic thinks it will lead to a more sensible result.
defaultLanguageName
defaultProtocol
Yarn is a modular package manager that can resolve packages from various sources. As such, semver ranges and tag names don't only work with the npm registry - just change the default protocol to something else and your semver ranges will be fetched from whatever source you select.
defaultSemverRangePrefix
deferredVersionFolder
enableColors
enableGlobalCache
If true, Yarn will disregard the cacheFolder settings and will store the cache files into a folder shared by all local projects sharing the same configuration. Note that enabling the global cache isn't advised on OSX: it opens the door to some subtle incompatibilities while not providing significant size improvements (this is because the OSX default filesystem supports Copy-on-Write, so each file in your cache is already a light pointer to a single global file).
enableHyperlinks
enableImmutableCache
enableImmutableInstalls
enableInlineBuilds
enableMirror
enableNetwork
enableProgressBars
enableScripts
enableTelemetry
If true (the default outside of CI environments), Yarn will periodically send anonymous data to our servers tracking some usage information such as the number of dependency in your project, how many install you ran, etc. Consult the Telemetry page for more details about it.
enableTimers
enableTransparentWorkspaces
If false, Yarn won't link workspaces just because their versions happen to match a semver range. Disabling this setting will require that all workspace accesses are made through the workspace: protocol. This is usually only needed in some very specific circumstances.
globalFolder
httpProxy
httpsProxy
ignorePath
immutablePatterns
initFields
installStatePath
logFilters
Defines overrides for log levels for message names or message text. Through this setting you can hide specific messages or give them a more important visibility.
text
Selects exactly one message that must match the given text. In case a message matches both code-based and text-based filters, the text-based ones will take precedence over the code-based ones.
lockfileFilename
networkConcurrency
networkSettings
Additional network settings, per hostname
*.example.com
The hostname to override settings for (glob patterns are supported)
caFilePath
See caFilePath.
nmHoistingLimits
Defines the highest point where packages can be hoisted. One of workspaces (don't hoist packages past the workspace that depends on them), dependencies (packages aren't hoisted past the direct dependencies for each workspace), or none (the default, packages are hoisted as much as possible). This setting can be overriden per-workspace through the installConfig.hoistingLimits field.
nodeLinker
npmAlwaysAuth
npmAuthIdent
npmAuthToken
Defines the authentication credentials to use by default when accessing your registries (equivalent to _authToken in the v1). If you're using npmScopes to define multiple registries, the npmRegistries dictionary allows you to override these credentials on a per-registry basis.
npmPublishAccess
npmPublishRegistry
npmRegistries
On top of the global configuration, registries can be configured on a per-scope basis (for example to instruct Yarn to use your private registry when accessing packages from a given scope). The following properties are supported:
//npm.pkg.github.com
This key represent the registry that's covered by the settings defined in the nested object. The protocol is optional (using https://npm.pkg.github.com would work just as well).
npmRegistryServer
Defines the hostname of the remote server from where Yarn should fetch the metadata and archives when querying the npm registry. Should you want to define different registries for different scopes, see npmScopes. To define the authentication scheme for your servers, see npmAuthToken. The Hostname must use the HTTPS protocol, but this can be changed by adding it to the unsafeHttpWhitelist.
npmScopes
On top of the global configuration, registries can be configured on a per-scope basis (for example to instruct Yarn to use your private registry when accessing packages from a given scope). The following properties are supported:
my-company
This key represent the scope that's covered by the settings defined in the nested object. Note that it mustn't start with the @ character.
npmPublishRegistry
See npmPublishRegistry.
npmRegistryServer
See npmRegistryServer.
npmAlwaysAuth
See npmAlwaysAuth.
npmAuthIdent
See npmAuthIdent.
npmAuthToken
See npmAuthToken.
packageExtensions
Some packages may have been specified incorrectly with regard to their dependencies - for example with one dependency being missing, causing Yarn to refuse it the access. The packageExtensions fields offer a way to extend the existing package definitions with additional information. If you use it, consider sending a PR upstream and contributing your extension to the plugin-compat database.
Note: This field is made to add dependencies; if you need to rewrite existing ones, prefer the resolutions field.
webpack@*
Each key is a descriptor covering a semver range. The extensions will be applied to any package whose version matches the specified range. This is true regardless of where the package comes from, so no distinction on whether they come from git or a registry, for example. Only the version matters.
pnpDataPath
pnpEnableInlining
pnpFallbackMode
pnpIgnorePatterns
An Array of glob patterns. Files matching the following locations (in term of relative path compared to the generated .pnp.cjs file) will not be covered by PnP and will use the regular Node resolution. Typically only needed if you have subprojects that aren't yet part of your workspace tree.
pnpMode
If strict (the default), Yarn won't allow modules to require packages they don't explicitly list in their own dependencies. If loose, Yarn will allow access to the packages that would have been hoisted to the top-level under 1.x installs. Note that, even in loose mode, such calls are unsafe (hoisting rules aren't predictable) and should be discouraged.
pnpShebang
pnpUnpluggedFolder
preferAggregateCacheInfo
preferDeferredVersions
preferInteractive
progressBarStyle
Which style of progress bar should be used (only when progress bars are enabled). Valid values can be found here.
rcFilename
telemetryInterval
telemetryUserId
By default, we don't assign unique IDs in the telemetry we send, so we have no way to know which data originates from which project. This setting can be used to force a user ID to be sent to our telemetry server. Frankly, it's only useful in some very specific use cases. For example, we use it on the Yarn repository in order to exclude our own usage from the public dashboards (since we necessarily run Yarn more often here than anywhere else, the resulting data would be biased).
unsafeHttpWhitelist
This setting lists the hostnames for which using the HTTP protocol is allowed. Any other hostname will be required to use HTTPS instead. The reason behind this decision and more details can be found here.
Glob patterns are supported.
virtualFolder
Due to a particularity in how Yarn installs packages which list peer dependencies, some packages will be mapped to multiple virtual directories that don't actually exist on the filesystem. This settings tells Yarn where to put them. Note that the folder name must be __virtual__.
yarnPath
The path of a Yarn binary, which will be executed instead of any other (including the global one) for any command run within the directory covered by the rc file. If the file extension ends with .js it will be required, and will be spawned in any other case.
The yarnPath setting is currently the preferred way to install Yarn within a project, as it ensures that your whole team will use the exact same Yarn version, without having to individually keep it up-to-date.
yarnUpgradePath
If set, the yarn set version command will store the downloaded file at this location instead of the one referenced by yarnPath. This settings is useful if you want the file referenced in yarnPath to be a wrapper, and the real Yarn binary to be stored elsewhere.