--- name: pnpm-workspace description: 'pnpm workspace monorepo management with filtering, catalogs, and shared configs. Use when setting up monorepos, managing workspace dependencies, filtering package commands, or sharing configuration across packages.' license: MIT metadata: author: oakoss version: '1.2' source: https://pnpm.io/workspaces --- # pnpm Workspace ## Overview pnpm workspaces provide built-in monorepo support through `pnpm-workspace.yaml`, the `workspace:` protocol for local package linking, and powerful filtering to run commands across specific packages. Catalogs enforce consistent dependency versions across all workspace packages. **When to use:** Multi-package repositories, shared libraries with consuming apps, consistent dependency management across packages, running commands on subsets of packages. **When NOT to use:** Single-package projects, projects already using npm/yarn workspaces (migration required), projects that need floating dependency versions per package. ## Quick Reference | Pattern | API / Config | Key Points | | ------------------------ | ---------------------------------------------- | ------------------------------------------------------- | | Define workspace | `pnpm-workspace.yaml` with `packages` globs | Globs match directories containing `package.json` | | Link local package | `"dep": "workspace:*"` | Always resolves to local workspace package | | Link with version range | `"dep": "workspace:^1.0.0"` | Fails install if local version does not satisfy range | | Default catalog | `catalog:` key in `pnpm-workspace.yaml` | Single source of truth for dependency versions | | Named catalog | `catalogs:` key with named groups | Multiple version sets (e.g., `react18`, `react17`) | | Use catalog in package | `"dep": "catalog:"` or `"dep": "catalog:name"` | Resolved to actual version on `pnpm publish` | | Filter by name | `--filter ` or `-F ` | Exact name or glob pattern (`@scope/*`) | | Filter with dependencies | `--filter "foo..."` | Package and all its dependencies | | Filter with dependents | `--filter "...foo"` | Package and all packages that depend on it | | Filter by directory | `--filter "./packages/app"` | All packages under a directory path | | Filter by git changes | `--filter "[origin/main]"` | Packages changed since a commit or branch | | Exclude from filter | `--filter "!foo"` | Remove matching packages from selection | | Run script in package | `pnpm --filter