Dev Environment Kamu Hancur Lagi?
Skenario klasik: kamu clone repo lama, jalankan npm install, dan langsung disambut error:
error: The engine "node" is incompatible with this module.
Expected version "16.x". Got "20.4.0"
Atau lebih parah — kamu baru ganti laptop, dan habis dua hari cuma buat install ulang semua dependency: Python versi ini, Go versi itu, PostgreSQL yang harus match sama production. Belum lagi kalau kamu kerja di beberapa project sekaligus dengan versi runtime yang konflik.
Solusi yang biasa disarankan? Docker. Tapi Docker buat dev environment itu berat — image-nya gede, rebuild-nya lama, dan kalau kamu solo engineer yang kerja di laptop dengan RAM 8GB, itu terasa banget.
Ada alternatif yang lebih ringan dan elegan: Devbox.
Apa Itu Devbox dan Kenapa Beda
Devbox adalah CLI tool dari Jetpack.io yang bikin isolated development environment tanpa container. Di baliknya, Devbox pakai Nix package manager — tapi kamu nggak perlu belajar Nix sama sekali. Devbox wraps Nix dengan interface yang jauh lebih manusiawi.
Bedanya sama Docker untuk dev:
- Nggak ada container overhead — environment-nya jalan langsung di sistem kamu, tapi terisolasi per-project.
- Reproducible — satu file
devbox.jsondi-commit ke repo, siapapun yang clone langsung bisadevbox shelldan langsung jalan. - Fast — package di-cache secara global di sistem kamu. Install kedua kalinya? Instan.
- Nggak ganggu sistem — semua package Devbox hidup di
/nix/store, nggak nyentuh/usr/local/binatau sistem package manager kamu.
Kalau kamu pernah pakai asdf atau mise, konsepnya mirip — tapi Devbox lebih luas karena bisa manage hampir semua package, bukan cuma runtime.
Install Devbox
Satu command, jalan di macOS dan Linux:
curl -fsSL https://get.jetpack.io/devbox | bash
Script ini akan install Nix dulu kalau belum ada, lalu install Devbox. Prosesnya sekitar 2–5 menit tergantung koneksi.
Verifikasi:
devbox version
# 0.10.x
Gotcha: Di macOS dengan SIP (System Integrity Protection) aktif, installer Nix kadang gagal di langkah mount. Kalau kena ini, jalankan installer Nix secara manual dulu dari
https://nixos.org/downloaddengan opsi--daemon, baru install Devbox.
Setup Project Pertama: Node + PostgreSQL
Kita ambil contoh konkret: project Express.js yang butuh Node 18 dan PostgreSQL 15. Tanpa Devbox, kamu harus manage ini manual atau pakai Docker Compose yang lumayan verbose.
Init Devbox di Project
cd ~/projects/my-api
devbox init
Ini bikin file devbox.json kosong di direktori project kamu:
{
"$schema": "https://raw.githubusercontent.com/jetpack-io/devbox/0.10.0/.schema/devbox.schema.json",
"packages": [],
"shell": {
"init_hook": [],
"scripts": {}
}
}
Tambah Package
devbox add nodejs@18 postgresql@15
Devbox bakal resolve package dari Nixpkgs dan update devbox.json:
{
"$schema": "https://raw.githubusercontent.com/jetpack-io/devbox/0.10.0/.schema/devbox.schema.json",
"packages": [
"nodejs@18",
"postgresql@15"
],
"shell": {
"init_hook": [
"echo 'Dev environment ready. Node: '$(node --version)"
],
"scripts": {
"start": "node src/index.js",
"db:init": "initdb -D .devbox/db && pg_ctl -D .devbox/db -l .devbox/db/postgres.log start"
}
}
}
Gue tambah init_hook buat greeting sederhana, dan dua scripts: satu buat jalanin app, satu buat init database PostgreSQL lokal.
Masuk ke Dev Shell
devbox shell
Output:
Installing packages. This may take a few minutes...
Dev environment ready. Node: v18.20.3
(devbox) $
Sekarang kamu ada di isolated shell. Cek:
which node
# /nix/store/xxxx-nodejs-18.20.3/bin/node
which psql
# /nix/store/xxxx-postgresql-15.x/bin/psql
Keluar dari shell? Tinggal exit. Node dan psql versi Devbox nggak akan keliatan di shell normal kamu.
Init Database PostgreSQL Lokal
Ini bagian yang biasanya ribet kalau manual. Dengan script yang udah kita define:
devbox run db:init
Ini bakal:
- Bikin direktori
.devbox/db/sebagai data directory PostgreSQL. - Jalanin
initdbbuat initialize cluster. - Start PostgreSQL server yang listen di socket lokal.
Tambahkan .devbox/db/ ke .gitignore:
# .gitignore
.devbox/db/
Buat connect ke database:
psql -h localhost -U $USER postgres
Atau kalau kamu pakai Unix socket (lebih cepat):
psql -d postgres
Gotcha: PostgreSQL yang dijalankan via Devbox ini nggak pakai port 5432 sistem kamu — dia pakai socket di
.devbox/db/. Kalau app kamu hardcodehost: 'localhost', pastikan juga setportyang benar atau switch ke socket connection string:postgresql:///mydb.
Environment Variables dengan devbox.json
Salah satu fitur yang underrated: kamu bisa set env vars langsung di devbox.json via init_hook, atau lebih rapi lagi pakai file .env yang di-source otomatis.
Tambahkan ini ke init_hook:
"init_hook": [
"export DATABASE_URL=postgresql://localhost/myapp_dev",
"export NODE_ENV=development",
"echo 'Env loaded. Node: '$(node --version)"
]
Atau kalau kamu prefer .env file (dan udah ada di project):
"init_hook": [
"[ -f .env ] && source .env",
"echo 'Env loaded.'"
]
Ini jauh lebih clean daripada harus source .env manual tiap buka terminal baru.
Devbox Scripts: Ganti npm run / make
Bagian scripts di devbox.json itu basically task runner ringan. Kamu bisa define workflow yang kompleks:
"scripts": {
"start": "node src/index.js",
"dev": "node --watch src/index.js",
"db:init": "initdb -D .devbox/db && pg_ctl -D .devbox/db -l .devbox/db/postgres.log start",
"db:start": "pg_ctl -D .devbox/db -l .devbox/db/postgres.log start",
"db:stop": "pg_ctl -D .devbox/db stop",
"db:migrate": "node scripts/migrate.js",
"setup": "npm install && devbox run db:init && devbox run db:migrate"
}
Jalanin dengan:
devbox run setup # first time setup
devbox run dev # development mode
devbox run db:stop # matiin postgres sebelum tutup laptop
Script setup itu one-liner yang handle full onboarding: install npm deps, init database, jalanin migration. Kalau ada teammate baru (atau kamu sendiri di laptop baru), satu command itu cukup.
Commit devbox.json ke Repo
Ini poin pentingnya. File yang perlu di-commit:
✅ devbox.json
✅ devbox.lock # generated, pin exact package versions
❌ .devbox/db/ # data directory, masuk .gitignore
❌ .devbox/virtenv/ # generated, masuk .gitignore
devbox.lock itu mirip package-lock.json — dia pin exact Nix store hash dari setiap package. Ini yang bikin environment kamu benar-benar reproducible: orang lain yang clone repo kamu bakal dapat bit-for-bit package yang sama.
Contoh .gitignore tambahan:
# Devbox
.devbox/db/
.devbox/virtenv/
Integrasi dengan Direnv (Opsional tapi Recommended)
Capek harus ketik devbox shell tiap masuk direktori project? Pakai direnv.
Install direnv:
# macOS
brew install direnv
# Ubuntu/Debian
apt install direnv
Tambah ke shell config kamu (~/.zshrc atau ~/.bashrc):
eval "$(direnv hook zsh)" # atau bash
Generate .envrc di project:
devbox generate direnv --print-envrc > .envrc
direnv allow
Sekarang setiap kamu cd ke direktori project, Devbox environment langsung aktif otomatis. Keluar dari direktori, environment hilang. Zero friction.
Gotcha: Jangan commit
.envrckalau dia contain secret. Tapi kalau isinya cumaeval "$(devbox shellenv)"(yang di-generated Devbox), itu aman di-commit.
Cari Package yang Tersedia
Nixpkgs punya lebih dari 80.000 package. Cara cari:
devbox search ripgrep
devbox search python
devbox search "python@3.11"
Atau lewat web: search.nixos.org
Beberapa package yang sering gue pakai di dev environment:
devbox add python@3.11 poetry # Python project
devbox add go@1.22 # Go project
devbox add rustup # Rust
devbox add redis # Redis lokal
devbox add awscli2 terraform # Infrastructure tools
devbox add jq httpie # CLI utilities
Perbandingan Singkat: Devbox vs Alternatif
| Devbox | Docker Compose | asdf/mise | |
|---|---|---|---|
| Overhead | Rendah | Tinggi | Rendah |
| Reproducible | ✅ (bit-exact) | ✅ | ⚠️ (versi saja) |
| Non-runtime packages | ✅ | ✅ | ❌ |
| Setup complexity | Rendah | Sedang | Rendah |
| Works offline | ✅ (cached) | ⚠️ | ✅ |
| Learning curve | Rendah | Sedang | Rendah |
Devbox bukan pengganti Docker untuk production atau service isolation — kalau kamu butuh run multiple service dalam network yang terisolasi, Docker Compose masih lebih tepat. Tapi untuk dev environment tooling, Devbox menang di hampir semua kategori.
Yang Gue Lakuin Sekarang
Semua project aktif gue sekarang punya devbox.json. Workflow-nya:
- Clone repo →
devbox shell(atau otomatis via direnv) → langsung kerja. - Butuh tool baru?
devbox add <package>, commitdevbox.jsondandevbox.lock. - Ganti laptop?
git clone,devbox shell,devbox run setup. Selesai dalam menit, bukan jam.
Langkah lanjutan yang bisa kamu coba:
- Tambah Devbox ke CI/CD pipeline — Jetpack punya GitHub Action resmi.
- Explore
devbox generate dockerfilekalau mau containerize app kamu dengan base image yang match dev environment. - Coba
devbox global addbuat install tool yang kamu pakai di semua project (sepertiripgrep,fd,httpie) tanpa polusi sistem.
Dev environment yang reproducible itu bukan luxury — itu prerequisite buat kerja yang tenang. Devbox bikin itu jadi mudah tanpa harus jadi Nix expert dulu.