| name | bun-validator |
| description | Validate Bun workspace configuration and detect common monorepo issues. Ensures proper workspace setup, dependency catalogs, isolated installs, and Bun 1.3+ best practices. Use when setting up a Bun monorepo, before adding workspace dependencies, auditing an existing Bun workspace, or validating package.json in CI. |
| metadata | {"version":"1.0.1","tags":"bun, monorepo, workspace, validation, package-manager"} |
Bun Validator
When This Activates
- Setting up a new Bun monorepo
- Before adding dependencies to workspaces
- Auditing existing Bun workspaces
- After AI generates package.json files
- CI/CD pipeline validation
Quick Start
python3 scripts/validate.py --root .
python3 scripts/validate.py --root . --strict
What Gets Checked
1. Bun Version
bun --version
bun --version
2. Root package.json
GOOD - Monorepo root:
{
"name": "my-monorepo",
"private": true,
"workspaces": ["apps/*", "packages/*"]
}
BAD - Dependencies in root:
{
"workspaces": ["apps/*"],
"dependencies": {
"react": "^19.0.0"
}
}
3. Workspace Structure
GOOD: See references/full-guide.md (§ Workspace Structure Example) for the full tree — root package.json + bun.lockb, each app/package owns its own package.json.
BAD:
my-monorepo/
├── package.json
├── apps/
│ └── web/
│ ├── package.json
│ └── bun.lockb # BAD: Lockfile in workspace
4. Workspace Dependencies
GOOD - Using workspace protocol:
{
"dependencies": {
"@myorg/ui": "workspace:*",
"@myorg/config": "workspace:^1.0.0"
}
}
BAD - Hardcoded versions:
{
"dependencies": {
"@myorg/ui": "1.0.0"
}
}
5. Dependency Catalogs (Bun 1.3+)
GOOD - Centralized versions:
{
"catalog": {
"react": "^19.0.0",
"typescript": "^5.7.0",
"@types/node": "^22.0.0"
}
}
{
"dependencies": {
"react": "catalog:"
}
}
6. Isolated Installs
GOOD - Default in Bun 1.3:
Packages can only access dependencies they explicitly declare.
BAD - Hoisted dependencies:
{
"workspaces": {
"packages": ["apps/*"],
"nohoist": ["**"]
}
}
Bun 1.3+ Features
Dependency Catalogs
See § Dependency Catalogs (Bun 1.3+) above for the catalog syntax.
Interactive Updates
bun update --interactive
Dependency Chains
bun why react
Workspace Commands
bun add express --cwd apps/api
bun run --cwd apps/web dev
bun run --filter '*' build
Common Issues
Issue: "Cannot find module"
Cause: Dependency not declared in workspace package.json
Fix:
bun add <package> --cwd <workspace>
Issue: Multiple lockfiles
Cause: Running bun install in workspace directory
Fix:
rm apps/*/bun.lockb packages/*/bun.lockb
bun install
Issue: Version conflicts
Cause: Same package with different versions across workspaces
Fix: Use dependency catalogs:
{
"catalog": {
"problematic-package": "^1.0.0"
}
}
Validation Output
See references/full-guide.md (§ Validation Output Example) for a sample report.
Best Practices
- Always use the workspace protocol:
"@myorg/shared": "workspace:*"
- Use
--cwd for workspace operations: bun add lodash --cwd apps/web (not cd apps/web && bun add)
- Run
bun install only from the root — keep a single lockfile
- Use dependency catalogs for shared versions (see § Dependency Catalogs above)
- Declare all dependencies explicitly per workspace — don't rely on hoisting
CI/CD Integration
- name: Validate Bun Workspace
run: |
python3 scripts/validate.py \
--root . \
--strict \
--ci
Integration
linter-formatter-init - Sets up Biome with Bun
project-init-orchestrator - Creates workspace structure
nextjs-validator - Validates Next.js in workspace