← Semua picks

Stack Comparison Conditional

pnpm vs Bun vs Yarn Berry untuk Monorepo 2026

Tiga package manager dengan strategi beda untuk monorepo. Saya pakai pnpm 24 bulan, Bun 14 bulan, Yarn Berry 10 bulan. Verdict tergantung shape monorepo.

11 Juni 2026 · 9 menit ·Use case: Package manager monorepo SMB Indonesia 2026
pnpmBunYarn Berry

TL;DR

  • pnpm: Paling matang untuk monorepo. Workspaces robust, hoisting strict, ekosistem terbesar. Conditional Recommend.
  • Bun: Tercepat (install 3-5x, script 2-3x). Runtime built-in. Conditional Recommend.
  • Yarn Berry: Plug’n’Play powerful, zero-install offline. Ekosistem plugin kecil. Conditional Recommend.
  • Verdict: pnpm default safe untuk team. Bun untuk speed-first solo. Yarn Berry untuk niche.

Konteks

Saya pakai ketiga di 11 monorepo project SMB Indonesia 2024-2026:

  • pnpm (7 monorepo): SaaS dental Jakarta (apps/web + apps/admin + packages/ui), ecommerce klinik (3 app + 4 package), admin HR, dan 4 lainnya
  • Bun (3 monorepo): MVP startup AI (apps/web + apps/api + packages/sdk), portfolio personal monorepo, internal tool warung
  • Yarn Berry (1 monorepo): legacy klien yang sudah pakai Yarn Berry — tidak migrate karena cost > benefit

Total 24 bulan compare.

Pricing (Juni 2026)

Ketiga gratis dan open-source. Cost = waktu install + CI minute.

Estimasi cost CI untuk monorepo medium (10 package, install + build):

ManagerInstall timeCI minute/PR
npm95s3.5 min
Yarn Classic75s3.0 min
pnpm35s1.8 min
Yarn Berry28s1.6 min
Bun12s1.2 min

Untuk team 3-5 dev × 5 PR/hari × 30 hari = 450-750 CI run/bulan. Cost CI di GitHub Actions:

  • npm: ~600 min/bulan = ~$5
  • pnpm: ~300 min/bulan = ~$2.5
  • Bun: ~200 min/bulan = ~$1.5

Bun saving terbesar di scale. pnpm sweet spot stability + speed.

Feature comparison

FeaturepnpmBunYarn Berry
WorkspacesYes (mature)Yes (since 1.0)Yes (mature)
Strict hoistingYesYesYes (PnP)
Symlink-basedYesYes (default)No (PnP)
Lockfilepnpm-lock.yamlbun.lockbyarn.lock
Script runnerpnpm runbun run (fastest)yarn run
Built-in runtimeNo (Node)Yes (Bun runtime)No (Node)
Turborepo integrationExcellentGoodExcellent
Nx integrationExcellentLimitedExcellent
Offline supportCache-basedCache-basedZero-install (best)
Plugin ecosystemMediumSmallMedium
Windows supportExcellentGood (improving)Excellent
Disk space efficiencyExcellent (content-addressable)GoodExcellent (PnP)

Performance benchmark

Test: monorepo 12 package, 1.2 GB node_modules total.

Fresh install (cold cache)

ManagerTime
npm2m 35s
Yarn Classic1m 58s
pnpm48s
Yarn Berry38s
Bun18s

Subsequent install (warm cache)

ManagerTime
npm45s
Yarn Classic32s
pnpm12s
Yarn Berry8s
Bun4s

Run script (build all)

ManagerTime
npm run build18s
pnpm run build12s
yarn build15s
bun run build9s

Bun menang clear untuk speed. pnpm + Yarn Berry similar (both jauh lebih cepat dari npm).

Disk usage (after install)

Managernode_modules size
npm1.2 GB
Yarn Classic1.1 GB
pnpm380 MB (content-addressable)
Yarn Berry (PnP)12 MB (no node_modules, .pnp.cjs)
Bun410 MB

Yarn Berry PnP menang disk space karena no node_modules. Tapi compatibility issue dengan beberapa tool (TypeScript, Webpack).

Trade-off

pnpm

Pro: Default safe untuk monorepo team. Strict hoisting = no accidental dep. Content-addressable storage = save disk (single copy per version global). Turborepo + Nx integration excellent. Documentation matang. Community besar.

Con: Tidak as cepat as Bun. Tidak ada built-in runtime (butuh Node). Strict mode kadang reveal peer dep warning yang noisy.

Bun

Pro: Tercepat untuk semua workflow (install, script, test, runtime). Built-in runtime = tidak butuh Node separate. bun.lockb binary lockfile = parse cepat. Ekosistem growing rapidly. Bun 2.0 monorepo matang.

Con: Compatibility kadang issue dengan tool legacy (post-install script, native modules). Windows support improving tapi tidak as polished as pnpm. Ekosistem plugin (Turborepo, Nx) sedikit lag dari pnpm.

Yarn Berry

Pro: Plug’n’Play = no node_modules, install 5-10x lebih cepat. Zero-install (commit cache ke git) = no install di CI. Plugin system powerful. Workspace mature.

Con: PnP compat issue dengan beberapa tool (Webpack 4, beberapa Babel plugin). Learning curve lebih steep. Community lebih kecil dari pnpm. Migration dari Yarn Classic non-trivial.

