Migrating from bun-workspaces
pacwich is essentially the direct continuation of the package bun-workspaces, a very similar package that was built only to work
on top of Bun as a package manager.
If you are a bun-workspaces user, you can expect minimal to no changes on average beyond the name change, thanks to the fact
that pacwich auto-detects Bun as your package manager from bun.lock and has almost the same CLI and API as bun-workspaces.
There's a high chance you can simply treat this as a name swap only without issue.
However, a few small breakages/removals have occurred, highlighted below, and config files have naming changes, including that "root config" will now be generally referred to as "project config". Jump to config changes
You can also browse some of the feature additions below.
Agent Assistance
You can have an LLM agent assist with migration by simply instructing it to read this page as https://pacwich.dev/intro/bun-workspaces-migration/index.md.
Install
You can globally and/or locally install pacwich with Bun, npm or pnpm. The global pacwich command provides a convenient binary that will run the CLI from a local install if found.
General Changes
- Change (potentially breaking): The shell option for inline scripts now defaults to
"system"instead of"bun", due to this no longer being a Bun-specific package. You can still use "bun" as your shell with any package manager, though it will fail if thebuncommand is not available. - Change (breaking): All environment variables used for settings which started with
BW_now start withPACWICH_. - Support:
pacwichruns via Node 22 or higher and Bun 1.2 or higher.npx pacwichandbunx pacwichcan both be used to invoke the CLI. - Addition: Along with
node_modules/pacwich/AGENTS.md, you can access smaller agent files for more specific usage docs undernode_modules/pacwich/agents/. Read more
CLI Changes
- Fix (possibly breaking): The
runandrun-affected-doption (short for--dep-order) clashed with the global option-d(short for--cwd). The--dep-ordershort form is now-D. - Removal (warning message temporarily logged): The global option
-w|--workspace-roothas been removed. This was a pnpm-inspired feature, but this is nowpacwich's default behavior, so the flag is not needed.pacwichalways walks up your directory tree to find a project root. - Addition: A new global option
--pmto explicitly set a package manager, though default auto-detection or using project config is generally preferred. - Addition: Project config can now set
defaults.cliScriptOutputStyleto set the default--output-styleof theruncommand,"grouped"only available on a TTY, which falls back to"prefixed". - Addition: A CLI command
add-skillsto add agent skill files to your project - Addition: A
verifycommand for the new verify feature described above.
API Changes
- Removal (breaking):
Project.createScriptCommand()was removed. This was a lower level utility never alluded to in examples and was dependent on Bun-specific details. - Change (deprecation):
Project.config.rootis renamed toProject.config.project(reference to config such as defined inpacwich.project.ts). - Change (deprecation):
Project.mapScriptsToWorkspaces()is deprecated in favor of the newProject.scriptMapproperty of the same type as the method's return value. - Change (deprecation):
Project.mapTagsToWorkspaces()is deprecated in favor of the newProject.tagMapproperty of the same type as the method's return value. - Addition:
createFileSystemProject()accepts apackageManageroption, similar to the new--pmCLI option, though default auto-detection or using project config is generally preferred. - Addition:
Project.verify()is the API equivalent of the new CLIverifycommand.
MCP Changes
- Removal (breaking). Project tools have been removed due to being redundant with the CLI.
Agents should instead simply read the documentation resources provided and use the CLI for
pacwichoperations.
Config Changes
The names of your config files have changed, but the new config files are currently backwards compatible with bun-workspaces config files,
though some utility names have been deprecated for the root config (see below).
Of course, for TS/JS files, you'll import utils from "pacwich/config" instead of "bun-workspaces/config".
Workspace Config
Workspace config is fully backwards compatible.
- Rename:
bw.workspace.{ts,js,json,jsonc}→pacwich.workspace.{ts,js,json,jsonc}
Root Config, now "Project Config"
What was called "root config" in bun-workspaces is now called "project config" in pacwich, to keep the naming simple and consistent
with the package's primitives.
The actual config object value is backwards compatible, with only optional properties added.
- Rename:
bw.root.{ts,js,json,jsonc}→pacwich.project.{ts,js,json,jsonc} - Deprecation (imported util):
defineRootConfigis deprecated in favor ofdefineProjectConfig. - Deprecation (imported util):
mergeRootConfigis deprecated in favor ofmergeProjectConfig. - Deprecation (imported type): The
RootConfigtype is deprecated in favor ofProjectConfig. Similar types using "Root" have the same name change to use "Project". - Addition (config value): The
packageManagervalue sets the expected package manager, mainly for when multiple lockfiles are present - Addition (config value):
defaults.cliScriptOutputStylesets the default--output-styleargument for running scripts - Addition (config value):: New
verifyproperty sets options for theverifyfeature
Notes on Deprecated Utilities
When using a TS/JS file, utility and type names are temporarily backwards compatible, but you're encouraged to move to the new "project" names over the deprecated "root" names:
// Old: bw.root.ts
import { defineRootConfig, type RootConfig } from 'bun-workspaces/config';
export default defineRootConfig({
// ... your config
})
// New: pacwich.project.ts
import { defineProjectConfig, type ProjectConfig } from 'pacwich/config';
export default defineProjectConfig({
// ... your config
})

