2026-06-04 · 6 min
Bun 1.3 di Production: 4 Bulan Migrasi Payment Gateway
Empat bulan lalu, saya migrasi payment gateway untuk klien warung kuliner Tangerang dari Node 22 + Express ke Bun 1.3 + Hono. Hari ini, saya kasih angka real.
Setup
Project: middleware payment gateway untuk warung dengan ~3000 transaksi/hari. Stack lama: Node 22 + Express + Postgres 16 + Redis 7. Stack baru: Bun 1.3 + Hono + Postgres 16 + Redis 7. Same DB, same Redis, same nginx reverse proxy.
Hosted di VPS Hetzner 4 CPU / 8GB. Tidak migrasi infrastructure.
Latency
P50 sebelum: 47ms. P50 sesudah: 33ms. ~30% improvement. P95 sebelum: 142ms. P95 sesudah: 89ms. ~37% improvement. P99 sebelum: 280ms. P99 sesudah: 178ms. ~36% improvement.
Source latency: Bun’s faster HTTP server + faster JSON parsing. Tidak ada perubahan di logic atau DB query. Bukan magic.
Memory
RSS Node 22 setelah running 24 jam: ~480MB stable. RSS Bun 1.3 setelah running 24 jam: ~290MB stable.
Sekitar 40% reduction. Bun’s runtime indeed lebih kecil. Tapi: ini setelah saya nonaktifkan some Node-specific instrumentation yang Bun belum support optimal.
Yang break
-
pgnative module: Bun tidak well-tested denganpgextension yang pakai libpq native. Switch kepostgres.js(zero-dep). Migrasi 2 jam. Compatible. -
bcryptjsperformance regression: bcryptjs di Bun 1.3 sekitar 2x lebih lambat dari Node 22. Switch ke Bun-nativeBun.password.hash. Hashing time turun lebih dari Node baseline. -
Sentry SDK: Sentry’s
@sentry/nodev8 belum officially support Bun. Saya pakai@sentry/bun(community fork). Compatible tapi missing some features (no automatic instrumentation untuk fetch). -
jsonwebtoken: Works fine, tapi tidak sefast Node. Migrasi kejose(modern JOSE library). Faster + standards-compliant.
Yang DOWNTIME
Satu kali. Hari ke-23 production. Native module argon2 yang dipakai untuk verify password old user, crash dengan SIGSEGV di Bun 1.3.245. Postmortem: bug di N-API compat layer di Bun runtime.
Quick fix: rollback to Node 22 selama 4 jam. Lapor bug ke GitHub Bun. Patch keluar di 1.3.247 dua hari kemudian. Saya tunggu satu minggu observasi di staging, lalu re-migrate.
Total downtime: 4 jam dalam 4 bulan. Acceptable untuk SMB use case ini. Untuk fintech atau healthcare yang butuh five nines: belum cukup matang.
Build & deploy
# Old: Node 22
npm install --omit=dev
node --enable-source-maps server.js
# New: Bun 1.3
bun install --production
bun --smol server.ts
--smol flag turn-off some JIT optimizations, lebih hemat memory tanpa banyak penalty di throughput. Cocok untuk container ber-budget.
Kapan saya rekomendasi Bun 1.3 production
- ✅ SMB / mid-size service dengan throughput < 10k req/min
- ✅ Greenfield project yang bisa pakai modern dependencies
- ✅ Edge function di Cloudflare Workers (Bun compat dengan WinterCG)
Kapan saya BELUM rekomendasi
- ❌ Mission-critical fintech yang butuh full audit dependency chain
- ❌ Project yang heavily dependen native modules (canvas, sharp, image-processing)
- ❌ Tim yang ngga ada bandwidth handle library compatibility issues
Bun bagus, sudah cukup matang untuk most use case. Tapi bukan magic bullet.
Ditulis oleh Reza Pradipta