Nx: la plataforma completa y el coste de su poder
Nx no es un cachador de scripts: es un build system completo que modela tu repositorio como un grafo, infiere targets desde la configuracion, trae generadores y executors, impone fronteras de modulo y distribuye tareas en Nx Cloud. Ese poder es real y a escala compensa, pero no es gratis: se paga en curva de aprendizaje, en convenciones adoptadas, en migraciones dirigidas por la herramienta y en la opacidad de la inferencia. Elegir Nx es aceptar una plataforma, no solo una cache.
Donde Turborepo elige hacer poco, Nx elige hacerlo casi todo. No se presenta como una capa de caché sobre tus scripts, sino como una plataforma que quiere modelar tu repositorio entero: infiere un grafo de proyecto detallado, genera código con andamiaje estandarizado, abstrae tus comandos tras executors, hace cumplir fronteras de módulo y, en Nx Cloud, reparte las tareas de un pipeline entre varias máquinas efímeras. Ese poder no es marketing: a escala de organización resuelve problemas que Turborepo ni intenta abordar. Pero todo poder tiene un coste, y con Nx el coste es tan real como las prestaciones. Elegirlo bien exige contabilizar ambas columnas.
- Entender por qué Nx es un build system completo y no un mero runner con caché.
- Recorrer sus cuatro pilares: grafo inferido, generadores, executors y Nx Cloud.
- Contabilizar el coste de esa potencia en aprendizaje, convenciones y acoplamiento.
- Discernir a qué escala y en qué tipo de repositorio ese intercambio compensa.
Nx modela el repositorio entero
La unidad de razonamiento de Nx no es el script suelto sino el grafo de proyecto: un modelo de qué proyectos existen, cómo dependen unos de otros y qué tareas puede ejecutar cada uno. Sobre ese grafo se sostienen todas sus capacidades —el affected, el orden topológico, la caché, la paralelización, la distribución—, que dejan de ser funciones sueltas para volverse teoremas de un mismo axioma. Nx no orquesta comandos: razona sobre una representación del repo.
flowchart TD graph[project graph inferido] --> affected[nx affected] graph --> cache[cache por hash de entradas] graph --> gen[generadores y executors] graph --> cloud[nx cloud reparto entre agentes] style graph fill:#cba6f7,color:#11111b style cloud fill:#89b4fa,color:#11111b
La diferencia con un runner minimalista es de ambición. Turborepo lee tu workspace y cachea lo que hay; Nx quiere ser el sustrato desde el que se crea, se construye, se verifica y se publica cada proyecto. Por eso trae opiniones sobre cómo debería estructurarse un paquete, cómo debería invocarse una herramienta y cómo debería propagarse un cambio. Adoptar Nx no es enchufar una caché: es adoptar una forma de trabajar.
Nx no compila tu TypeScript ni empaqueta tu app: eso lo siguen haciendo tsc, Vite o Vitest. Lo que aporta es la capa por encima —qué ejecutar, cuándo, en qué orden, qué reutilizar— para que esas herramientas se invoquen el mínimo número de veces. Es un orquestador guiado por un grafo, igual que Turborepo, pero con una superficie mucho mayor de servicios construidos sobre ese grafo.
El poder: grafo inferido, generadores, executors y nube
El Nx de 2026 infiere buena parte del grafo sin que escribas listas a mano. Sus plugins leen archivos de configuración —un vite.config.ts, un jest.config.ts— y de ahí derivan nodos, aristas y targets. Esta inferencia, la evolución que la comunidad conoció como Nx Crystal, reduce la configuración explícita al mínimo: muchos proyectos no necesitan un project.json porque Nx deduce sus tareas del contexto.
Grafo inferido
Plugins que leen tu configuración y aportan targets automáticamente, más el análisis de imports. El grafo se mantiene solo en vez de escribirse a mano.
Generadores
nx generate andamia paquetes, componentes y configuraciones de forma consistente. Estandariza cómo nace cada pieza del repo, no solo cómo se construye.
Executors
Una abstracción sobre el comando: en vez de un script crudo, un executor parametrizable y reutilizable entre proyectos, con opciones tipadas.
Nx Cloud
Caché remota más ejecución distribuida: reparte las tareas afectadas entre agentes efímeros y las recompone. El multiplicador a escala de CI.
El diferenciador más fuerte frente a Turborepo es la ejecución distribuida de tareas. La caché remota evita repetir trabajo ya hecho; la distribución va más allá y trocea el trabajo nuevo entre varias máquinas, respetando el grafo, de modo que un pipeline que en serie tardaría una hora se resuelve en minutos sobre un enjambre de agentes. A esto se suman las fronteras de módulo —reglas que prohíben, vía lint, que un proyecto importe a otro que no debería— y Nx Release, que versiona y publica sin depender de una herramienta externa. Es, en conjunto, una plataforma.
nx graph # explora el grafo de proyecto navegable
nx g @nx/react:lib ui # genera una libreria estandarizada
nx affected -t build # construye solo lo tocado por el cambio
nx release # versiona y publica desde el propio Nx
El coste de ese poder
Ninguna de esas capacidades es gratuita, y madurar con Nx es saber contabilizar la factura tan bien como las prestaciones. El coste no aparece en la demo; aparece a los seis meses, cuando el equipo convive con la plataforma.
El primero es la curva de aprendizaje. Executors, generadores, plugins, targets inferidos, nx.json, migraciones: es un vocabulario propio que todo el equipo debe interiorizar para depurar cuando algo falla. Un script en package.json lo entiende cualquiera; un executor con opciones tipadas y un plugin de inferencia exigen saber Nx.
El segundo es el acoplamiento a la plataforma. Nx gestiona la evolución de tu configuración con nx migrate, un mecanismo potente que actualiza a la vez Nx y las herramientas que envuelve aplicando codemods. Es cómodo, pero significa que Nx participa en la versión de tu toolchain y en la forma de tu configuración; salir de esa órbita es más caro que borrar un archivo.
El mismo mecanismo que te ahorra escribir targets a mano puede volverse difícil de depurar: cuando un target aparece sin que tú lo declaraste, entender de dónde salió obliga a razonar sobre qué plugin lo infirió y con qué opciones. La magia que reduce la configuración es la misma que oculta el origen de un comportamiento. Por eso nx show project mi-app --json deja de ser un lujo y pasa a ser la herramienta con la que confirmas qué ve Nx realmente, en vez de suponerlo.
El tercero es la gravedad de las convenciones. Los generadores estandarizan a cambio de que aceptes su forma de estructurar; los executors abstraen a cambio de que tus comandos vivan detrás de su interfaz. Nada de esto es negativo a escala —la consistencia es justo lo que una organización grande necesita—, pero en un repo pequeño es complejidad que no se amortiza. Meter Nx en cuatro paquetes es pagar una plataforma para un problema que no la pide.
| Prestación de Nx | Coste que la acompaña |
|---|---|
| grafo inferido por plugins | inferencia opaca, difícil de depurar sin nx show |
| generadores y executors | convenciones que hay que adoptar y aprender |
nx migrate con codemods |
Nx participa en la versión de tu toolchain |
| ejecución distribuida en la nube | dependencia de Nx Cloud, gestionada o autohospedada |
La pregunta correcta ante Nx no es si sus funciones son impresionantes —lo son— sino si el problema que resuelven ya lo estás sintiendo. La ejecución distribuida solo compensa cuando el CI en serie duele de verdad; las fronteras de módulo solo valen cuando hay bastantes proyectos como para que se violen; los generadores solo ahorran cuando creas paquetes con frecuencia. En un monorepo poliglota de una organización grande, ese umbral se cruza y Nx paga con creces. En un repo mediano de un equipo pequeño, casi nunca.
El error de framing más caro al evaluar Nx es tratarlo como un Turborepo con más botones, y decidir por la longitud de la lista de funciones. Nx y Turborepo no son dos puntos en la misma escala de potencia: son dos filosofías distintas sobre qué debe ser una herramienta de monorepo. Turborepo cree que la herramienta debe hacer una cosa —memoizar el grafo de tareas— y no tocar nada más de tu forma de trabajar. Nx cree que la herramienta debe ser la plataforma desde la que se crea, construye, verifica, versiona y despliega todo, porque a suficiente escala esa integración vertical ahorra más de lo que cuesta. Ninguna de las dos tesis es universalmente correcta; cada una lo es dentro de su régimen. La tesis de Nx se vuelve verdadera cuando el repositorio es grande, poliglota, mantenido por muchos equipos, y cuando la falta de estándares —cada paquete estructurado a su manera, cada comando invocado distinto, cada frontera de arquitectura sin vigilar— ya está costando tiempo y errores reales. En ese régimen, los generadores imponen la consistencia que nadie mantiene a mano, los executors dan una interfaz uniforme sobre herramientas heterogéneas, las fronteras de módulo convierten reglas de convivencia en reglas verificables, y la ejecución distribuida convierte una hora de CI en minutos. Fuera de ese régimen —el repo pequeño, el equipo de tres, los cuatro paquetes de puro TypeScript— cada una de esas prestaciones es una respuesta a una pregunta que aún no te has hecho, y su coste se paga entero sin cobrar el beneficio. La destreza al elegir Nx no está en admirar su poder, sino en juzgar con honestidad si tu repositorio ya vive en el régimen donde ese poder se amortiza. Adoptar la plataforma antes de necesitarla es el modo más común y más silencioso de convertir una gran herramienta en una carga.
- Ejecuta
nx graphen un repo de ejemplo y juzga si el grafo de proyecto te dice algo que hoy no supieras: si no, esa prestación aún no te paga. - Genera una librería con
nx g @nx/js:lib demoy observa cuánta estructura impone; decide si esa consistencia es un alivio o una camisa de fuerza para tu equipo. - Estima cuántos minutos dura hoy tu CI en serie y contra qué umbral la ejecución distribuida empezaría a compensar de verdad.
- Cuenta cuántos proyectos tiene tu repo: por debajo de una decena, argumenta a favor y en contra de que Nx sea complejidad prematura.
- Escribe la factura completa —prestación por prestación, coste por coste— y decide si tu repositorio ya vive en el régimen donde Nx se amortiza.