Workspaces
scpm discovers workspaces from scpm-workspace.yaml and links workspace
packages into the isolated dependency graph. Existing pnpm projects can keep
pnpm-workspace.yaml during migration; scpm reads it as the source for the
scpm-owned manifest.
packages:
- "packages/*"
- "apps/*"
Workspace protocol
{
"dependencies": {
"@acme/ui": "workspace:*",
"@acme/config": "workspace:^"
}
}
Workspace dependencies are linked to local packages during development and converted to concrete versions for publishing/deploy flows.
Filters
scpm -F api run build
scpm -F '@acme/*' test
scpm -F './apps/web' install
scpm -F 'api...' run build
scpm -F '...web' run test
scpm -F '!legacy' -r run lint
Supported selector forms:
- Exact package names.
- Globs such as
@acme/*. - Paths such as
./apps/web. - Dependency graph selectors such as
api...andapi^.... - Dependent graph selectors such as
...weband...^web. - Git-ref selectors such as
[origin/main]. - Exclusions such as
!legacy.
Recursive mode
scpm -r run build
scpm -r list --depth 0
-r runs over every workspace package unless an explicit filter is present.
Catalogs
scpm resolves catalog: and catalog:<name> from scpm-workspace.yaml.
catalog:
react: ^19.0.0
catalogs:
test:
vitest: ^3.0.0
{
"dependencies": {
"react": "catalog:",
"vitest": "catalog:test"
}
}
Deploy
scpm -F api deploy dist/api
deploy copies the selected workspace package's publishable files, rewrites
workspace dependencies to concrete versions, and installs dependencies in the
target directory.
