Bun 73,307 reads npm-style workspaces from the root package.json and, like pnpm 69,400 , accepts workspace: and catalog: dependencies. The catalog goes inside the workspaces object: "workspaces": { "packages": ["packages/*"], "catalog": { "express": "^5.1.0", "pg": "^8.16.3" } }. With the same two packages as in Yarn Workspaces and pnpm Workspaces and Catalogs, install and test everything.
cd ~/v5-ch1/bun-ws
bun install
readlink packages/api/node_modules/express
bun run --filter '*' testbun install v1.4.2 (744846f84) ... 80 packages installed [195.00ms] ../../../node_modules/.bun/express@5.2.1/node_modules/express @booknest/catalog test: $24.00 @booknest/catalog test: Exited with code 0 @booknest/api test: $18.50 @booknest/api test: Exited with code 0
The symlink reveals a different layout from Bun Install. Since Bun 1.3.2, a new workspace defaults to the isolated linker: packages live in node_modules/.bun/name@version, and each workspace sees only its declared dependencies, exactly pnpm's design. Single-package projects keep the hoisted layout. Choose with --linker isolated or --linker hoisted, or linker under [install] in bunfig.toml. --filter runs packages in dependency order, which is why the catalog's test printed first.