bun-workspaces has been deprecated and is now developed as pacwich, which supports Bun, npm, and pnpm workspaces, with a mostly backwards compatible CLI and API. Users can expect little to no disruption beyond the package name change and config file name changes.
A full migration guide covering all differences between the packages is available at https://pacwich.dev/intro/bun-workspaces-migration
Installation docs are available at https://pacwich.dev/intro/getting-started
You can also instruct an LLM agent to read https://pacwich.dev/intro/bun-workspaces-migration/index.md to assist with migration.
Read the launch blog post about the motivations and development strategy.
bun-workspaces will not receive further releases save for critical security patches, if necessary. This website will stay up at least through 2026. Once decommissioned, documentation will be consolidated to the package README.
Try the Web CLI demo right here in your browser!
Run the CLI via bunx bun-workspaces or alias it to bw, such as via alias bw="bunx bun-workspaces", which can be placed in your shell configuration file, like .bashrc, .zshrc, or similar.
You can also invoke bw in your root package.json scripts directly even without an alias set up.
Examples use an implied bw alias for brevity instead of bunx bun-workspaces.
Using bunx is preferred over a global install, because it ensures version consistency within projects that have installed it.
Note that you need to run bun install in your project forbun-workspaces to find your project's workspaces, and you likely must run this again after you've updated your workspaces, such as changing a name or adding/removing one. This is because bun.lock lists workspaces and is used as the source of truth.
Required Bun version: ^1.2.0
Global options should come before any commands.
Usage: --cwd | -d
Get the project root from a specific directory. This should be where the root package.json of your project is located.
bw --cwd=/path/to/your/project list-workspaces
bw -d /path/to/your/project list-workspacesUsage: --workspace-root | -w
Run from the project root when you are in a workspace subdirectory. This is similar to pnpm's -w option.
cd packages/my-workspace
# Run from the project root
bw --workspace-root ls
bw -w ls
# Similar to pnpm -w run
# "@root" references the root package like a workspace
bw -w run my-root-script @rootUsage: --include-root | -r
Include the root workspace as a normal workspace. This overrides config and environment variable settings.
bw --include-root list-workspaces
bw -r list-workspaces
bw --no-include-root list-workspaces # disable (to override config/env)Usage: --disable-executable-configs
Disable loading of executable config files (written in TS/JS) for untrusted contexts. This can be set by default using the environment variable BW_DISABLE_EXECUTABLE_CONFIGS_DEFAULT=true.
bw --disable-executable-configs list-workspacesSee more on the Root Workspace.
Usage: --log-level | -l
Values: debuginfowarnerrorsilent
Default Value: info
Set the logging level. For the run-script (run) command, silence output with --output-style=none.
bw --log-level=debug list-workspaces
bw -l error list-workspaces