Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component...
npx skills add shipshitdev/library --skill "bun-validator"
Install specific skill from multi-skill repository
# Description
Validate Bun workspace configuration and detect common monorepo issues. Ensures proper workspace setup, dependency catalogs, isolated installs, and Bun 1.3+ best practices.
# SKILL.md
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.
version: 1.0.0
tags:
- bun
- monorepo
- workspace
- validation
- package-manager
Bun Validator
Validates Bun workspace configuration and prevents common monorepo issues. Ensures Bun 1.3+ patterns and proper workspace isolation.
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 ~/.claude/skills/bun-validator/scripts/validate.py --root .
python3 ~/.claude/skills/bun-validator/scripts/validate.py --root . --strict
What Gets Checked
1. Bun Version
# GOOD: v1.3+
bun --version # 1.3.0 or higher
# BAD: v1.2 or earlier
bun --version # 1.2.x
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" // BAD: Don't put deps in root
}
}
3. Workspace Structure
GOOD:
my-monorepo/
βββ package.json # Root with workspaces, private: true
βββ bun.lockb # Single lockfile at root
βββ apps/
β βββ web/
β β βββ package.json # Own dependencies
β βββ api/
β βββ package.json # Own dependencies
βββ packages/
βββ ui/
β βββ package.json # Shared package
βββ config/
βββ package.json # Shared config
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" // BAD: Use workspace:*
}
}
5. Dependency Catalogs (Bun 1.3+)
GOOD - Centralized versions:
// Root package.json
{
"catalog": {
"react": "^19.0.0",
"typescript": "^5.7.0",
"@types/node": "^22.0.0"
}
}
// apps/web/package.json
{
"dependencies": {
"react": "catalog:" // Uses version from catalog
}
}
6. Isolated Installs
GOOD - Default in Bun 1.3:
Packages can only access dependencies they explicitly declare.
BAD - Hoisted dependencies:
// Don't disable isolation
{
"workspaces": {
"packages": ["apps/*"],
"nohoist": ["**"] // Don't do this
}
}
Bun 1.3+ Features
Dependency Catalogs
Centralize version management:
// Root package.json
{
"catalog": {
"react": "^19.0.0",
"next": "^16.0.0",
"typescript": "^5.7.0"
}
}
Interactive Updates
bun update --interactive # Selectively update deps
Dependency Chains
bun why react # Explain why a package is installed
Workspace Commands
# Install in specific workspace
bun add express --cwd apps/api
# Run script in workspace
bun run --cwd apps/web dev
# Run in all workspaces
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 # From root only
Issue: Version conflicts
Cause: Same package with different versions across workspaces
Fix: Use dependency catalogs:
{
"catalog": {
"problematic-package": "^1.0.0"
}
}
Validation Output
=== Bun Workspace Validation Report ===
Bun Version: 1.3.2 β
Root package.json:
β private: true
β workspaces defined
β Found dependencies in root (should be empty)
Workspace Structure:
β apps/web - valid workspace
β apps/api - valid workspace
β packages/ui - valid workspace
β apps/web/bun.lockb - lockfile should only be at root
Dependencies:
β Using workspace:* protocol
β @myorg/ui uses hardcoded version "1.0.0"
Catalogs:
β No dependency catalog found (recommended for Bun 1.3+)
Summary: 3 issues found
Best Practices
1. Always use workspace protocol
"@myorg/shared": "workspace:*"
2. Use --cwd for workspace operations
bun add lodash --cwd apps/web # NOT: cd apps/web && bun add
3. Single lockfile at root
# Only run bun install from root
bun install
4. Use catalogs for shared dependencies
{
"catalog": {
"typescript": "^5.7.0",
"vitest": "^3.0.0"
}
}
5. Declare all dependencies explicitly
Each workspace should list all its dependencies - don't rely on hoisting.
CI/CD Integration
# .github/workflows/validate.yml
- name: Validate Bun Workspace
run: |
python3 ~/.claude/skills/bun-validator/scripts/validate.py \
--root . \
--strict \
--ci
Integration
linter-formatter-init- Sets up Biome with Bunproject-scaffold- Creates workspace structurenextjs-validator- Validates Next.js in workspace
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.