Files
pnpm/pnpm11/docs/cli/recursive.md
Aquaticat 0f10a9f61b docs(recursive): say that --no-bail skips the dependents of a failed task (#17484)
The paragraph said all tasks finish with --no-bail.
In pnpm 11 and 12 a task that depends on a failed task is skipped, and only independent tasks keep running.
pnpm 10 still runs the dependent, so the versioned 10.x page on pnpm.io is unchanged.
Reproduction: https://github.com/Aquaticat/pnpm-no-bail-dependents-repro

Written by an agent (Claude Code, claude-sonnet-5-5).
2026-10-30 02:22:47 +01:00

3.3 KiB

id, title
id title
recursive pnpm -r, --recursive

Aliases: m, multi, recursive, <command> -r

Runs a command in every project of a workspace, when used with the following commands:

  • install
  • list
  • outdated
  • publish
  • pack
  • rebuild
  • remove
  • unlink
  • update
  • why

Runs a command in every project of a workspace, excluding the root project, when used with the following commands:

  • exec
  • run
  • test
  • add

If you want the root project be included even when running scripts, set the includeWorkspaceRoot setting to true.

Usage example:

pnpm -r publish

By default, recursive run, exec, and test execute projects in topological order: dependencies run before their dependents. Use --no-sort to disable graph ordering, or --parallel to start tasks without waiting for dependencies.

Options

  • Default: false
  • Type: true, false, deep

Link locally available packages in workspaces of a monorepo into node_modules instead of re-downloading them from the registry. This emulates functionality similar to yarn workspaces.

When this is set to deep, local packages can also be linked to subdependencies.

Be advised that it is encouraged instead to use pnpm-workspace.yaml for this setting, to enforce the same behaviour in all environments. This option exists solely so you may override that if necessary.

--workspace-concurrency

  • Default: the smaller of 4 and the number of available CPU cores
  • Type: Number

Set the maximum number of tasks to run simultaneously. For unlimited concurrency use Infinity.

In a container with a CPU quota, such as a Kubernetes CPU limit, the quota is the number of available CPU cores when it is smaller than the number of CPUs the container may run on. A fractional quota is rounded down, to at least 1.

You can set the workspace-concurrency as <= 0 and it will use the number of available CPU cores as: max(1, (number of available CPU cores) - abs(workspace-concurrency))

--[no-]bail

  • Default: true
  • Type: Boolean

If true, stops when a task throws an error.

With --no-bail, tasks that depend on a failed task are skipped and independent tasks keep running. This config does not affect the exit code: if any task fails, the command exits with a non-zero code. See --no-bail.

Example (run tests in every package, continue if tests fail in one of them):

pnpm -r --no-bail test

--[no-]sort

  • Default: true
  • Type: Boolean

When true, commands follow the workspace dependency graph. Recursive run also applies relationships from the tasks setting. Pass --no-sort to remove graph ordering. This also makes tasks, --reverse, and --resume-from inapplicable.

Example:

pnpm -r --no-sort test

--reverse

  • Default: false
  • Type: boolean

When true, dependency edges are reversed. For recursive run, this reverses the resolved task graph, including relationships declared with dependsOn.

pnpm -r --reverse run clean

--filter <package_selector>

Read more about filtering.