- Flox es una plataforma de entornos de software para equipos de ingeniería, que gestiona con un solo manifiesto entornos idénticos y reproducibles desde la laptop del desarrollador hasta CI y producción
- Está basada en Nix, pero conocer Nix es opcional; su estructura reduce el drift de entornos mediante manifiestos declarativos e inputs con hashes de contenido fijados criptográficamente
- Funciona en macOS, Linux y Windows WSL2, permite buscar e instalar más de 120,000 paquetes de Nixpkgs y compilar/publicar software propio como paquetes reproducibles
- Con el flujo
flox init,flox install,flox activatecrea entornos aislados por proyecto; al activarlos aparecen las herramientas y al salir desaparecen, manteniendo el sistema limpio - Incluye compartición con FloxHub, creación de imágenes OCI, ejecución de servicios, SBOM, parches de CVE y SCA, e incluso entornos de ejecución deterministas para agentes de coding con IA, con foco en la gestión del ciclo de vida de entornos a nivel organizacional
El problema que Flox busca resolver
- Flox es una plataforma que define el entorno de desarrollo en un solo archivo y hace posible ejecutar el mismo entorno en la laptop del desarrollador, en CI y en producción
- Mientras que los gestores de paquetes tradicionales se enfocan en instalar paquetes en una sola máquina, Flox administra el ciclo de vida de paquetes y entornos de toda la organización
- Tiene tres propiedades clave
- Declarativo: describe en un solo archivo las herramientas, variables de entorno y servicios que necesita un proyecto
- Reproducible: la misma definición crea el mismo entorno en cualquier sistema compatible
- Componible: permite superponer entornos por proyecto, equipo o pipeline
Usuarios objetivo y entornos de uso
- Los equipos de Platform y DevX pueden estandarizar toolchains en toda la organización y extender entornos base sin obligar a aprender Nix
- Los equipos de Security y AppSec pueden trabajar con SBOM, respuesta rápida ante CVE, procedencia de dependencias y builds reproducibles
- Los desarrolladores pueden usar entornos reproducibles por proyecto en macOS, Linux y Windows WSL2, con un funcionamiento más cercano a un entorno virtual que a un contenedor o una VM
- Los agentes de coding con IA obtienen un entorno determinista donde pueden compilar y ejecutar código generado siempre de la misma forma
- Ejemplos objetivo: Claude Code, Cursor, Copilot y Codex
Reproducibilidad y seguridad de la cadena de suministro
- Los entornos de Flox se definen con un manifiesto declarativo y quedan fijados a inputs con hashes de contenido establecidos criptográficamente
- El mismo lockfile se resuelve al mismo conjunto de paquetes en cada sistema compatible, por lo que el entorno se mantiene idéntico entre máquinas
- Una sola definición de entorno puede usarse en la laptop del desarrollador, en sandboxes de agentes de IA, en CI y en producción
- Se pueden usar más de 120,000 paquetes de Nixpkgs
- También permite compilar software propio desde el código fuente para convertirlo en paquetes reproducibles y publicarlo para uso de todo el equipo
- A partir de esa reproducibilidad, facilita la generación de SBOM, el análisis de composición de software (SCA), el parcheo automático de vulnerabilidades y CVE, la verificación de procedencia de dependencias y los builds auditables
Instalación y flujo de trabajo básico
- El CLI de Flox se instala de forma nativa en macOS, Linux y Windows WSL2
- El flujo básico consiste en crear un entorno dentro del proyecto, instalar los paquetes necesarios y luego activar el entorno
flox init: crea un entorno en el proyectoflox install python3 nodejs: instala paquetes en el entornoflox activate: entra al entorno
- El ejemplo del README muestra que dentro del entorno activado
python3 --versionfunciona comoPython 3.13.13ynode --versioncomov24.15.0 - Al salir del entorno, las herramientas instaladas desaparecen, lo que evita conflictos entre proyectos y mantiene limpio el sistema
Funciones principales
- Create: con
flox initse puede crear un entorno declarativo junto al código y activarlo automáticamente - Search: con
flox searchse pueden encontrar más de 120,000 paquetes de Nixpkgs - Share: con
flox push/flox pull, los integrantes del equipo pueden obtener exactamente el mismo entorno de referencia único alojado en FloxHub - Containerize: con
flox containerizese puede convertir un entorno Flox en una imagen OCI sin Dockerfile - Build & publish: con
flox build/flox publishse puede compilar software propio como paquetes reproducibles y publicarlo para el equipo - Services: con
flox services startse pueden ejecutar bases de datos, colas y procesos en segundo plano como parte del entorno; se inician al activar y se detienen al salir - Configure: en
manifest.tomlse definen de forma declarativa variables de entorno, hooks de shell y scripts de activación - AI-ready: mediante flox-agentic, permite que agentes de coding con IA compilen y ejecuten con las mismas dependencias en cada ejecución
Posicionamiento frente a Docker y para usuarios de Nix
- Flox no es una tecnología de contenedores ni un reemplazo de Docker
- En Docker suele mezclarse el empaquetado con el aislamiento del contenedor, pero Flox parte de la idea de que el empaquetado de software debe separarse del mecanismo de aislamiento elegido
- Los entornos de Flox funcionan de la misma forma en bare metal, VM y contenedores
flox containerizecrea imágenes OCI que incluyen el entorno de software y pueden usarse junto con Docker, Kubernetes y otros runtimes de contenedores- Para usuarios de Nix, Flox no es un sustituto sino una herramienta adicional
- Ofrece FloxHub, un servicio central para entornos colaborativos y compartición de paquetes
- Reúne hooks de activación, servicios y perfiles de shell en un solo archivo TOML declarativo
Origen y recursos de soporte
- Flox surgió a partir de un despliegue empresarial de Nix a gran escala en D.E. Shaw group, donde se usó para hacer Nix más accesible en grandes organizaciones de ingeniería
- Recursos relacionados
- Documentation: tutoriales, referencia y guías
- FloxHub: exploración y compartición de entornos
- Discourse: preguntas, debate y anuncios
- Blog: artículos en profundidad y flujos de trabajo
- VS Code extension: gestión de entornos Flox desde el editor
- Las consultas de seguridad se reciben en
security@flox.dev - La licencia del CLI de Flox es GPLv2
1 comentarios
Comentarios en Hacker News
Ron, felicitaciones por el lanzamiento. Lo que me da curiosidad es cuál sería el modelo de ingresos
Hay un CEO, una empresa y empleados, y en Crunchbase parece que recibieron 24 millones de dólares en inversión, pero no encuentro información de precios en la landing page ni en la documentación
Incluso si inicio sesión en FloxHub con mi perfil de GitHub, no veo ninguna opción de pago, así que me intriga cuál es el plan
El cliente de código abierto que lanzamos hoy y el servicio FloxHub para compartir entornos se ofrecerán gratis para siempre
Más adelante queremos ofrecer un catálogo de software privado más potente, montado sobre el Flox Catalog básico
Si necesitas distribuir tus propios artefactos o versiones modificadas de paquetes de código abierto dentro de Flox, planeamos facilitar la creación de tu propio catálogo para complementar el Flox Catalog, que siempre será gratuito
A largo plazo, queremos vender soluciones empresariales por suscripción y como servicio para ayudar a las empresas a gestionar mejor cadenas de suministro de software amplias y fragmentadas, y nos parece razonable que las empresas compartan el costo de desarrollar herramientas a su medida
Siempre me hace ruido cuando veo en el README frases como “Nix facilita las cosas para los nuevos usuarios” o expresiones parecidas
Me considero bastante competente, pero nunca he usado Nix y pensado “esto fue fácil”
Los conceptos de Nix me encantan, pero la experiencia de usuario es terrible. Puede que esta herramienta resuelva eso, pero para llegar a ese punto hay tan poca documentación y tantas formas ya descartadas por las que uno termina deambulando, ajustando configuración sin parar, que resulta muy frustrante
De todos modos, cada vez que veo algo relacionado con Nix pienso “ojalá llegue el día en que esto se vuelva fácil”
.nixni a flakesLos conceptos básicos se me seguían yendo de la cabeza, así que cada vez que quería configurar algo nuevo tenía que volver a buscarlos y al final me cansé
También es difícil depurar problemas, y para saber qué salió mal hay que rebuscar entre comandos muy específicos y un sistema de archivos infernal
La idea me gusta, pero en la práctica siento que estorba demasiado
Tengo experiencia con Haskell, así que se me hace más familiar, pero la sintaxis en sí tampoco es intuitiva para usuarios nuevos
Se parece a aprender Rust, así que hasta tiene su lado divertido
El problema central de los productos del tipo “te damos el poder de Nix sin curva de aprendizaje” es que por debajo siguen estando Nix y
/nix/store, y Nix intencionalmente no limpia eso de forma automáticaSi un usuario prueba una herramienta que oculta Nix, al final igual se le va a llenar el disco, y como no sabe cómo liberar espacio, cuesta llamarlo algo amigable para el usuario
Es diferente cuando el usuario sabe que está instalando Nix y pasa por el proceso de aprendizaje, porque así puede formarse un modelo mental de qué es
/nix/storey cómo debe gestionarloMe da curiosidad cómo planean manejar esta complejidad subyacente
Los entornos de Flox no son simples enlaces simbólicos, sino un formato declarativo que internamente tiene flakes, así que se pueden eliminar y volver a reproducir después si hace falta
Por eso la recolección de basura es menos destructiva que al usar
nix-env/nix profile, y se pueden limpiar generaciones viejas de forma más agresivaLa estrategia es garantizar siempre una forma declarativa y reproducible de recuperar lo que se limpió, y luego evitar que el disco se llene usando heurísticas como espacio libre, antigüedad, falta de uso reciente y baja frecuencia de uso
En cambio, con Nix nunca he tenido este problema. Explica con claridad cómo limpiar basura, y también es fácil investigar qué sigue ahí y por qué sigue ahí
La razón por la que no está activado por defecto es que, como cualquier otro recolector de basura, puede volverse una molestia, y no existe una política que le sirva a todo el mundo
Al final, si hay demasiados GC roots, hay que tomar decisiones
Cada vez que usas una computadora están ocurriendo por detrás miles de cosas ridículamente complejas, así que no entiendo por qué abstraer Nix se trata como algo especial
Felicitaciones por el lanzamiento. Me gusta mucho Nix, pero también reconozco que la experiencia de onboarding es, siendo generosos, mala, y en el peor de los casos terrible.
Por eso, cualquier intento de hacerlo más accesible es bienvenido. Una CLI imperativa me parece una buena dirección porque se acerca mucho más a la forma que mucha gente espera y con la que se siente cómoda.
También coincido totalmente en simplificar el proceso de usar entornos de otros lugares.
Pero algo importante que parece faltar es la integración con IDE. Iniciar el IDE desde la línea de comandos dentro del entorno no resulta intuitivo para muchos colegas, y de hecho lo he diagnosticado varias veces como la causa raíz de problemas reales.
Me pregunto qué pasará con la posibilidad de bajar al “Nix real” cuando haga falta. Por ejemplo, me preocupa si en entornos un poco más complejos, como configurar toolchains de compilación cruzada para Rust, uno se va a caer por un precipicio.
Como ejemplo de desarrollo en Rust, tuve que poner un
shellHooklargo en un flake para que Rust-Analyzer funcionara correctamente, y me pregunto cómo se podría hacer ese tipo de configuración en Flox.También me pregunto si la idea es abstraer ese tipo de cosas o, si no, cómo las va a descubrir un usuario que no conoce Nix.
No quiero decir que sea absolutamente imposible; de verdad espero que funcione muy bien, pero todavía no veo claramente cómo.
La idea actual es permitir referencias a flakes en ciertos campos o tener puntos de entrada al estilo de Nix.
Aún no es algo público ni está documentado, así que agradeceríamos un poco de paciencia.
Coincido por completo en que hay una línea realmente sutil entre ocultar la complejidad y exponer la capacidad.
Me pregunto cuál es la ventaja de usar Flox en lugar de un
nix-shellnormal onix develop.La idea es que puedas tener éxito sin aprender el lenguaje de expresiones de Nix ni entender su estructura interna.
También agregamos cierta dirección y pulido. Por ejemplo, hay una interfaz híbrida imperativa/declarativa, así que si ejecutas
flox install && flox list, los cambios se reflejan en TOML. En cambio, connix developtienes que editar expresiones de Nix.nix developte mete en un shell de bash, peroflox activatepuede entrar a shells bash o zsh, y planeamos agregar soporte para fish.Administrar entornos con Git está soportado, igual que en las herramientas de Nix, pero además agregamos formas de compartir entornos que esas herramientas no ofrecen, como
flox push/flox pull/flox activate -r.Si creas una cuenta, puedes ver los paquetes de mi entorno en https://hub.flox.dev/mkenigs/default, y si tienes la CLI, puedes revisarlos con
flox list -r mkenigs/defaulty luego usarlos conflox activate -r mkenigs/default.Me parece mucho más digerible para alguien que no conoce el lenguaje de expresiones de Nix que pasarle un enlace a un
flake.nix.Es totalmente posible que herramientas como Flox o devenv lleguen al fin de su vida útil, no logren seguir bien el ritmo de nixpkgs, o sufran alguna de las muchas formas en que el software se deteriora.
En cambio,
nix developseguirá existiendo mientras Nix Flakes siga existiendo, y además habrá incentivos para ofrecer una ruta de migración hacia lo que venga después.Más importante aún: toda abstracción tiene fugas. Aunque la CLI de Flox pueda verse más limpia, al final vas a tener que aprender Nix para usarlo de forma realmente efectiva.
No veo por qué aprender el doble de lo que realmente necesitas.
Me pregunto cómo se compara con el proyecto Devbox existente (https://www.jetpack.io/devbox).
También quiero saber si Flox tiene una solución en la nube opcional, si permite instalar versiones específicas de paquetes de Nix y cómo maneja las dependencias según el sistema operativo.
Llevo 5 años usando herramientas de este tipo, así que me interesa qué aporta Flox que no exista ya.
De verdad no entiendo por qué debería usar esto en lugar de Nix normal; ¿alguien me lo puede explicar?
Esto me parece 100 veces más simple.
Pero Nix se construyó desde los primeros principios para ser muy general, así que su curva de aprendizaje es bastante pronunciada.
Flox es una herramienta que intenta simplificar eso reduciendo el alcance del problema y ofreciendo abstracciones e interfaces especializadas, para que puedas aprovechar las capacidades de Nix sin tener que volverte experto en Nix desde el primer día.
Me interesan muchísimo los entornos de desarrollo reproducibles, y en el trabajo llevo años usando contenedores de desarrollo con buenos resultados.
Escuché sobre Nix por primera vez hace como un año y al principio me entusiasmó mucho la promesa, pero el proceso de onboarding fue terrible para mí.
Tengo claro qué entorno de desarrollo quiero crear, pero siempre siento que me estoy perdiendo algo en el enfoque.
Me alegra ver herramientas nuevas que intentan mejorar toda la experiencia, y ojalá, si sigo probando, en algún momento me haga clic.
Me da curiosidad saber en qué momento Nix te “hizo clic” a ti.
¿Has visto por casualidad el video de Microservices? https://www.youtube.com/watch?v=y8OnoxKotPQ
En ese momento yo dirigía el equipo de productos para desarrolladores en Facebook, y comenzamos un proyecto para inyectar capacidades remotas en el desarrollo local.
Miles de desarrolladores estaban esperando 45 minutos por compilaciones en frío.
Una de las primeras etapas fue dibujar todo el ciclo de vida del desarrollo de software para identificar qué partes del toolchain tendríamos que reconstruir.
Como se ve en el pizarrón hacia el final del video, en el momento en que visualizamos lo complejas que habían llegado a ser las cosas, entré en ese estado mental de “no puede ser que así sea como trabajamos”.
La última vez que usé Nix, había mucha confusión alrededor de flakes
Algunos tutoriales decían que había que usarlas y otros que todavía estaban en desarrollo, así que me pregunto si la situación ha mejorado
Creo que el problema con flakes viene de dos cosas
Una es que han llevado la etiqueta experimental por casi 5 años, así que eso confunde a los usuarios nuevos, aunque en la práctica se usan de forma bastante generalizada casi en todas partes
La otra es que parece haber mala relación entre https://determinate.systems/ y usuarios/desarrolladores veteranos de Nix. Al parecer critican a Determinate Systems por usar Nix para su propio beneficio sin retribuir con contribuciones
Según entiendo, Determinate Systems introdujo flakes, y por eso parece que parte de la comunidad se resiste
En conclusión, casi todo el mundo adoptó flakes, y las guías que no las usan probablemente sean antiguas
Enlace relacionado: https://discourse.nixos.org/t/introducing-flakehub/32044
La etiqueta “experimental” se refiere más a la estabilidad de la API que a su nivel de terminación o a bugs
En ciertas situaciones puede haber problemas de rendimiento, pero hay formas de rodearlos y también se está trabajando en una solución permanente
Aun así, uso flakes bastante tanto en casa como en el trabajo
Anoche probé Flox en macOS y vi que instaló Nix en el perfil por defecto, separado del Nix que Nix-Darwin administra en
/run/current-system/sw/bin, y que hizo un enlace simbólico de esa copia en/usr/local/binTampoco encontré orientación para usuarios de Nix ya existentes, es decir, usuarios de NixOS o usuarios de otras distribuciones donde ya está instalado Nix pero no existe el formato de paquete de la distro que Flox soporta
Me pregunto si eso se debe a que Flox, como administrador de perfiles de terceros para Nix, depende de cosas como el inestable formato Nix profile manifest, o si en realidad puede usarse con varias versiones de Nix pero simplemente no lo han probado
También quisiera saber si consideran dar soporte más adelante a una instalación de Flox basada en Nix
Además, dijeron que el soporte para fish viene en camino, pero ¿podrían decirme en qué parte del código fuente o la configuración de Flox está realmente la integración con el shell del subcomando
activate?Mientras espero el soporte oficial para fish, intenté improvisar algo temporal con fenv, pero incluso revisando la instalación y el código fuente no me quedó claro dónde conectarlo
Por ahora, creo que la mejor forma de usar fish es
FLOX_SHELL=zsh flox activate -- fish. No soporta alias, pero la mayor parte debería funcionarTambién me pregunto si realmente quieres hackear el código fuente o si solo estás tratando de entender la estructura para armar una solución alternativa
En shells que no son bash ni zsh, falla por aquí: https://github.com/flox/flox/blob/9e18a3ceaa185006bae95a4827...
Si quieres intentar arreglarlo tú mismo, con gusto te doy más contexto de fondo