Devbox - Entornos de desarrollo reproducibles
Devbox (de Jetify) crea entornos de desarrollo aislados y reproducibles sin Docker ni máquinas virtuales. Es impulsado por Nix pero oculta el lenguaje Nix detrás de una configuración JSON simple (devbox.json) y una CLI familiar — ejecutas devbox add nodejs@20 en lugar de escribir una derivación Nix. El resultado: todos en el equipo (y CI) obtienen exactamente la misma cadena de herramientas, fijada a versiones precisas, aislada del sistema anfitrión.
Instalación
| Método | Comando |
|---|
| Script de instalación | `curl -fsSL https://get.jetify.com/devbox |
| Requerimiento | Nix (Devbox puede instalarlo por ti) |
| Verificar | devbox version |
Primeros pasos
| Comando | Descripción |
|---|
devbox init | Crea un devbox.json en el proyecto |
devbox add nodejs@20 python@3.12 | Agrega paquetes (versiones fijadas) |
devbox rm python | Elimina un paquete |
devbox install | Instala todo en devbox.json |
devbox shell | Ingresa en el entorno aislado |
devbox run <script> | Ejecuta un script definido dentro del env |
Gestionar paquetes
| Comando | Descripción |
|---|
devbox add go@1.22 | Agrega una versión específica |
devbox search postgresql | Busca en el catálogo de paquetes Nix |
devbox list | Lista paquetes instalados |
devbox update | Actualiza paquetes a lo más reciente permitido |
devbox info nodejs | Muestra detalles de un paquete |
Las versiones se resuelven contra el catálogo de Nixpkgs, por lo que nodejs@20 es reproducible en todas partes.
La configuración (devbox.json)
{
"packages": ["nodejs@20", "python@3.12", "postgresql@16"],
"shell": {
"init_hook": ["echo 'Welcome to the project env'"],
"scripts": {
"dev": "npm run dev",
"test": "npm test",
"db": "pg_ctl start"
}
}
}
| Campo | Propósito |
|---|
packages | Versiones de herramientas/lenguaje fijadas |
shell.init_hook | Comandos ejecutados al ingresar el shell |
shell.scripts | Comandos nombrados (devbox run dev) |
env | Variables de entorno para el proyecto |
Shell y scripts
| Comando | Descripción |
|---|
devbox shell | Shell aislado interactivo |
devbox run dev | Ejecuta el script dev |
devbox run -- npm ci | Ejecuta un comando arbitrario en el env |
exit | Sal del shell de Devbox |
Servicios (gestión de procesos)
Devbox puede gestionar servicios en segundo plano (bases de datos, etc.) para un proyecto.
| Comando | Descripción |
|---|
devbox services ls | Lista servicios configurados |
devbox services up | Inicia servicios |
devbox services stop | Detiene servicios |
devbox add postgresql --start-services | Agrega un paquete respaldado por servicios |
CI y contenedores
| Usar | Cómo |
|---|
| CI | Instala Devbox, ejecuta devbox run test — env idéntico al local |
| Docker | devbox generate dockerfile produce una imagen reproducible |
| Devcontainer | devbox generate devcontainer para VS Code |
| Direnv | devbox generate direnv para ingresar auto en el env al cd |
Flujos de trabajo comunes
# Levanta un env de proyecto reproducible desde cero
devbox init
devbox add nodejs@20 postgresql@16
devbox shell # ahora node + postgres están disponibles, fijados
# Ejecuta tareas de la misma manera localmente y en CI
devbox run test
# Produce una imagen Docker de la misma definición
devbox generate dockerfile
Devbox vs alternativas
| Aspecto | Devbox | Dev Containers | Nix (crudo) | mise |
|---|
| Backend | Nix | Docker | Nix | Propio registro |
| Configuración | JSON | devcontainer.json | Lenguaje Nix | .mise.toml |
| Aislamiento | Real (tienda Nix) | Contenedor | Real | Versiones de herramienta |
| Curva de aprendizaje | Suave | Moderada | Empinada | Suave |
| Mejor para | Envs reproducibles, fácil | Dev basado en contenedor | Poder Nix completo | Gestión de versión |
Ver también Nix para el poder subyacente, devcontainer para dev basado en contenedor, y mise para gestión de versión de herramienta.
Recursos