Dev Environment Kamu Rusak Lagi?
Kamu pasti pernah ngalamin ini: clone repo teman, jalankan npm install, terus terminal langsung muntah error karena Node version-nya beda. Atau lebih parah — kamu upgrade Python buat satu project, tiba-tiba project lain yang pakai pip langsung berantakan.
Solusi klasiknya? pyenv, nvm, rbenv, satu per satu per bahasa. Belum lagi kalau project-nya butuh PostgreSQL versi spesifik, atau Redis yang harus jalan di background. Akhirnya laptop kamu penuh sama daemon yang nggak jelas siapa yang nyalain.
Gue udah nyoba berbagai pendekatan — Docker Compose buat dev environment (berat dan lambat buat solo project), Nix (powerful tapi learning curve-nya brutal), sampai akhirnya ketemu Devbox.
Devbox adalah CLI tool dari Jetpack.io yang pakai Nix di baliknya, tapi ngasih developer experience yang jauh lebih manusiawi. Kamu define dependencies per-project dalam satu file JSON, terus Devbox bikin isolated shell yang nggak nyentuh system packages kamu sama sekali.
Kenapa Devbox, Bukan Docker atau venv?
Sebelum lanjut ke setup, gue mau jujur soal trade-off-nya.
Docker Compose bagus buat simulate production environment, tapi buat solo dev yang cuma mau nulis kode dan test cepat, overhead-nya terasa. Setiap kali mau debug, kamu harus masuk container, mount volume, urusin network. Belum kalau RAM laptop kamu pas-pasan.
venv / virtualenv cuma handle Python. Kalau project kamu butuh Node, Go, atau binary system kayak ffmpeg, kamu tetap harus install manual.
Devbox handle semua itu dalam satu file. Dia nggak pakai container — dia bikin isolated shell environment langsung di OS kamu, tapi dependencies-nya terisolasi per-project. Startup-nya cepat karena nggak ada VM atau container yang harus boot.
Gotcha yang perlu kamu tau dari awal: Devbox butuh Nix package manager di belakangnya. Dia install otomatis, tapi di Mac kamu butuh akses sudo waktu pertama kali install. Di Linux lebih smooth.
Install Devbox
Satu command, selesai:
curl -fsSL https://get.jetpack.io/devbox | bash
Script ini akan install Nix kalau belum ada, terus install Devbox CLI. Setelah selesai, restart terminal kamu atau jalankan:
source ~/.bashrc # atau ~/.zshrc kalau pakai zsh
Verifikasi:
devbox version
# Output: 0.10.x (atau versi terbaru)
Setup Project Pertama: Python + PostgreSQL
Misalnya kamu mau bikin FastAPI app yang connect ke PostgreSQL. Biasanya kamu harus:
- Install Python versi yang bener
- Bikin virtualenv
- Install PostgreSQL atau jalankan Docker
- Set environment variables
- Berharap semuanya nyambung
Dengan Devbox, ini jadi:
mkdir fastapi-project && cd fastapi-project
devbox init
Ini bikin file devbox.json di folder kamu:
{
"$schema": "https://raw.githubusercontent.com/jetpack-io/devbox/0.10.0/.schema/devbox.schema.json",
"packages": [],
"shell": {
"init_hook": [],
"scripts": {}
}
}
Sekarang tambah packages yang kamu butuh:
devbox add python310 postgresql14
Devbox akan download dan configure packages-nya. File devbox.json kamu sekarang jadi:
{
"$schema": "https://raw.githubusercontent.com/jetpack-io/devbox/0.10.0/.schema/devbox.schema.json",
"packages": [
"python310@latest",
"postgresql14@latest"
],
"shell": {
"init_hook": [
"echo 'Dev environment ready!'"
],
"scripts": {}
}
}
Masuk ke isolated shell:
devbox shell
Sekarang cek versi Python di dalam shell ini:
python --version
# Python 3.10.x — bukan system Python kamu!
which python
# /path/to/nix/store/...python3.10.../bin/python
Keluar dari devbox shell, python kamu balik ke versi system. Nggak ada yang berubah di luar project folder ini.
Tambah Virtual Environment Python di Dalam Devbox
Devbox handle system-level dependencies, tapi untuk Python packages (fastapi, uvicorn, dll), kamu tetap pakai venv. Bedanya, venv ini jalan di atas Python yang udah diisolasi Devbox.
Tambahkan init hook di devbox.json:
{
"$schema": "https://raw.githubusercontent.com/jetpack-io/devbox/0.10.0/.schema/devbox.schema.json",
"packages": [
"python310@latest",
"postgresql14@latest"
],
"shell": {
"init_hook": [
"python -m venv .venv",
"source .venv/bin/activate",
"pip install -q fastapi uvicorn psycopg2-binary"
],
"scripts": {
"start": "uvicorn main:app --reload",
"db:init": "initdb -D .devbox/db && pg_ctl -D .devbox/db -l .devbox/db.log start"
}
}
}
Sekarang tiap kali kamu devbox shell, dia otomatis:
- Bikin venv kalau belum ada
- Activate venv
- Install dependencies
Dan kamu bisa jalankan script yang udah didefinisikan:
devbox run db:init # init dan start PostgreSQL lokal
devbox run start # jalankan FastAPI
Contoh: FastAPI App Minimal yang Jalan
Buat file main.py:
from fastapi import FastAPI
import psycopg2
import os
app = FastAPI()
DB_URL = os.getenv("DATABASE_URL", "postgresql://localhost/.devbox/db")
@app.get("/")
def root():
return {"status": "ok", "env": "devbox"}
@app.get("/health")
def health():
try:
conn = psycopg2.connect(f"dbname=postgres host=/tmp")
conn.close()
return {"db": "connected"}
except Exception as e:
return {"db": "error", "detail": str(e)}
Jalankan:
devbox shell
devbox run db:init # sekali aja
devbox run start
Buka http://localhost:8000 — endpoint / langsung response. Endpoint /health akan coba connect ke PostgreSQL lokal yang jalan di .devbox/db.
Gotcha yang Gue Temuin
1. PostgreSQL socket path beda di Devbox
Kalau kamu biasa connect ke PostgreSQL pakai localhost, di Devbox setup lokal ini kamu harus pakai Unix socket. Default socket-nya ada di /tmp/.s.PGSQL.5432. Connection string yang bener:
# Salah:
conn = psycopg2.connect("host=localhost dbname=postgres")
# Bener (pakai socket):
conn = psycopg2.connect("host=/tmp dbname=postgres")
2. Init hook jalan tiap kali devbox shell
Kalau init hook kamu ada pip install, ini bakal jalan tiap masuk shell. Lambat. Fix-nya: cek dulu sebelum install:
"init_hook": [
"[ ! -d .venv ] && python -m venv .venv",
"source .venv/bin/activate",
"[ ! -f .venv/.installed ] && pip install -q -r requirements.txt && touch .venv/.installed"
]
3. Package name di Devbox beda sama nama binary-nya
Misalnya kamu mau install ripgrep:
devbox add ripgrep # ini bener
Tapi untuk beberapa tools, nama package di Nix berbeda. Kalau devbox add gagal, cari dulu:
devbox search <nama-tool>
4. .devbox folder jangan di-commit
Tambahkan ke .gitignore:
.devbox/
.venv/
Yang di-commit cuma devbox.json dan devbox.lock. Teman kamu tinggal clone repo, jalankan devbox shell, dan environment-nya sama persis.
Integrasi dengan VS Code
Devbox punya extension VS Code yang otomatis detect devbox.json dan tawarin buat aktifkan environment. Tapi kalau mau manual:
# Di terminal VS Code, masuk ke devbox shell dulu
devbox shell
# Terus buka VS Code dari dalam shell ini
code .
Dengan cara ini, VS Code Python extension akan detect venv yang udah aktif di shell.
Alternatifnya, pakai devbox generate direnv untuk generate .envrc file yang otomatis aktifkan devbox shell tiap kamu masuk folder (butuh direnv install di system):
devbox generate direnv
direnv allow
Setelah ini, tiap cd ke folder project, environment langsung aktif. Nggak perlu manual devbox shell lagi.
Share Environment ke Tim (atau Diri Sendiri di Laptop Lain)
Ini yang bikin Devbox worth it buat solo developer sekalipun.
Commit devbox.json dan devbox.lock ke repo:
git add devbox.json devbox.lock
git commit -m "chore: add devbox environment config"
git push
Di laptop baru atau server baru:
git clone <repo-kamu>
cd <repo-kamu>
devbox shell # otomatis install semua dependencies yang sama
devbox.lock menjamin versi package yang sama persis — kayak package-lock.json tapi untuk system dependencies.
Buat kamu yang sering ganti-ganti antara beberapa project dengan stack berbeda (misalnya satu project Node 18, satu lagi Node 20, satu lagi Python), ini life-saver. Nggak ada lagi drama nvm use yang lupa, atau Python yang tiba-tiba jadi versi salah.
Yang Gue Lakuin Sekarang
Semua project baru gue sekarang mulai dengan devbox init. Bahkan project kecil yang cuma butuh satu bahasa — karena devbox.json yang di-commit itu dokumentasi environment yang selalu up-to-date.
Langkah lanjutan yang worth dicoba:
-
Coba
devbox generate dockerfile— Devbox bisa generate Dockerfile daridevbox.jsonkamu, jadi dev environment dan production image-nya konsisten. -
Explore Devbox Cloud — kalau kamu mau share environment ke tim yang belum install Devbox, mereka bisa jalankan via browser. Masih beta, tapi promising.
-
Combine dengan
process-compose— this guide menunjukkan bagaimana Devbox punya integrasi built-in denganprocess-composeuntuk jalankan multiple services (web server + database + worker) sekaligus dengan satu commanddevbox services up.
Coba mulai dari project yang paling sering bikin kamu kesel waktu setup ulang. Kemungkinan besar devbox add bisa handle dependencies-nya, dan kamu nggak akan pernah mau balik ke cara lama.