Tired of Zapier bills and still typing “open source n8n alternative” into Google? Most roundups push Activepieces or Windmill. Fair enough – n8n isn’t OSI open source. It’s fair-code under the Sustainable Use License. For most teams that want unlimited self-hosted workflows, AI agents, and 400+ nodes without per-task pricing, deploying n8n itself is still the best practical move.
This guide gets n8n 2.35.3 (current stable as of mid-August 2026; beta sits at 2.36.0) running on a laptop or VPS. One-line path first, then a pinned Docker run, the config that matters, verification, the errors that actually bite, then upgrade and uninstall.
Is n8n really an open source n8n alternative?
Source-available. Self-host free for internal and personal use. Full GitHub repo and official images. No artificial execution caps on self-hosted. You cannot turn it into a multi-tenant paid SaaS without an Enterprise license – that restriction is spelled out in n8n’s Sustainable Use License docs. Pure-OSI tools show up in every alternatives list for that reason.
If the goal is automations on your infra with data staying local, the license is a non-issue. Building a competing hosted product? Look elsewhere. Everything below assumes the first case.
System requirements before you touch Docker
Light local testing is forgiving. The modern AI-assistant sandbox stack is not.
| Use case | CPU | RAM | Disk | Notes |
|---|---|---|---|---|
| Quick local try (SQLite) | 1-2 vCPU | 2 GB | 10-20 GB | Simple docker run or one-line without heavy AI sandbox load |
| Recommended / AI sandbox Compose | 2+ vCPU | 4 GB+ | 20-40 GB SSD | Official Compose guide calls out 4 GB because of the privileged Docker-in-Docker runner |
| Small production + Postgres | 2+ vCPU | 4-8 GB | 40 GB+ SSD | Prefer Postgres over SQLite for concurrent workflows |
OS: Linux (Ubuntu 22.04/24.04 common), macOS, or Windows via WSL2 + Docker Desktop. You need Docker Engine and the Compose v2 plugin. Node/npm is no longer the preferred path for new installs – the npm route is deprecated heading into the 3.x era (planned around October 2026 per n8n install docs).
Official download sources (use these only)
- One-line installer:
https://get.n8n.io– pulls current stable images and writes compose files - Container image:
docker.n8n.io/n8nio/n8norn8nio/n8non Docker Hub – pin2.35.3for production - Source and releases: github.com/n8n-io/n8n
- Ready Compose examples (Postgres and friends): n8n-hosting
- Docs entry: docs.n8n.io/deploy/host-n8n
Skip random third-party images. The data layout and encryption key assumptions match the official image only.
Install path A: one-line setup (fastest)
Best for laptops and a first look. Docker must already be installed and running.
curl -fsSL https://get.n8n.io | sh
It checks Docker/Compose, creates ./n8n with compose.yml and a .env full of unique secrets, pulls images, and starts n8n plus the AI sandbox stack. Done right, the script prints something like “n8n is running at: http://localhost:5678”.
Want to read the script first?
curl -fsSL https://get.n8n.io -o get-n8n.sh
less get-n8n.sh
sh get-n8n.sh
Windows: run it from WSL (Docker Desktop WSL2 backend). Plain PowerShell or CMD will not execute the shell script cleanly.
docker compose -f ./n8n/compose.yml down # stop
docker compose -f ./n8n/compose.yml up -d # start
curl -fsSL https://get.n8n.io | sh -s -- --upgrade # upgrade
Install path B: explicit Docker run (minimal, no AI sandbox bloat)
Single container. SQLite only. Smaller surface area on a tight VPS.
docker volume create n8n_data
docker run -d --name n8n
--restart unless-stopped
-p 5678:5678
-e GENERIC_TIMEZONE="Europe/Warsaw"
-e TZ="Europe/Warsaw"
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
-v n8n_data:/home/node/.n8n
docker.n8n.io/n8nio/n8n:2.35.3
Swap the timezone. Pin :2.35.3 instead of floating latest so a quiet pull does not surprise you mid-week.
Pro tip: The named volume is non-negotiable. It holds SQLite, logs, and the encryption key that protects credentials under
/home/node/.n8n. SetN8N_ENCRYPTION_KEYto a long random string on first boot and keep that value forever. Recreate the container without the volume (or with a different key) and every saved credential becomes undecryptable junk – even if Postgres or workflow JSON still exists. That is the #1 self-host foot-gun.
How much stack do you actually need on day one? Probably less than the full AI sandbox. A pinned single container teaches the product faster than debugging DinD healthchecks.
First-time configuration that actually matters
Open http://localhost:5678. Create the owner account. Minimum viable start – done.
Then decide two things only:
- Webhook URL – external webhooks (GitHub, Stripe, etc.) need
WEBHOOK_URL=https://your.domainplus a reverse proxy and TLS. Local-only testing can skip it or use the tunnel option (dev only, not production). - Database – SQLite is fine for one person tinkering. Shared or always-on? Switch to Postgres via
DB_TYPE=postgresdbplus host/user/password/database, or the officialwithPostgrescompose in n8n-hosting. Flipping DB later does not auto-migrate existing SQLite data.
Optional AI Assistant: drop a model API key in the UI AI settings or set N8N_INSTANCE_AI_MODEL_API_KEY in .env, then restart n8n. The one-line stack already wires sandbox pieces on the private compose network.
Most people over-configure on day one. Get a single Schedule → HTTP Request workflow green first. Everything else can wait until that execution shows up in the list.
Verify the install works
# container healthy?
docker ps | grep n8n
# HTTP health endpoint (official)
curl -sf http://localhost:5678/healthz && echo OK
# one-line / full compose: sandbox reachable from n8n
docker compose -f ./n8n/compose.yml exec n8n wget -qO- http://sandbox-api:8080/healthz
In the UI: tiny workflow, execute once, confirm the run appears. If that works, process + data directory are healthy.
Common install errors and fixes
“Bind for 0.0.0.0:5678 failed: port is already allocated”
Old container, another tool, or a WSL relay owns 5678. Run docker ps -a, stop/rm the offender, or map -p 5679:5678 and use the new host port.
Credentials vanish or “could not decrypt” after recreate
You lost the volume or changed N8N_ENCRYPTION_KEY. Restore the original volume/key, or re-enter credentials. See the pro tip above – there is no magic recovery if the key is gone.
sandbox-api / sandbox-runner never healthy (one-line or full Compose)
Usually RAM under 4 GB, missing secrets in .env, or cert bootstrap failed. Check docker compose logs sandbox-certs and sandbox-api. On WSL keep the project under the Linux filesystem (~/n8n), not /mnt/c/....
Permission errors on the data directory
Official images run as user node. Fix ownership on bind mounts, or stick to a Docker named volume.
v2 image feels “empty” (no apt/apk)
Recent images are minimal. You cannot casually apt install debug tools inside. Expected. Debug from the host or a sidecar.
Upgrade and uninstall without losing work
One-line install upgrade:
curl -fsSL https://get.n8n.io | sh -s -- --upgrade
Plain Docker / your own compose:
docker pull docker.n8n.io/n8nio/n8n:2.35.3 # or newer stable
# stop & remove only the container - keep the volume
docker stop n8n && docker rm n8n
# re-run the same docker run / compose up with the new tag
Compose shorthand: docker compose pull && docker compose down && docker compose up -d. Skim BREAKING-CHANGES.md before major version jumps.
Uninstall / cleanup:
# one-line tree
docker compose -f ./n8n/compose.yml down -v # -v deletes data volumes
rm -rf ./n8n
# simple docker run
docker stop n8n && docker rm n8n
docker volume rm n8n_data # only if you truly want data gone
Export critical workflows as JSON from the UI before any destructive cleanup.
FAQ
Is self-hosted n8n completely free?
Yes for internal and personal use under the Sustainable Use License. You pay the server (or electricity). Cloud and Enterprise are optional products from n8n GmbH.
Docker or the one-line script – which should I pick?
One-line if you want the AI sandbox stack and zero YAML editing on a laptop. Explicit docker run (or a minimal Postgres compose) on a VPS when you care about image surface area and RAM. A 2 GB box with three scheduled API syncs is happier on one pinned container + volume than on the full DinD sandbox suite.
I already run Activepieces / Windmill. Why bother with n8n?
Different trade-offs, not a morality play. Those projects win on OSI license purity – full stop. n8n still wins for a lot of teams on node breadth, the visual-plus-code hybrid editor, and mature AI-agent building blocks. Running more than one tool is fine. The install above just removes the “I’ll try it later” friction for n8n 2.35.3 specifically, without another 12-row comparison table.
Open a terminal. Run the one-line command or the pinned docker run. Hit http://localhost:5678. Build one dumb workflow before you close this tab.