Environment Dev Bentrok Lagi, Capek?
Kamu lagi ngerjain dua proyek sekaligus — satu pakai Node 16, satunya butuh Node 20. Atau Python 3.9 vs 3.11. Tiap kali pindah proyek, kamu nvm use dulu, ganti virtualenv, terus lupa aktifin yang bener, dan boom — error aneh yang buang 30 menit buat debug.
Itu masalah klasik yang bikin frustrasi. Solusi selama ini? Docker. Tapi Docker bawa overhead sendiri: image gede, daemon yang makan RAM, dan docker-compose.yml yang makin lama makin kompleks cuma buat development environment.
Devbox menawarkan pendekatan lain. Ini adalah devbox self-hosted development tools yang jalan di atas Nix package manager — isolated, reproducible, dan nggak butuh container sama sekali.
Devbox Itu Apa, Sebenernya?
Devbox adalah CLI tool buatan Jetpack.io yang nge-wrap Nix supaya developer biasa bisa pakai tanpa harus ngerti Nix dari nol. Konsepnya simpel:
- Setiap proyek punya
devbox.json— semacampackage.json-nya development environment. - Kamu
devbox shell→ masuk ke isolated shell dengan tools yang udah didefinisiin. - Keluar dari shell → environment balik bersih, nggak polusi sistem.
Ini bukan virtual machine, bukan container. Ini isolated shell environment yang pakai Nix store di /nix/store. Jauh lebih ringan dari Docker untuk use case development.
Install Devbox
Satu command, jalan di Linux dan macOS:
curl -fsSL https://get.jetpack.io/devbox | bash
Script ini akan install Nix dulu kalau belum ada, terus install devbox binary-nya. Prosesnya makan 2–5 menit tergantung koneksi.
Verifikasi:
devbox version
# Output: 0.x.x
Gotcha #1: Di macOS dengan SIP aktif, installer Nix butuh restart terminal setelah selesai. Kalau devbox command not found, tutup terminal dan buka lagi.
Setup Proyek Pertama: Node + PostgreSQL
Misalnya kamu mau setup environment untuk proyek Express.js yang butuh Node 20 dan PostgreSQL 15 — tanpa install global, tanpa Docker.
mkdir proyek-express && cd proyek-express
devbox init
Ini bikin devbox.json kosong:
{
"packages": [],
"shell": {
"init_hook": null,
"scripts": {}
}
}
Tambah packages yang kamu butuh:
devbox add nodejs@20 postgresql@15 git
Devbox langsung pull dari Nix package registry. devbox.json sekarang jadi:
{
"packages": [
"nodejs@20",
"postgresql@15",
"git"
],
"shell": {
"init_hook": [
"echo 'Environment siap. Node: $(node -v), PG: $(psql --version)'"
],
"scripts": {
"start": "node index.js",
"db:init": "initdb -D .devbox/pgdata && pg_ctl -D .devbox/pgdata -l .devbox/pg.log start"
}
}
}
Masuk ke environment:
devbox shell
Sekarang cek versi:
node -v # v20.x.x
psql --version # psql (PostgreSQL) 15.x
which node # /nix/store/....-nodejs-20/bin/node
Node 20 dan PostgreSQL 15 tersedia di shell ini. Keluar dari shell, node -v balik ke versi global sistem kamu (atau not found kalau emang nggak install global).
Jalanin PostgreSQL Lokal Tanpa Docker
Ini bagian yang paling gue suka. Biasanya untuk dev database, orang langsung reach for Docker. Dengan devbox, PostgreSQL bisa jalan langsung sebagai proses lokal.
Masih di dalam devbox shell, inisialisasi database:
# Inisialisasi data directory
initdb -D .devbox/pgdata
# Start PostgreSQL
pg_ctl -D .devbox/pgdata -l .devbox/pg.log start
# Buat database untuk proyek
createdb myapp_dev
# Masuk ke psql
psql myapp_dev
Database jalan di .devbox/pgdata — di dalam folder proyek. Nggak ada daemon global, nggak ada port conflict sama PostgreSQL lain yang mungkin jalan di sistem.
Stop database:
pg_ctl -D .devbox/pgdata stop
Gotcha #2: Data directory .devbox/pgdata jangan di-commit ke Git. Tambah ke .gitignore:
.devbox/pgdata/
.devbox/pg.log
devbox.json Sebagai Kontrak Environment
Ini yang bikin devbox powerful buat tim atau kalau kamu sendiri kerja di beberapa mesin.
Commit devbox.json dan devbox.lock ke Git. Siapapun yang clone repo dan jalanin devbox shell akan dapat exact same versions dari semua tools — down to the patch version.
git add devbox.json devbox.lock
git commit -m "chore: add devbox environment config"
Kalau teman kamu pull dan jalanin devbox shell, Nix akan download exact same packages dari cache. Nggak ada lagi "di laptop gue jalan kok" karena environment-nya literally sama.
Bandingkan ini sama .nvmrc yang cuma pin Node version tapi nggak pin tools lain, atau Dockerfile yang butuh Docker daemon dan build time.
Integrasi direnv: Auto-Activate Environment
Masuk manual ke devbox shell tiap kali buka folder proyek itu ribet. Devbox punya integrasi dengan direnv yang bisa auto-activate environment.
Install direnv dulu:
# macOS
brew install direnv
# Ubuntu/Debian
apt install direnv
Hook direnv ke shell kamu. Tambah ke ~/.bashrc atau ~/.zshrc:
eval "$(direnv hook bash)" # kalau pakai bash
# atau
eval "$(direnv hook zsh)" # kalau pakai zsh
Di folder proyek, generate .envrc:
devbox generate direnv --print-envrc > .envrc
direnv allow
Sekarang tiap kamu cd ke folder proyek, environment langsung aktif. cd keluar, environment nonaktif. Ini yang gue pakai sehari-hari — zero friction.
Gotcha #3: Pertama kali setup direnv, kamu harus jalanin direnv allow di setiap proyek. Ini by design — security feature supaya .envrc arbitrary nggak bisa auto-execute.
Scripts di devbox.json: Ganti Makefile
Devbox punya fitur scripts yang bisa jadi pengganti sederhana untuk Makefile atau npm scripts untuk orchestrate development tasks.
Contoh devbox.json yang lebih lengkap:
{
"packages": [
"nodejs@20",
"postgresql@15",
"redis@7"
],
"shell": {
"init_hook": [
"export DATABASE_URL=postgresql://localhost/myapp_dev",
"export REDIS_URL=redis://localhost:6379"
],
"scripts": {
"dev": "node --watch index.js",
"db:start": "pg_ctl -D .devbox/pgdata -l .devbox/pg.log start",
"db:stop": "pg_ctl -D .devbox/pgdata stop",
"db:reset": "dropdb myapp_dev && createdb myapp_dev && node migrate.js",
"redis:start": "redis-server --daemonize yes --logfile .devbox/redis.log",
"services:start": "devbox run db:start && devbox run redis:start"
}
}
}
Jalanin script:
devbox run services:start
devbox run dev
Environment variables di init_hook otomatis tersedia di semua scripts. Nggak perlu .env file untuk development config yang nggak sensitif.
Perbandingan: Devbox vs Docker untuk Dev Environment
Gue nggak bilang devbox selalu lebih baik dari Docker. Ini konteks yang jelas:
Pakai devbox kalau:
- Kamu solo developer atau tim kecil yang butuh isolated dev environment
- Proyek butuh multiple language versions (Node + Python + Go dalam satu repo)
- Kamu mau environment yang reproducible tanpa overhead container
- Deployment target kamu bukan container (VPS bare metal, misalnya)
Tetap pakai Docker kalau:
- Kamu butuh test behavior aplikasi di dalam container (karena production pakai Docker)
- Tim besar dengan workflow yang udah established di sekitar Docker Compose
- Kamu butuh network isolation antar services yang ketat
- Ada dependency yang nggak ada di Nix packages (jarang, tapi ada)
Untuk devbox self-hosted development tools di laptop atau VPS development pribadi, devbox menang di simplicity dan resource usage.
Setup di VPS untuk Remote Development
Bonus: devbox juga works great di VPS buat remote dev setup. Install sama seperti lokal:
# Di VPS (Ubuntu 22.04)
curl -fsSL https://get.jetpack.io/devbox | bash
# Clone repo
git clone https://github.com/kamu/proyek.git
cd proyek
# Langsung dapat environment yang sama
devbox shell
Kombinasiin ini sama VS Code Remote SSH atau JetBrains Gateway, dan kamu punya full dev environment di VPS yang bisa diakses dari mana aja — konsisten sama environment lokal karena devbox.lock di-commit.
Ini yang gue lakuin buat proyek-proyek yang butuh resource lebih dari laptop: dev di VPS 4 core / 8GB RAM, laptop cuma jadi terminal.
Yang Gue Lakuin Sekarang
Semua proyek baru gue mulai dengan devbox init. Workflow-nya:
devbox initdi root proyekdevbox addsemua tools yang dibutuhin- Setup
init_hookuntuk environment variables development - Setup scripts untuk common tasks (db:start, dev, test)
- Commit
devbox.jsondandevbox.lock - Setup direnv supaya auto-activate
Proyek lama yang masih pakai Docker Compose untuk dev environment, gue migrate bertahap — mulai dari ganti service database dulu, terus language runtime.
Kalau kamu mau coba, mulai dari proyek baru yang kecil dulu. Jalanin devbox add nodejs@20 dan rasain bedanya. Nix package registry punya hampir semua tools yang developer butuhkan — dari ffmpeg sampai kubectl sampai awscli.
Cek available packages di search.nixos.org — ini jadi referensi utama kamu buat nyari nama package yang tepat sebelum devbox add.