Alternativas autoalojadas a n8n comparadas
Compara Activepieces, Windmill, Node-RED, Automatisch y Huginn con n8n en licencia, RAM, base de datos, pasos de IA y copias de seguridad.
Qué usar en lugar de n8n
Las alternativas autoalojadas a n8n que merecen la pena en un VPS (servidor privado virtual) son Activepieces, Windmill, Node-RED, Automatisch y Huginn. Activepieces es el sustituto más cercano a la forma en que la mayoría de usuarios utiliza n8n, y su núcleo se distribuye con licencia MIT. Windmill es adecuado para equipos que prefieren escribir en Python o TypeScript en lugar de arrastrar bloques por un lienzo. Node-RED es la opción más pequeña y no necesita ninguna base de datos.
Muchos lectores deberían seguir usando n8n. La licencia de n8n permite el uso empresarial interno, así que si ejecuta flujos para su propia empresa, la licencia no es un problema. La migración tampoco es gratuita. Ninguna de estas opciones puede leer una exportación de n8n, por lo que debe reconstruir cada flujo manualmente y volver a introducir todas las credenciales. La instalación de n8n es una tarea independiente, explicada en la instalación de n8n en un VPS con Docker y HTTPS, y n8n frente a Zapier y Make explica cómo se compara toda esta categoría con los servicios alojados.
Por qué se buscan alternativas autoalojadas a n8n
Hay dos motivos que se repiten constantemente.
El primero es la licencia. n8n se distribuye con Sustainable Use License v1.0, que el proyecto denomina fair-code en lugar de código abierto. La licencia concede el derecho a «usar o modificar el software únicamente para sus propios fines empresariales internos o para usos no comerciales o personales», y prohíbe proporcionar el software comercialmente a otras personas. Los archivos y directorios cuyo nombre contiene .ee están sujetos a una n8n Enterprise License independiente. Si quiere ejecutar automatizaciones para clientes de pago, esto es un impedimento definitivo. Si forma parte de un equipo interno de operaciones, no cambia nada en su trabajo diario.
El segundo es la memoria. n8n es un proceso de Node.js y los datos del flujo de trabajo permanecen en memoria mientras se ejecuta. La documentación de n8n indica las causas: la cantidad de datos JSON, el tamaño de los datos binarios, el número de nodos del flujo de trabajo, el nodo Code, las ejecuciones manuales (que vuelven a copiar los datos para el editor) y otros flujos de trabajo que se ejecutan al mismo tiempo. La solución documentada no es cambiar de producto. Consiste en usar el modo de cola con procesos worker independientes y Postgres en lugar del archivo SQLite predeterminado en ~/.n8n/database.sqlite. Los trabajos grandes también requieren procesamiento por lotes, porque un nodo Loop Over Items que alimenta un subflujo mantiene en memoria una sola parte de los datos cada vez. Pruebe esto antes de reconstruir sesenta flujos en otro sistema.
Qué alternativas autoalojadas a n8n siguen mantenidas
El texto de la licencia es fácil de leer, por lo que todo el mundo compara licencias. Es fácil pasar por alto la salud del proyecto. Estos son los 6 proyectos incluidos en esta comparación, con la versión etiquetada más reciente que tenía cada uno el 4 de agosto de 2026.
The data behind this chart
[
{
"tool": "n8n",
"licence": "Sustainable Use License",
"latest_release": "2.33.3",
"released": "2026-07-31",
"days_since_release": 4
},
{
"tool": "Activepieces",
"licence": "MIT core, commercial ee",
"latest_release": "0.86.3",
"released": "2026-07-17",
"days_since_release": 18
},
{
"tool": "Windmill",
"licence": "AGPLv3 source, CE image",
"latest_release": "v1.778.0",
"released": "2026-08-04",
"days_since_release": 0
},
{
"tool": "Node-RED",
"licence": "Apache 2.0",
"latest_release": "5.0.4",
"released": "2026-07-30",
"days_since_release": 5
},
{
"tool": "Automatisch",
"licence": "AGPL-3.0, commercial ee",
"latest_release": "v0.15.0",
"released": "2025-08-08",
"days_since_release": 361
},
{
"tool": "Huginn",
"licence": "MIT",
"latest_release": "v2022.08.18",
"released": "2022-08-18",
"days_since_release": 1447
}
]Dos filas cambian la lista de candidatos. Automatisch etiquetó por última vez v0.15.0, hace 361 días, y su rama predeterminada no ha recibido ningún commit desde el 15 de enero de 2026. Huginn etiquetó una versión hace 1447 días, pero su registro de commits está activo este mes. Es el patrón opuesto: el código cambia, pero las versiones no, por lo que ejecutarlo implica usar una imagen sin etiqueta.
Compruébelo usted mismo antes de confiar en cualquier comparación, incluida esta. Abra la página de releases del proyecto en GitHub y, después, la lista de commits de su rama predeterminada. Un proyecto con una versión reciente y un registro de commits inactivo funciona por inercia. Un proyecto con commits recientes y sin ninguna versión desde hace años le pide que ejecute código para el que nadie ha publicado una versión.
Activepieces: la opción más cercana, con licencia MIT en el núcleo
Activepieces es la opción equivalente. Es un constructor visual con activadores y pasos, que denomina piezas, y el README afirma que hay más de 280. Cada pieza también se expone como un servidor MCP (protocolo de contexto de modelos), por lo que un cliente LLM (modelo de lenguaje de gran tamaño) puede invocar los mismos conectores como herramientas. El núcleo tiene licencia MIT. Los directorios packages/ee/ y packages/server/api/src/app/ee tienen una licencia comercial, y para usar su contenido en su propio servidor se necesita un acuerdo de pago.
Lea esta separación antes de migrar, porque es más amplia que en la mayoría de los proyectos con licencia MIT. La página de precios de Activepieces describe Community Edition como «código abierto, gratis para siempre y sin límite de ejecuciones, usuarios o flujos», y deja fuera Agents and Chat, Projects, el acceso a la API y toda la capa de administración (inicio de sesión único, roles de usuario, registros de auditoría, gestores de secretos, personalización de marca y sincronización con Git). Por tanto, Community Edition es un motor de automatización completo con flujos y usuarios ilimitados, pero no es una plataforma que se pueda controlar mediante una API. Si su plan era generar flujos mediante programación, necesita una licencia.
La arquitectura de ejecución consta de un contenedor de la aplicación, uno o más contenedores de workers, Postgres y Redis. AP_DB_TYPE=POSTGRES y AP_REDIS_TYPE=STANDALONE son los valores predeterminados. Existe un modo de un solo contenedor con una base de datos integrada y una cola en el proceso (AP_DB_TYPE=PGLITE con AP_REDIS_TYPE=MEMORY), pero la documentación indica que «sólo está destinado a uso personal o pruebas». Tómelo literalmente. Esos modos no pueden ejecutar más de una instancia, por lo que salir de ellos requiere una migración, no un indicador.
Windmill: código primero y más pesado de lo que parece
Windmill ejecuta scripts en Python, TypeScript, Go, Bash y SQL, y después los combina en flujos. Si sus automatizaciones son principalmente código con una pequeña cantidad de lógica de integración, encaja mejor que cualquier lienzo de nodos.
La licencia requiere atención. El código fuente está bajo AGPLv3 cuando se compila sin el indicador de funcionalidades empresariales. Las imágenes publicadas en ghcr.io/windmill-labs/windmill son Community Edition. Incluyen código que no es de código abierto y se pueden usar gratis dentro de las cuotas. La página de precios de Windmill establece esas cuotas en 50 usuarios, 3 espacios de trabajo y 10 GiB de almacenamiento de objetos del espacio de trabajo, con ejecuciones ilimitadas. Para una persona o un equipo pequeño, ese límite queda lejos. Por tanto, la cuestión práctica no es la cuota. Es que el binario que ejecuta no es la compilación AGPL.
El peso es la otra consideración. El docker-compose.yml propio de Windmill incluye una base de datos Postgres 16, un servidor, tres workers predeterminados con un límite de memoria de 2048M cada uno, un worker nativo y un proxy Caddy. La regla general documentada es "1 worker por 1vCPU y 1-2 GB de RAM". Puede reducir el número de réplicas en un equipo pequeño. Debe saber que está reduciéndolo, porque los workers son los que ejecutan realmente sus trabajos.
Las funciones de IA de Windmill están documentadas como ayuda durante la compilación: generación de código, creación de flujos, chat y cumplimentación de formularios. Primero debe añadir un recurso de proveedor de modelos en la configuración del espacio de trabajo. Si lo que necesita es un paso de agente que se ejecute según un horario y llame a herramientas, el nodo AI Agent de n8n sigue siendo la opción más directa, y crear un agente de IA en n8n explica ese enfoque.
Node-RED: el más pequeño, sin ninguna base de datos
Node-RED utiliza la licencia Apache 2.0, la licencia más permisiva de esta comparación. Consta de un proceso de Node.js y un volumen /data. No usa Postgres. No usa Redis. Fíjelo en nodered/node-red:5.0.4, que es la versión actual.
Surgió del cableado de IoT (internet de las cosas), por lo que su diseño se basa en eventos y no en conectores. Los nodos para servicios de terceros proceden de la biblioteca de la comunidad y su calidad varía. Ese es el coste de tener una instalación pequeña. No incluye un paso específico para agentes de IA. Para un VPS pequeño que gestione webhooks y tráfico de colas de mensajes, es la opción más ligera de esta lista que funciona y se inicia en segundos.
Huginn y Automatisch: revise primero el registro de commits
Huginn usa la licencia MIT, está escrito en Ruby on Rails y necesita MySQL o PostgreSQL. Su modelo se basa en agentes que supervisan una fuente y emiten eventos. Es un modelo distinto al de un lienzo de flujos y no tiene una estrategia relacionada con LLM. El código sigue recibiendo commits, pero la última versión etiquetada es de agosto de 2022. Por tanto, ejecutarlo implica usar la imagen ghcr.io/huginn/huginn compilada desde la rama predeterminada. Elíjalo cuando el modelo de agentes se ajuste a su problema. No lo use como reemplazo general de n8n.
Automatisch usa la licencia AGPL-3.0, excepto en sus archivos .ee, y parece un n8n más sencillo: Postgres, Redis y un catálogo pequeño de aplicaciones. Es la herramienta que siguen recomendando los tutoriales de despliegue único. El historial de versiones indica que conviene esperar. Un año sin una versión y medio año sin un commit no es motivo para alarmarse si ya lo ejecuta. Sí es motivo para no iniciar un nuevo despliegue de producción con él.
El coste real de Activepieces en RAM
La memoria medida en reposo y durante la ejecución no es una cifra que otra persona pueda publicar por usted, porque depende de sus propios flujos y de la cantidad de datos que transporten. Lo que sí puede consultar es la cantidad de recursos que cada proveedor recomienda reservar. Activepieces documenta la configuración siguiente, y la frase que la acompaña es más importante que las cifras: "Un worker con concurrencia 1 está ocupado durante toda la ejecución de un flujo (hasta 10 min), por lo que debe dimensionarse según los flujos simultáneos, no según la frecuencia de los triggers."
The data behind this chart
[
{
"label": "App container",
"vcpu": 1,
"ram_gb": 1
},
{
"label": "Worker (each)",
"vcpu": 0.5,
"ram_gb": 1
},
{
"label": "Postgres",
"vcpu": 2,
"ram_gb": 4
},
{
"label": "Redis",
"vcpu": 1,
"ram_gb": 1
}
]Un worker necesita 0.5 vCPU y 1 GB, y ejecuta exactamente un flujo cada vez. Postgres se dimensiona con 4 GB. El archivo compose del propio proyecto incluye cinco réplicas de worker, por lo que, según ese dimensionamiento, el stack del repositorio solicita aproximadamente 11 GB antes de que sus flujos realicen alguna tarea significativa. Los tutoriales de una sola herramienta copian ese archivo y lo presentan como una implementación pequeña.
En un VPS de 4 GB, ejecute dos workers, mantenga Postgres en el mismo proyecto compose y mida. docker stats --no-stream muestra una línea por contenedor con su memoria residente real, lo que resulta más fiable que cualquier cifra publicada por un proveedor o un blog. Si un contenedor crece sin límite, establezca un límite, y los límites de memoria en Docker Compose muestra la sintaxis.
Un archivo compose para Activepieces en un VPS
Fije la etiqueta. latest significa que el siguiente docker compose pull puede modificar el esquema de la base de datos sin avisar. La versión 0.86.3 es la que el proyecto fija en su propio archivo compose a fecha de 4 de agosto de 2026.
Genere primero los dos secretos, usando las longitudes que especifica la documentación.
openssl rand -hex 16 # AP_ENCRYPTION_KEY, encrypts stored connections
openssl rand -hex 32 # AP_JWT_SECRET, signs session tokensEscriba .env junto al archivo compose:
AP_ENGINE_EXECUTABLE_PATH=dist/packages/engine/main.js
AP_ENVIRONMENT=prod
AP_FRONTEND_URL=https://automation.example.com
AP_ENCRYPTION_KEY=REPLACE_WITH_HEX_16
AP_JWT_SECRET=REPLACE_WITH_HEX_32
AP_DB_TYPE=POSTGRES
AP_POSTGRES_DATABASE=activepieces
AP_POSTGRES_HOST=postgres
AP_POSTGRES_PORT=5432
AP_POSTGRES_USERNAME=postgres
AP_POSTGRES_PASSWORD=REPLACE_WITH_A_LONG_RANDOM_PASSWORD
AP_REDIS_TYPE=STANDALONE
AP_REDIS_HOST=redis
AP_REDIS_PORT=6379
AP_EXECUTION_MODE=UNSANDBOXED
AP_TELEMETRY_ENABLED=falseAP_FRONTEND_URL debe ser la dirección HTTPS pública, porque de lo contrario Activepieces intenta usar su dirección IP pública al generar las URL de los webhooks. Cada webhook que entregue a un tercero se genera a partir de ese valor. Si todavía apunta a localhost, la URL que pegue en otro servicio nunca llegará a su servidor.
services:
app:
image: ghcr.io/activepieces/activepieces:0.86.3
restart: unless-stopped
ports:
- '127.0.0.1:8080:80'
depends_on:
- postgres
- redis
env_file: .env
environment:
- AP_CONTAINER_TYPE=APP
volumes:
- ./cache:/usr/src/app/cache
worker:
image: ghcr.io/activepieces/activepieces:0.86.3
restart: unless-stopped
depends_on:
- app
env_file: .env
environment:
- AP_CONTAINER_TYPE=WORKER
deploy:
replicas: 2
volumes:
- ./cache:/usr/src/app/cache
postgres:
image: pgvector/pgvector:0.8.0-pg14
restart: unless-stopped
env_file: .env
environment:
- POSTGRES_DB=${AP_POSTGRES_DATABASE}
- POSTGRES_USER=${AP_POSTGRES_USERNAME}
- POSTGRES_PASSWORD=${AP_POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7.0.7
restart: unless-stopped
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:Ese archivo es el compose del propio proyecto con cuatro cambios: el número de workers baja de cinco a dos, el puerto publicado se enlaza a 127.0.0.1 en lugar de a todas las interfaces, se eliminan los nombres fijos de los contenedores porque un servicio con réplicas no puede usarlos y se elimina el bloque de red explícito porque compose crea uno automáticamente.
docker compose up -d
docker compose psTodos los servicios deben mostrar Up, incluidos dos contenedores worker. Un contenedor que se reinicia continuamente muestra el motivo en docker compose logs worker. Revíselo antes de cambiar nada. El enlace de puertos impide que se acceda a la aplicación desde el exterior hasta que coloque un proxy inverso con TLS (seguridad de la capa de transporte) delante. Ejecutar Traefik delante de varias aplicaciones compose explica cómo hacerlo. Mantenga .env con el modo 600 y fuera de git, como se explica en Gestionar secretos en archivos env de compose.
La copia de seguridad que omite cualquier guía
Todas estas herramientas cifran las credenciales almacenadas, por lo que un volcado de la base de datos por sí solo no es una copia de seguridad. Necesita el volcado y la clave que lo descifra. El problema es que la mayoría de estas herramientas generan esa clave automáticamente y la guardan en algún lugar que no incluye en sus copias de seguridad.
n8n es el caso más claro. Si nunca configura N8N_ENCRYPTION_KEY, n8n «crea automáticamente una clave de cifrado aleatoria durante el primer arranque y la guarda en la carpeta ~/.n8n». Después usa esa clave para cifrar las credenciales antes de almacenarlas en la base de datos. Vuelque Postgres, restáurelo en un contenedor nuevo con un volumen nuevo y los flujos volverán, pero todas las credenciales serán texto cifrado que nadie podrá leer. Configure la variable explícitamente y use el mismo valor en todos los workers cuando ejecute queue mode.
Node-RED sigue el mismo patrón. Las credenciales se almacenan en su propio archivo cifrado y la clave es credentialSecret en settings.js. Si no configura ninguna, el runtime genera una clave aleatoria y la guarda en _credentialSecret, dentro de su propio almacén de configuración en /data. El archivo de configuración predeterminado indica la consecuencia: «una vez establecida esta propiedad, no la cambie; si lo hace, node-red no podrá descifrar las credenciales existentes y se perderán». Haga una copia de seguridad de todo el volumen /data, no sólo del archivo de flujos.
Activepieces conserva AP_ENCRYPTION_KEY en .env, documentada como una «clave hexadecimal de 32 caracteres (16 bytes) usada para cifrar conexiones». Huginn conserva APP_SECRET_TOKEN en su entorno. Automatisch tiene tres: ENCRYPTION_KEY, WEBHOOK_SECRET_KEY y APP_SECRET_KEY. En todos los casos, el secreto está en un archivo de entorno, por lo que ese archivo forma parte de la copia de seguridad.
Windmill es la excepción que conviene conocer. Sus variables y secretos se cifran con una clave simétrica específica del workspace que Windmill almacena en su propia base de datos, por lo que un único volcado de Postgres contiene ambas partes. Esto facilita las restauraciones, pero también significa que el volcado por sí solo basta para leer todos los secretos. Proteja el archivo como si contuviera los propios secretos.
Para el stack de Activepieces anterior, la copia de seguridad consta de dos archivos:
cd /srv/activepieces
docker compose exec -T postgres pg_dump -U postgres -Fc activepieces > "ap-$(date +%F).dump"
cp .env "ap-env-$(date +%F).bak"
chmod 600 ap-*.dump ap-env-*.bakDespués, compruebe que la copia funciona, porque una copia de seguridad no probada es sólo una suposición. Restaure el volcado en un proyecto de compose de prueba que use un AP_ENCRYPTION_KEY deliberadamente distinto y ejecute un flujo que utilice una conexión guardada. Fallará porque el texto cifrado de la base de datos se generó con la otra clave. Repita la restauración con la clave real de .env y el mismo flujo se ejecutará correctamente. Esas dos ejecuciones son la única prueba de que su copia de seguridad es realmente utilizable. Envíe ambos archivos fuera del servidor según un calendario usando copias de seguridad de restic desde un VPS, porque una copia de seguridad en el mismo disco desaparece cuando falla el disco.
Cuándo seguir con n8n
Siga con n8n si el trabajo es interno de su propia empresa, porque eso es exactamente lo que permite la Sustainable Use License. Siga con n8n si depende de una amplia variedad de integraciones, ya que n8n afirma ofrecer más de 1500, o de su nodo AI Agent basado en LangChain, que no tiene equivalente en las demás opciones para crear pasos de agente listos para usar. Controlar los flujos de n8n con Claude muestra cómo funciona en la práctica.
Cambie a Activepieces si quiere una licencia permisiva para el núcleo de automatización y una pila que pueda revisar de principio a fin. Cambie a Windmill si sus flujos son realmente código con una interfaz de usuario. Cambie a Node-RED si el equipo es pequeño y el trabajo se basa en eventos. No cambie porque un benchmark indique que n8n consume muchos recursos. Mida primero su propia instancia, después lea qué merece la pena alojar por cuenta propia en 2026 y elija una sola vez, porque la segunda migración cuesta tanto como la primera.
FAQ
¿Qué alternativa autoalojada a n8n es la más parecida a n8n?
Activepieces. Se basa en la misma idea: un constructor visual en el que un desencadenador inicia un flujo y cada paso llama a un servicio, con un catálogo amplio de conectores. Su núcleo usa la licencia MIT, se ejecuta con Postgres y Redis mediante Docker, y sus piezas también funcionan como servidores MCP para clientes LLM. La limitación que debe tener en cuenta es que el acceso a la API y las funciones de agentes están en los directorios comerciales de empresa, por lo que una instancia de Community Edition se controla mediante su interfaz web y no de forma programática.
¿Activepieces es realmente de código abierto?
El núcleo lo es y usa la licencia MIT. Dos directorios, packages/ee/ y packages/server/api/src/app/ee, tienen licencia comercial, y el uso de esas funciones en su propio servidor requiere una licencia de pago. La página de precios del proveedor deja fuera de Community Edition Agents and Chat, Projects, el acceso a la API, el inicio de sesión único, los roles de usuario, los registros de auditoría, los gestores de secretos, la personalización de marca y la sincronización con Git, mientras que las ejecuciones, los usuarios y los flujos no tienen límites. Por tanto, es realmente de código abierto para crear y ejecutar automatizaciones, pero no para la capa de equipos y gobierno.
¿Cuánta RAM necesita Activepieces en un VPS?
Activepieces documenta 0.5 vCPU y 1 GB para cada worker, 1 vCPU y 1 GB para el contenedor de la aplicación, 4 GB para Postgres y 1 GB para Redis. Un worker gestiona un flujo cada vez durante toda la ejecución de ese flujo, por lo que debe dimensionar el sistema según el número máximo de flujos simultáneos y no según la frecuencia con la que se activan los desencadenadores. El archivo compose del repositorio incluye cinco workers, lo que equivale aproximadamente a 11 GB según el dimensionamiento publicado. Dos workers en un VPS de 4 GB es un comienzo razonable, y docker stats --no-stream confirma la cifra real para sus flujos mientras se ejecutan.
¿Qué debo incluir en la copia de seguridad para que una restauración funcione realmente?
El volcado de la base de datos y la clave de cifrado, juntos. En Activepieces, se trata de un pg_dump de la base de datos activepieces y del archivo .env que contiene AP_ENCRYPTION_KEY. En n8n, es la base de datos junto con N8N_ENCRYPTION_KEY, que n8n genera dentro de la carpeta ~/.n8n si nunca la ha configurado. En Node-RED, haga una copia de seguridad de todo el volumen /data, porque el archivo de credenciales y la clave que lo descifra se encuentran allí. Windmill es la excepción: su clave de workspace se encuentra dentro de su propia base de datos Postgres, por lo que el volcado contiene todo y debe protegerse como si fueran los propios secretos.
¿Puedo importar mis flujos de trabajo de n8n en otra herramienta?
No. Estos proyectos importan y exportan sus propios formatos de flujo, no los de n8n. Una migración implica reconstruir cada flujo en el nuevo constructor y volver a crear cada credencial a partir del servicio original. Ese trabajo es el coste real del cambio, por lo que debe contar sus flujos antes de decidir. Doce flujos requieren una tarde. Doscientos flujos requieren un proyecto y, normalmente, resulta más barato corregir el uso de memoria de n8n con queue mode y Postgres que reconstruirlos todos.