Konteks Indonesia

SaaS dental Jakarta (pnpm monorepo, 8 package): install 35s vs npm 2m. CI minute save 1.5 menit/PR × 80 PR/bulan = 120 menit save = save $1/bulan. Tapi DX gain (faster dev loop) significant — team 3 dev save 15-30 menit/hari × 22 hari = 5-11 jam/bulan saved per dev.

MVP AI startup (Bun monorepo, 4 package): install 12s vs pnpm 35s. Faster iteration untuk hot reload. Bun runtime untuk API (faster cold start). Total dev productivity 15-20% lebih tinggi.

Legacy klien (Yarn Berry, 6 package): maintain — tidak migrate karena cost > benefit. Tim familiar Yarn Berry workflow.

Use case decision matrix

ScenarioRecommended
New monorepo, team 2-5 devpnpm
New monorepo, solo devBun
Speed-first, modern stack (Hono, Astro)Bun
Strict hoisting + team consistencypnpm
Disk space constrained (CI cache)Yarn Berry (PnP)
Legacy Yarn Classic migrationpnpm
Migrasi dari Yarn Berry (rare)pnpm (lebih familiar)
Stack Bun-first (Bun runtime, Bun test)Bun
Stack Next.js heavy + Turborepopnpm atau Yarn Berry

Migration recipe

npm → pnpm (2-6 jam)

# 1. Backup
git checkout -b migrate/pnpm
cp package-lock.json package-lock.json.bak

# 2. Install pnpm
npm install -g pnpm

# 3. Convert
rm -rf node_modules package-lock.json
pnpm install

# 4. Add workspace config
echo "packages:
  - 'apps/*'
  - 'packages/*'" > pnpm-workspace.yaml

# 5. Update scripts (pnpm vs npm syntax sama)

# 6. Fix peer dep warning (manual)
# pnpm lebih strict — beberapa peer dep yang npm silent jadi warning

# 7. Update CI
# .github/workflows/ci.yml: ganti npm install → pnpm install

Yarn Classic → pnpm (3-8 jam)

# 1. Hapus yarn.lock + node_modules
rm -rf node_modules yarn.lock

# 2. pnpm install
pnpm install

# 3. Update package.json workspaces → pnpm-workspace.yaml

# 4. Update CI

pnpm → Bun (1-4 jam untuk modern project)

# 1. Install Bun
curl -fsSL https://bun.sh/install | bash

# 2. Convert
rm -rf node_modules pnpm-lock.yaml
bun install

# 3. Run test untuk verify
bun test

# 4. Update CI
# Replace pnpm install → bun install
# Replace pnpm run → bun run

Gotcha (lesson learned)

1. pnpm strict peer dep

pnpm 8+ default strict peer dep. Banyak package legacy declare peer dep tidak akurat. Workaround: auto-install-peers=true di .npmrc.

2. Bun native module compat

Beberapa native module (canvas, sharp tertentu) butuh compile native. Bun tidak selalu auto-handle. Workaround: pakai bunx --bun postinstall atau pre-build native binary.

3. Yarn Berry PnP + TypeScript

TypeScript pre-5.0 ada issue dengan PnP. TypeScript 5+ work. Pakai yarn dlx @yarnpkg/sdks vscode untuk editor support.

4. Lock file conflict di team

Jangan mix manager. Tim Anda harus commit ke 1 manager. Conflict pnpm-lock + package-lock = mess.

5. CI caching

  • pnpm: cache ~/.pnpm-store
  • Bun: cache ~/.bun/install/cache
  • Yarn Berry: cache .yarn/cache (atau zero-install: commit ke git)

Yang surprising

Bun monorepo maturity lebih cepat dari yang saya kira. Bun 1.0 (2024) monorepo support shaky. Bun 2.0 (Q1 2026) production-ready untuk monorepo medium. 3 project saya zero blocker.

pnpm strict hoisting catch banyak bug. Saya pernah punya project npm yang accidentally rely di hoisted dep (tidak di package.json). Migrate ke pnpm — break, lalu fix dengan explicit add ke package.json. Cleaner state.

Yarn Berry adoption Indonesia kecil. Dari 50+ dev yang saya kerja, < 5 yang aktif pakai Yarn Berry. Mostly pnpm atau npm.

Verdict

Conditional Recommend untuk ketiga:

Pakai pnpm jika:

  • Monorepo team 2-5 dev
  • Default safe untuk SMB Indonesia
  • Pakai Turborepo / Nx
  • Mixed skill team

Pakai Bun jika:

  • Solo dev atau team kecil familiar
  • Speed paling prioritas
  • Stack Bun-first (Bun runtime, Bun test)
  • Comfort dengan ekosistem yang lebih kecil

Pakai Yarn Berry jika:

  • Legacy project yang sudah Yarn Berry
  • Disk space constrained (CI cache)
  • Comfort dengan PnP workflow

Skip jika: monorepo Anda kecil (< 3 package). npm workspaces cukup untuk simple case.

Untuk benchmark Bun specific: Bun vs pnpm vs npm Astro. Untuk monorepo tool: Turborepo vs Nx vs Bun workspace.

Ditulis oleh Asti Larasati

// Pick Stack Comparison lain


← Semua picks RSS feed