{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://json.schemastore.org/pnpm-workspace.json","$comment":"https://pnpm.io/pnpm-workspace_yaml","title":"pnpm Workspace Specification","description":"JSON schema for pnpm-workspace.yaml files","type":"object","definitions":{"dependency":{"$comment":"https://www.schemastore.org/package.json","description":"Dependencies are specified with a simple hash of package name to version range.\nThe version range is a string which has one or more space-separated descriptors.\nDependencies can also be identified with a tarball or git URL.\n","type":"object","minProperties":1,"propertyNames":{"type":"string","minLength":1,"maxLength":214},"additionalProperties":{"type":"string","minLength":1}},"devDependency":{"description":"Specifies dependencies that are required for the development and testing of the project. These dependencies are not needed in the production environment.","type":"object","additionalProperties":{"type":"string"}},"optionalDependency":{"description":"Specifies dependencies that are optional for your project. These dependencies are attempted to be installed during the npm install process, but if they fail to install, the installation process will not fail.","type":"object","additionalProperties":{"type":"string"}},"peerDependency":{"description":"Specifies dependencies that are required by the package but are expected to be provided by the consumer of the package.","type":"object","additionalProperties":{"type":"string"}},"peerDependencyMeta":{"description":"When a user installs your package, warnings are emitted if packages specified in \"peerDependencies\" are not already installed. The \"peerDependenciesMeta\" field serves to provide more information on how your peer dependencies are utilized. Most commonly, it allows peer dependencies to be marked as optional. Metadata for this field is specified with a simple hash of the package name to a metadata object.","type":"object","additionalProperties":{"type":"object","additionalProperties":true,"properties":{"optional":{"description":"Specifies that this peer dependency is optional and should not be installed automatically.","type":"boolean"}}}},"catalog":{"$ref":"#/definitions/dependency","description":"Define dependency version ranges as reusable constants,\nfor later reference in package.json files.\nThis (singular) field creates a catalog named default.\n","type":"object","minProperties":1},"packageConfig":{"description":"Per-package pnpm configuration applied to workspace projects matched by package name or selector.","type":"object","additionalProperties":true,"properties":{"hoist":{"description":"When true, all dependencies are hoisted to node_modules/.pnpm/node_modules.","type":"boolean"},"hoistPattern":{"description":"Tells pnpm which packages should be hoisted to node_modules/.pnpm/node_modules","type":"array","items":{"type":"string"}},"match":{"description":"Workspace project names or selectors matched by this package configuration.","type":"array","uniqueItems":true,"items":{"type":"string"}},"modulesDir":{"description":"The directory in which dependencies will be installed.","type":"string"},"overrides":{"description":"Used to override any dependency in the dependency graph.","type":"object"},"saveExact":{"description":"Saved dependencies will be configured with an exact version rather than using pnpm's default semver range operator.","type":"boolean"},"savePrefix":{"description":"Configure how versions of packages installed to a package.json file get prefixed.","oneOf":[{"type":"string","enum":["^","~","","="]}]}}}},"properties":{"packages":{"description":"Workspace package paths. Glob patterns are supported","type":"array","uniqueItems":true,"items":{"type":"string"}},"catalog":{"$comment":"https://pnpm.io/catalogs","$ref":"#/definitions/dependency","description":"Define dependency version ranges as reusable constants,\nfor later reference in package.json files.\nThis (singular) field creates a catalog named default.\n","type":["object","null"],"minProperties":1},"catalogs":{"description":"Define arbitrarily named catalogs","type":["object","null"],"minProperties":1,"additionalProperties":{"$ref":"#/definitions/catalog"}},"catalogMode":{"description":"Controlling if and how dependencies are added to the default catalog","oneOf":[{"type":"string","enum":["strict","prefer","manual"]}]},"cleanupUnusedCatalogs":{"description":"When set to `true`, pnpm will remove unused catalog entries during installation.","type":"boolean"},"catalogPrune":{"description":"When set to true, pnpm will remove unused catalog entries during installation. `cleanupUnusedCatalogs` is the deprecated spelling of this setting and continues to work; when both are set, `catalogPrune` wins.","type":"boolean"},"onlyBuiltDependencies":{"description":"A list of package names that are allowed to be executed during installation.","type":"array","items":{"type":"string"}},"overrides":{"description":"Used to override any dependency in the dependency graph.","type":"object"},"packageExtensions":{"description":"Used to extend the existing package definitions with additional information.","type":"object","patternProperties":{"^.+$":{"type":"object","properties":{"dependencies":{"$ref":"#/definitions/dependency"},"optionalDependencies":{"$ref":"#/definitions/optionalDependency"},"peerDependencies":{"$ref":"#/definitions/peerDependency"},"peerDependenciesMeta":{"$ref":"#/definitions/peerDependencyMeta"}},"additionalProperties":false}},"additionalProperties":false},"packageConfigs":{"description":"Per-workspace-project pnpm settings that replace project-specific .npmrc files.","oneOf":[{"type":"object","additionalProperties":{"$ref":"#/definitions/packageConfig"}},{"type":"array","items":{"$ref":"#/definitions/packageConfig"}}]},"peerDependencyRules":{"type":"object","properties":{"ignoreMissing":{"description":"pnpm will not print warnings about missing peer dependencies from this list.","type":"array","items":{"type":"string"}},"allowedVersions":{"description":"Unmet peer dependency warnings will not be printed for peer dependencies of the specified range.","type":"object"},"allowAny":{"description":"Any peer dependency matching the pattern will be resolved from any version, regardless of the range specified in \"peerDependencies\".","type":"array","items":{"type":"string"}}},"additionalProperties":false},"neverBuiltDependencies":{"description":"A list of dependencies to run builds for.","type":"array","items":{"type":"string"}},"dangerouslyAllowAllBuilds":{"description":"If set to true, all build scripts (e.g. preinstall, install, postinstall) from dependencies will run automatically, without requiring approval.","type":"boolean"},"onlyBuiltDependenciesFile":{"description":"Specifies a JSON file that lists the only packages permitted to run installation scripts during the pnpm install process.","type":"string"},"ignoredBuiltDependencies":{"description":"A list of package names that should not be built during installation.","type":"array","items":{"type":"string"}},"allowedDeprecatedVersions":{"description":"A list of deprecated versions that the warnings are suppressed.","type":"object","additionalProperties":{"type":"string"}},"patchedDependencies":{"description":"A list of dependencies that are patched.","type":"object","additionalProperties":{"type":"string"}},"allowUnusedPatches":{"description":"When true, installation won't fail if some of the patches from the \"patchedDependencies\" field were not applied. (Previously named \"allowNonAppliedPatches\")","type":"boolean"},"allowNonAppliedPatches":{"description":"When true, installation won't fail if some of the patches from the \"patchedDependencies\" field were not applied.","type":"boolean"},"ignorePatchFailures":{"description":"Default is undefined. Errors out when a patch with an exact version or version range fails. Ignores failures from name-only patches. When true, prints a warning instead of failing when any patch cannot be applied. When false, errors out for any patch failure.","type":"boolean"},"update":{"type":"object","properties":{"ignoreDeps":{"description":"A list of dependency name patterns that pnpm update and pnpm outdated should skip.","type":"array","items":{"type":"string"}},"changeset":{"description":"When true, pnpm update writes a change intent after updating workspace manifests.","type":"boolean","default":false},"githubActions":{"description":"When true, pnpm update and pnpm outdated also check the GitHub Actions referenced by the repository's workflow files.","type":"boolean","default":false},"githubActionsServer":{"description":"The base URL of the GitHub server that hosts the repositories of the GitHub Actions referenced by the workflow files.","type":"string"}},"additionalProperties":false},"updateConfig":{"type":"object","properties":{"ignoreDependencies":{"description":"A list of packages that should be ignored when running \"pnpm outdated\" or \"pnpm update --latest\".","type":"array","items":{"type":"string"}}},"additionalProperties":false},"configDependencies":{"type":"object","description":"Config dependencies allow you to share and centralize configuration files, settings, and hooks across multiple projects. They are installed before all regular dependencies ('dependencies', 'devDependencies', 'optionalDependencies'), making them ideal for setting up custom hooks, patches, and catalog entries."},"audit":{"type":"object","properties":{"level":{"description":"Only print advisories with severity greater than or equal to this level.","type":"string","enum":["low","moderate","high","critical"],"default":"low"},"ignore":{"description":"A list of GHSA codes that will be ignored by pnpm audit.","type":"array","items":{"type":"string","pattern":"^GHSA(-[23456789cfghjmpqrvwx]{4}){3}$"}},"ignorePrune":{"description":"When `true`, `pnpm audit --fix` removes the `audit.ignore` entries whose GHSA no longer appears in the audit report, so a list of tolerated advisories doesn't accumulate entries for dependencies that are long gone. Added in: v11.25.0 and v12.0.0.","type":"boolean","default":false}},"additionalProperties":false},"auditConfig":{"type":"object","properties":{"ignoreCves":{"description":"A list of CVE IDs that will be ignored by \"pnpm audit\".","type":"array","items":{"type":"string","pattern":"^CVE-\\d{4}-\\d{4,7}$"}},"ignoreGhsas":{"description":"A list of GHSA Codes that will be ignored by \"pnpm audit\".","type":"array","items":{"type":"string","pattern":"^GHSA(-[23456789cfghjmpqrvwx]{4}){3}$"}}},"additionalProperties":false},"requiredScripts":{"description":"A list of scripts that must exist in each project.","type":"array","items":{"type":"string"}},"supportedArchitectures":{"description":"Specifies architectures for which you'd like to install optional dependencies, even if they don't match the architecture of the system running the install.","type":"object","properties":{"os":{"type":"array","items":{"type":"string"}},"cpu":{"type":"array","items":{"type":"string"}},"libc":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"ignoredOptionalDependencies":{"description":"A list of optional dependencies that the install should be skipped.","type":"array","items":{"type":"string"}},"executionEnv":{"type":"object","properties":{"nodeVersion":{"description":"Specifies which exact Node.js version should be used for the project's runtime.","type":"string"}},"additionalProperties":false},"hoist":{"description":"When true, all dependencies are hoisted to node_modules/.pnpm/node_modules.","type":"boolean"},"hoistWorkspacePackages":{"description":"When true, packages from the workspaces are symlinked to either <workspace_root>/node_modules/.pnpm/node_modules or to <workspace_root>/node_modules depending on other hoisting settings (hoistPattern and publicHoistPattern).","type":"boolean"},"hoistPattern":{"description":"Tells pnpm which packages should be hoisted to node_modules/.pnpm/node_modules","type":"array","items":{"type":"string"}},"publicHoistPattern":{"description":"Unlike hoistPattern, which hoists dependencies to a hidden modules directory inside the virtual store, publicHoistPattern hoists dependencies matching the pattern to the root modules directory.","type":"array","items":{"type":"string"}},"shamefullyHoist":{"description":"By default, pnpm creates a semistrict node_modules, meaning dependencies have access to undeclared dependencies but modules outside of node_modules do not.","type":"boolean"},"modulesDir":{"description":"The directory in which dependencies will be installed (instead of node_modules).","type":"string"},"nodeLinker":{"description":"Defines what linker should be used for installing Node packages.","oneOf":[{"type":"string","enum":["isolated","hoisted","pnp"]}]},"nodeExperimentalPackageMap":{"description":"When true, pnpm injects the generated node_modules/.package-map.json into pnpm-managed Node.js script environments by adding Node's --experimental-package-map option to NODE_OPTIONS. see https://pnpm.io/settings/node-modules#nodeexperimentalpackagemap","type":"boolean"},"nodePackageMapType":{"description":"Controls how node_modules/.package-map.json is generated. standard - only declared dependencies are available through the package map. loose - also maps packages that are reachable through the installed node_modules layout, which can allow undeclared hoisted dependencies to resolve.","type":"string","enum":["standard","loose"]},"symlink":{"description":"When symlink is set to false, pnpm creates a virtual store directory without any symlinks. It is a useful setting together with nodeLinker=pnp.","type":"boolean"},"enableModulesDir":{"description":"When false, pnpm will not write any files to the modules directory (node_modules).","type":"boolean"},"virtualStoreDir":{"description":"The directory with links to the store.","type":"string"},"virtualStoreDirMaxLength":{"description":"Sets the maximum allowed length of directory names inside the virtual store directory (node_modules/.pnpm).","type":"number"},"virtualStoreType":{"description":"Determines where the virtual store is located. When set to project, a separate virtual store is created in each project's node_modules/.pnpm. When set to global, a single store is shared by every project on the machine, with each project's node_modules holding only symlinks into it. Added in pnpm v11.23.0.","oneOf":[{"type":"string","enum":["project","global"]}]},"packageImportMethod":{"description":"Controls the way packages are imported from the store (if you want to disable symlinks inside node_modules, then you need to change the nodeLinker setting, not this one).","oneOf":[{"type":"string","enum":["auto","hardlink","copy","clone","clone-or-copy"]}]},"modulesCacheMaxAge":{"description":"The time in minutes after which orphan packages from the modules directory should be removed.","type":"number"},"dlxCacheMaxAge":{"description":"The time in minutes after which dlx cache expires.","type":"number"},"storeDir":{"description":"The location where all the packages are saved on the disk.","type":"string"},"verifyStoreIntegrity":{"description":"By default, if a file in the store has been modified, the content of this file is checked before linking it to a project's node_modules. ","type":"boolean"},"useRunningStoreServer":{"description":"Deprecated. Only allows installation with a store server. If no store server is running, installation will fail.","type":"boolean"},"frozenStore":{"description":"Makes pnpm install work against a read-only package store (such as a Nix store or OCI image layer). When enabled, pnpm opens the store's SQLite database in immutable mode and never writes to the store. Works best together with --offline and --frozen-lockfile; incompatible with --force. Added in pnpm v11.7.0.","type":"boolean"},"strictStorePkgContentCheck":{"description":"Some registries allow the exact same content to be published under different package names and/or versions. ","type":"boolean"},"enableGlobalVirtualStore":{"description":"When enabled, node_modules contains only symlinks to a central virtual store, rather than to node_modules/.pnpm.","type":"boolean"},"lockfile":{"description":"When set to false, pnpm won't read or generate a pnpm-lock.yaml file.","type":"boolean"},"preferFrozenLockfile":{"description":"When set to true and the available pnpm-lock.yaml satisfies the package.json dependencies directive, a headless installation is performed.","type":"boolean"},"lockfileIncludeTarballUrl":{"description":"Add the full URL to the package's tarball to every entry in pnpm-lock.yaml.","type":"boolean"},"gitBranchLockfile":{"description":"When set to true, the generated lockfile name after installation will be named based on the current branch name to completely avoid merge conflicts.","type":"boolean"},"mergeGitBranchLockfilesBranchPattern":{"description":"This configuration matches the current branch name to determine whether to merge all git branch lockfile files. ","type":["array","null"]},"peersSuffixMaxLength":{"description":"Max length of the peer IDs suffix added to dependency keys in the lockfile. If the suffix is longer, it is replaced with a hash.","type":"number"},"registry":{"description":"The base URL of the npm package registry (trailing slash included).","type":"string"},"ca":{"description":"The Certificate Authority signing certificate that is trusted for SSL connections to the registry.","type":"string"},"cafile":{"description":"A path to a file containing one or multiple Certificate Authority signing certificates.","type":"string"},"cert":{"description":"A client certificate to pass when accessing the registry.","type":"string"},"key":{"description":"A client key to pass when accessing the registry.","type":"string"},"gitShallowHosts":{"description":"When fetching dependencies that are Git repositories, if the host is listed in this setting, pnpm will use shallow cloning to fetch only the needed commit, not all the history.","type":"array","items":{"type":"string"}},"httpsProxy":{"description":"A proxy to use for outgoing HTTPS requests. If the HTTPS_PROXY, https_proxy, HTTP_PROXY or http_proxy environment variables are set, their values will be used instead.","type":"string"},"httpProxy":{"description":"A proxy to use for outgoing HTTP requests. If the HTTP_PROXY or http_proxy environment variables are set, proxy settings will be honored by the underlying request library.","type":"string"},"proxy":{"description":"npm's legacy proxy setting, used as the fallback for both httpsProxy and httpProxy. If the HTTP_PROXY or http_proxy environment variables are set, proxy settings will be honored by the underlying request library.","type":"string"},"localAddress":{"description":"The IP address of the local interface to use when making connections to the npm registry.","type":"string"},"maxsockets":{"description":"The maximum number of connections to use per origin (protocol/host/port combination).","type":"number"},"noProxy":{"description":"A comma-separated string of domain extensions that a proxy should not be used for.","type":"string"},"strictSsl":{"description":"Whether or not to do SSL key validation when making requests to the registry via HTTPS.","type":"boolean"},"networkConcurrency":{"description":"Controls the maximum number of HTTP(S) requests to process simultaneously.","type":"number"},"fetchRetries":{"description":"How many times to retry if pnpm fails to fetch from the registry.","type":"number"},"fetchRetryFactor":{"description":"The exponential factor for retry backoff.","type":"number"},"fetchRetryMintimeout":{"description":"The minimum (base) timeout for retrying requests.","type":"number"},"fetchRetryMaxtimeout":{"description":"The maximum fallback timeout to ensure the retry factor does not make requests too long.","type":"number"},"fetchTimeout":{"description":"The maximum amount of time to wait for HTTP requests to complete.","type":"number"},"fetchWarnTimeoutMs":{"description":"A warning message is displayed if a metadata request to the registry takes longer than the specified threshold (in milliseconds). Added in pnpm v10.18.0.","type":"number"},"fetchMinSpeedKiBps":{"description":"A warning message is displayed if the download speed of a tarball from the registry falls below the specified threshold (in KiB/s). Added in pnpm v10.18.0.","type":"number"},"autoInstallPeers":{"description":"When true, any missing non-optional peer dependencies are automatically installed.","type":"boolean"},"dedupePeerDependents":{"description":"When this setting is set to true, packages with peer dependencies will be deduplicated after peers resolution.","type":"boolean"},"strictPeerDependencies":{"description":"If this is enabled, commands will fail if there is a missing or invalid peer dependency in the tree.","type":"boolean"},"resolvePeersFromWorkspaceRoot":{"description":"When enabled, dependencies of the root workspace project are used to resolve peer dependencies of any projects in the workspace.","type":"boolean"},"color":{"description":"Controls colors in the output.","oneOf":[{"type":"string","enum":["always","auto","never"]}]},"loglevel":{"description":"Any logs at or higher than the given level will be shown. ","oneOf":[{"type":"string","enum":["debug","info","warn","error"]}]},"reporter":{"description":"Allows you to customize the output style of the logs.\nhttps://pnpm.io/cli/install#--reportername","type":"string","enum":["silent","default","append-only","ndjson"]},"useBetaCli":{"description":"Experimental option that enables beta features of the CLI.","type":"boolean"},"recursiveInstall":{"description":"If this is enabled, the primary behaviour of pnpm install becomes that of pnpm install -r, meaning the install is performed on all workspace or subdirectory packages.","type":"boolean"},"engineStrict":{"description":"If this is enabled, pnpm will not install any package that claims to not be compatible with the current Node version.","type":"boolean"},"npmPath":{"description":"The location of the npm binary that pnpm uses for some actions, like publishing.","type":"string"},"packageManagerStrict":{"description":"If this setting is disabled, pnpm will not fail if a different package manager is specified in the packageManager field of package.json. When enabled, only the package name is checked (since pnpm v9.2.0), so you can still run any version of pnpm regardless of the version specified in the packageManager field.","type":"boolean"},"packageManagerStrictVersion":{"description":"When enabled, pnpm will fail if its version doesn't exactly match the version specified in the packageManager field of package.json.","type":"boolean"},"managePackageManagerVersions":{"description":"When enabled, pnpm will automatically download and run the version of pnpm specified in the packageManager field of package.json.","type":"boolean"},"ignoreScripts":{"description":"Do not execute any scripts defined in the project package.json and its dependencies.","type":"boolean"},"ignoreDepScripts":{"description":"Do not execute any scripts of the installed packages. Scripts of the projects are executed.","type":"boolean"},"childConcurrency":{"description":"The maximum number of child processes to allocate simultaneously to build node_modules.","type":"number"},"sideEffectsCache":{"description":"Use and cache the results of (pre/post)install hooks.\nWhen a pre/post install script modify the contents of a package (e.g. build output), pnpm saves the modified package in the global store. On future installs on the same machine, pnpm reuses this cached, prebuilt version.\nAn object is the canonical way to declare the remote tier; `sideEffectsCache: true` is the shorthand for reading and writing.","oneOf":[{"type":"boolean"},{"type":"object","additionalProperties":false,"properties":{"read":{"description":"Restore a build from the cache when one is present. Default true.","type":"boolean"},"write":{"description":"Save a package's build output to the cache. Default true.","type":"boolean"},"remote":{"description":"Reuse builds across machines by restoring signed, organization-scoped artifacts through a pnpr server instead of running the package's lifecycle scripts locally. Added in pnpm v11.25.0 and v12.0.0. Fields describing the act of signing (publish, keyId, builderId, imageDigest, architectureBaseline, buildEnv, trustedKeys, privateKey) are refused in pnpm-workspace.yaml and read from the global configuration file or the environment instead.","type":"object","additionalProperties":false,"properties":{"org":{"description":"The organization scope of the artifacts.","type":"string"},"packages":{"description":"An eligibility list of packages that may be restored from the remote cache. A package is only a candidate when it also passes allowBuilds, has requiresBuild: true, and has a verified source integrity.","type":"array","items":{"type":"string"}}}}}}]},"sideEffectsCacheReadonly":{"description":"Only use the side effects cache if present, do not create it for new packages. The older spelling of sideEffectsCache: { read: true, write: false }.","type":"boolean"},"unsafePerm":{"description":"Set to true to enable UID/GID switching when running package scripts. If set explicitly to false, then installing as a non-root user will fail.","type":"boolean"},"nodeOptions":{"description":"Options to pass through to Node.js via the NODE_OPTIONS environment variable.","type":"string"},"verifyDepsBeforeRun":{"description":"This setting allows the checking of the state of dependencies before running scripts.","oneOf":[{"type":["string","boolean"],"enum":["install","warn","error","prompt",false]}]},"strictDepBuilds":{"description":"When strictDepBuilds is enabled, the installation will exit with a non-zero exit code if any dependencies have unreviewed build scripts (aka postinstall scripts).","type":"boolean"},"useNodeVersion":{"description":"Specifies which exact Node.js version should be used for the project's runtime.","type":"string"},"nodeVersion":{"description":"The Node.js version to use when checking a package's engines setting.","type":"string"},"linkWorkspacePackages":{"description":"If this is enabled, locally available packages are linked to node_modules instead of being downloaded from the registry.","oneOf":[{"type":"boolean"},{"type":"string","enum":["deep"]}]},"injectWorkspacePackages":{"description":"Enables hard-linking of all local workspace dependencies instead of symlinking them.","type":"boolean"},"syncInjectedDepsAfterScripts":{"description":"Injected workspace dependencies are collections of hardlinks, which don't add or remove the files when their sources change.","type":"array","uniqueItems":true,"items":{"type":"string"}},"preferWorkspacePackages":{"description":"If this is enabled, local packages from the workspace are preferred over packages from the registry, even if there is a newer version of the package in the registry.","type":"boolean"},"sharedWorkspaceLockfile":{"description":"If this is enabled, pnpm creates a single pnpm-lock.yaml file in the root of the workspace.","type":"boolean"},"saveWorkspaceProtocol":{"description":"This setting controls how dependencies that are linked from the workspace are added to package.json.","oneOf":[{"type":"boolean"},{"type":"string","enum":["rolling"]}]},"includeWorkspaceRoot":{"description":"When executing commands recursively in a workspace, execute them on the root workspace project as well.","type":"boolean"},"ignoreWorkspaceCycles":{"description":"When set to true, no workspace cycle warnings will be printed.","type":"boolean"},"ignoreWorkspaceRootCheck":{"description":"Adding a new dependency to the root workspace package fails, unless the --ignore-workspace-root-check or -w flag is used.","type":"boolean"},"disallowWorkspaceCycles":{"description":"When set to true, installation will fail if the workspace has cycles.","type":"boolean"},"workspaceConcurrency":{"description":"Set the maximum number of tasks to run simultaneously. For unlimited concurrency use Infinity. You can set the value to <= 0 and it will use amount of CPU cores of the host minus the absolute value of the provided number as: max(1, (number of cores) - abs(workspaceConcurrency)).","type":"number","default":4},"tasks":{"description":"Configure dependency relationships and per-task concurrency limits for recursive runs (`pnpm -r run <script>`). A task is a script in one workspace project; it becomes ready after every task it depends on completes successfully. A task with no entry under tasks defaults to depending on the same task in its workspace dependencies, but once a task has an entry, an omitted dependsOn is the same as `dependsOn: []`.","type":"object","additionalProperties":{"type":"object","additionalProperties":false,"properties":{"dependsOn":{"description":"Tasks this task depends on. Each entry is either the task in the same project (e.g. `build`) or the task in each selected workspace dependency of the project (e.g. `^build`).","type":"array","items":{"type":"string"}},"concurrency":{"description":"A positive integer limiting how many instances of this named task may run across workspace projects at once. This limit is separate from workspaceConcurrency.","type":"integer","minimum":1}}}},"failIfNoMatch":{"type":"boolean","description":"If true, pnpm will fail if no packages match the filter","default":false},"forceLegacyDeploy":{"description":"By default, pnpm deploy will try creating a dedicated lockfile from a shared lockfile for deployment. If this setting is set to true, the legacy deploy behavior will be used.","type":"boolean"},"savePrefix":{"description":"Configure how versions of packages installed to a package.json file get prefixed.","oneOf":[{"type":"string","enum":["^","~","","="]}]},"tag":{"description":"If you pnpm add a package and you don't provide a specific version, then it will install the package at the version registered under the tag from this setting.","type":"string"},"globalDir":{"description":"Specify a custom directory to store global packages.","type":"string"},"globalBinDir":{"description":"Allows to set the target directory for the bin files of globally installed packages.","type":"string"},"globalShims":{"description":"Controls which globally installed packages get project-aware shims, which are global commands that run the version specified by the current project instead of the globally installed one. A boolean disables (false) or resets to the defaults (true), while an object maps package names to a policy: \"auto\" (or true) to switch automatically when publisher-authenticated, \"prompt\" to confirm on each use, \"always\" to switch unconditionally, or false to disable. Object entries merge with the built-in defaults ({\"node\": \"auto\", \"deno\": \"auto\", \"bun\": \"auto\"}). Added in pnpm v12.0.0-rc.2.","oneOf":[{"type":"boolean"},{"type":"object","additionalProperties":{"oneOf":[{"type":"string","enum":["auto","prompt","always"]},{"type":"boolean"}]}}]},"stateDir":{"description":"The location where all the packages are saved on the disk.","type":"string"},"cacheDir":{"description":"The location of the cache (package metadata and dlx).","type":"string"},"useStderr":{"description":"When true, all the output is written to stderr.","type":"boolean"},"updateNotifier":{"description":"When true, pnpm will check for updates to the installed packages and notify the user.","type":"boolean"},"ci":{"description":"Explicitly tells pnpm whether the current environment is a Continuous Integration system, overriding pnpm's automatic CI detection. Added in pnpm v10.12.1.","type":"boolean"},"preferSymlinkedExecutables":{"description":"Create symlinks to executables in node_modules/.bin instead of command shims. This setting is ignored on Windows, where only command shims work.","type":"boolean"},"ignoreCompatibilityDb":{"description":"During installation the dependencies of some packages are automatically patched. If you want to disable this, set this config to false.","type":"boolean"},"resolutionMode":{"description":"Determines how pnpm resolves dependencies, See https://pnpm.io/settings#resolutionmode","oneOf":[{"type":"string","enum":["highest","time-based","lowest-direct"]}]},"registrySupportsTimeField":{"description":"Set this to true if the registry that you are using returns the \"time\" field in the abbreviated metadata.","type":"boolean"},"extendNodePath":{"description":"When false, the NODE_PATH environment variable is not set in the command shims.","type":"boolean"},"deployAllFiles":{"description":"When deploying a package or installing a local package, all files of the package are copied.","type":"boolean"},"dedupeDirectDeps":{"description":"When set to true, dependencies that are already symlinked to the root node_modules directory of the workspace will not be symlinked to subproject node_modules directories.","type":"boolean"},"dedupeInjectedDeps":{"description":"When this setting is enabled, dependencies that are injected will be symlinked from the workspace whenever possible.","type":"boolean"},"optimisticRepeatInstall":{"description":"When enabled, a fast check will be performed before proceeding to installation. This way a repeat install or an install on a project with everything up-to-date becomes a lot faster.","type":"boolean"},"gitChecks":{"description":"Check if current branch is your publish branch, clean, and up-to-date with remote.","type":"boolean"},"embedReadme":{"description":"UNDOCUMENTED. When `true`, `pnpm publish` writes the README file's content into the published package.json (the `readme` field), so registries such as npmjs.com render the package's README. Added in pnpm 6.28.0; pnpm does not embed the README unless this is enabled. It also won't override a `readme` field already set in the package.json","type":"boolean"},"publishBranch":{"description":"The primary branch of the repository which is used for publishing the latest changes.","type":"string"},"versioning":{"description":"Versioning settings for pnpm's native workspace release management, used by `pnpm change` and recursive `pnpm version`.","type":"object","properties":{"fixed":{"description":"Groups of workspace projects that always release together at one shared version. The shared version is the highest current version in the group, bumped by the largest bump any member needs.","type":"array","items":{"type":"array","items":{"type":"string"}}},"ignore":{"description":"Workspace projects permanently excluded from versioning and dependent propagation.","type":"array","items":{"type":"string"}},"maxBump":{"description":"Caps the bump that a release from the current checkout may apply, after dependent propagation and fixed-group resolution.","type":"string","enum":["patch","minor","major"]},"lanes":{"description":"Maps a workspace project to a release lane. Unlisted projects are on the reserved `main` lane and release stable versions.","type":"object","additionalProperties":{"type":"string"}},"epics":{"description":"Ties member projects to a lead project and constrains their major versions to the lead's major-version band.","type":"array","items":{"type":"object","properties":{"lead":{"description":"Lead workspace project name or a `./`-prefixed workspace-relative directory.","type":"string"},"packages":{"description":"Project selectors matched in order, supporting name globs, `./`-prefixed directory globs, and `!`-prefixed negations.","type":"array","items":{"type":"string"}}},"required":["lead","packages"],"additionalProperties":false}},"changelog":{"description":"Controls where release changelog content is stored.","type":"object","properties":{"storage":{"description":"Changelog storage mode. `registry` composes changelog entries at publish time, while `repository` commits CHANGELOG.md files in packages.","type":"string","enum":["registry","repository"]}},"additionalProperties":false}},"additionalProperties":false},"provenance":{"description":"When publishing from a supported cloud CI/CD system, the package will be publicly linked to where it was built and published from.","type":"boolean"},"pnpmfile":{"description":"The location of the local pnpmfile.","type":"string"},"globalPnpmfile":{"description":"The location of a global pnpmfile. A global pnpmfile is used by all projects during installation.","type":"string"},"ignorePnpmfile":{"description":".pnpmfile.cjs will be ignored. Useful together with --ignore-scripts when you want to make sure that no script gets executed during install.","type":"boolean"},"patchesDir":{"description":"The generated patch file will be saved to this directory.","type":"string"},"enablePrePostScripts":{"description":"When true, pnpm will run any pre/post scripts automatically.","type":"boolean"},"scriptShell":{"description":"The shell to use for scripts run with the pnpm run command.","type":"string"},"shellEmulator":{"description":"When true, pnpm will use a JavaScript implementation of a bash-like shell to execute scripts.","type":"boolean"},"saveExact":{"description":"Saved dependencies will be configured with an exact version rather than using pnpm's default semver range operator.","type":"boolean"},"minimumReleaseAge":{"description":"minimumReleaseAge defines the minimum number of minutes that must pass after a version is published before pnpm will install it. This applies to all dependencies, including transitive ones.","type":"number"},"minimumReleaseAgeExclude":{"description":"If you set `minimumReleaseAge` but need certain dependencies to always install the newest version immediately, you can list them under `minimumReleaseAgeExclude`. The exclusion works by `package name` and applies to all versions of that package.","type":"array","uniqueItems":true,"items":{"type":"string"}},"minimumReleaseAgeStrict":{"description":"Controls how pnpm behaves when no version of a dependency satisfies the minimumReleaseAge constraint within the requested range.\nhttps://pnpm.io/settings#minimumreleaseagestrict","type":"boolean"},"minimumReleaseAgeExcludePrune":{"description":"When set to true, pnpm add, pnpm update, and pnpm remove prune the entries of minimumReleaseAgeExclude in pnpm-workspace.yaml that the freshly written lockfile no longer resolves: a version that is gone is dropped (an entry is removed once none of its versions remain), and an entry for a package that is no longer in the lockfile is removed too. Name patterns (@myorg/*) are always kept.","type":"boolean"},"preferOffline":{"description":"Bypass staleness checks for cached data. Missing data will still be requested from the server.","type":"boolean"},"trustPolicy":{"description":"When set to no-downgrade, pnpm will fail if a package's trust level has decreased compared to previous releases. For example, if a package was previously published by a trusted publisher but now only has provenance or no trust evidence, installation will fail. This helps prevent installing potentially compromised versions.","oneOf":[{"type":"string","enum":["off","no-downgrade"]}]},"trustPolicyExclude":{"description":"You can now list one or more specific packages or versions that pnpm should allow to install, even if those packages don't satisfy the trust policy requirement.","type":"array","uniqueItems":true,"items":{"type":"string"}},"allowBuilds":{"description":"A map of package matchers to explicitly allow (`true`) or disallow (`false`) script execution. This field replaces `onlyBuiltDependencies` and `ignoredBuiltDependencies` (which are also deprecated by this new setting), providing a single source of truth.","type":"object"},"blockExoticSubdeps":{"description":"When set to true, it prevents the resolution of exotic protocols (like git+ssh: or direct https: tarballs) in transitive dependencies. Only direct dependencies are allowed to use exotic sources.","type":"boolean"},"trustPolicyIgnoreAfter":{"description":"Allows ignoring the trust policy check for packages published more than the specified number of minutes ago. This is useful when enabling strict trust policies, as it allows older versions of packages (which may lack a process for publishing with signatures or provenance) to be installed without manual exclusion, assuming they are safe due to their age.","type":"number"},"auditLevel":{"description":"Controls the level of issues reported by `pnpm audit`. When set to 'low', all vulnerabilities are reported. When set to 'moderate', 'high', or 'critical', only vulnerabilities with that severity or higher are reported.","oneOf":[{"type":"string","enum":["low","moderate","high","critical"]}]},"dedupePeers":{"description":"When enabled, peer dependency suffixes use version-only identifiers (`name@version`) instead of full dep paths, eliminating nested suffixes like `(foo@1.0.0(bar@2.0.0))`. This dramatically reduces the number of package instances in projects with many recursive peer dependencies.","type":"boolean"},"npmrcAuthFile":{"description":"The path to a file containing registry authentication tokens. By default, pnpm reads auth tokens from ~/.npmrc as a fallback for registry authentication. Use this setting to point to a different file instead.","type":"string"},"minimumReleaseAgeIgnoreMissingTime":{"description":"When `true`, pnpm skips the `minimumReleaseAge` check for a package whose registry metadata does not include the time field (some private registries and mirrors omit it). Set to `false` to fail resolution in that case instead of installing the package.","type":"boolean"},"registries":{"description":"Configure registries for scoped packages in `pnpm-workspace.yaml`. The `default` key sets the main registry (equivalent to the `registry` `.npmrc` setting). Scoped keys configure registries for specific package scopes.","type":"object","additionalProperties":{"type":"string"}},"namedRegistries":{"description":"Defines named registry aliases that can be used as a prefix when installing packages, e.g. `pnpm add work:@corp/lib@^2.0.0` resolves `@corp/lib@^2.0.0` against the configured URL. Built-in aliases `gh:` (https://npm.pkg.github.com/) and `npmjs:` (https://registry.npmjs.org/) work without any configuration and can be overridden. An alias must start with a letter and contain only letters, digits, `.`, `_`, and `-`. Added in pnpm 11.1.0.","type":"object","additionalProperties":{"type":"string","format":"uri"}},"virtualStoreOnly":{"description":"When set to true, pnpm populates the virtual store without creating importer symlinks, hoisting, bin links, or running lifecycle scripts. This is useful for pre-populating a store (e.g., in Nix builds) without creating unnecessary project-level artifacts. pnpm fetch uses this mode internally.","type":"boolean"},"pmOnFail":{"description":"Overrides the `onFail` behavior of both the `packageManager` field and `devEngines.packageManager` when the running pnpm version does not match the declared one.","oneOf":[{"type":"string","enum":["download","error","warn","ignore"]}]},"runtimeOnFail":{"description":"Overrides the `onFail` field of `devEngines.runtime` (and `engines.runtime`) in the root project's `package.json`. This is useful when you want a different local behavior than what is written in the manifest — for instance, forcing pnpm to download the declared runtime even when the manifest sets `onFail: \"warn\"`.","oneOf":[{"type":"string","enum":["download","error","warn","ignore"]}]},"nodeDownloadMirrors":{"description":"Configure custom Node.js download mirrors in `pnpm-workspace.yaml`. The keys are release channels (`release`, `rc`, `nightly`, `v8-canary`, etc.) and the values are base URLs.","type":"object","additionalProperties":{"type":"string"}},"trustLockfile":{"description":"A new trustLockfile setting controls whether pnpm install re-applies the `minimumReleaseAge` / `trustPolicy: 'no-downgrade'` checks to every entry in the loaded lockfile. When true, the install treats the lockfile as already-trusted and skips the verification pass — useful for closed-source projects where every commit comes from a trusted author. The default is false, so verification stays on by default.","type":"boolean"},"hoistingLimits":{"description":"Added a new hoistingLimits setting for `nodeLinker: hoisted` installs, mirroring yarn's `nmHoistingLimits`. It accepts `none` (the default — hoist as far as possible), workspaces (hoist only as far as each workspace package), or dependencies (hoist only up to each workspace package's direct dependencies).","oneOf":[{"type":"string","enum":["none","workspaces","dependencies"]}]}},"additionalProperties":false}