Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
Go to file
Guillaume Jacquart 4ff9c1204b
perf(core): Throttle sub-workflow progress pushes and limit them to direct children
The progress stream forwarded from a sub-workflow to the parent's canvas was
effectively unthrottled. The previous guard only suppressed consecutive
`nodeExecuteBefore` events for the same node with no intervening
`nodeExecuteAfter` — a sequence the engine does not produce — so steady state
was two messages per child node execution. Each of those is a pubsub broadcast
in scaling mode and a full canvas re-map in the editor, so a looping child
workflow could emit thousands of messages for one run.

Replace it with a trailing-edge throttle: the leading edge still emits
immediately so the overlay appears at once, subsequent events inside the window
coalesce into a single pending snapshot, and a trailing timer sends the latest
state. The overlay only renders the running node name, an "X / Y" counter and a
bar, so intermediate states are disposable. A 200-iteration child now emits two
messages instead of ~400. `workflowExecuteAfter` drops any pending snapshot,
since the finished event clears the overlay outright.

Also stop forwarding progress for nested sub-workflows. Only the workflow open
on the canvas renders the overlay, so a grandchild's parent node is not on
screen and the editor discarded those messages anyway. Resolving the direct
parent's pushRef instead of walking the whole ancestor chain removes that
wasted traffic and simplifies the lookup.

Tests now exercise real engine before/after sequences rather than the synthetic
double-`nodeExecuteBefore` the old throttle keyed on.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-06 10:50:07 +02:00
.agents feat(API): Support multipart request bodies on Public API controller routes (no-changelog) (#40074) 2026-10-05 15:08:34 +00:00
.claude feat(editor): Standardize Agent Builder modals (#39220) 2026-09-23 12:25:19 +00:00
.devcontainer chore: Connect the Claude Code desktop app to Codespaces (no-changelog) (#39524) 2026-09-29 08:04:54 +00:00
.githooks build: Make check-pnpm as JS script (no-changelog) (#39857) 2026-10-02 08:20:31 +00:00
.github chore: Update e2e impact map (#40370) 2026-10-06 05:24:45 +00:00
.opencode/skills/setup-mcps chore: Unify agent skill sources (no-changelog) (#30541) 2026-06-16 09:25:09 +00:00
.vscode fix(core): Force full execution data fetching for evaluation test runs (#27335) 2026-03-23 09:56:05 +00:00
assets ci: Revert path change for n8n-logo.png (#12874) 2025-01-28 08:49:33 +01:00
docker chore(core): Bump task-runner-launcher to 1.5.1 (#40324) 2026-10-05 15:00:51 +00:00
docs feat(core): Persist agent budget spend in the database (#40138) 2026-10-05 15:11:29 +00:00
packages perf(core): Throttle sub-workflow progress pushes and limit them to direct children 2026-10-06 10:50:07 +02:00
patches build(editor): Reduce per-file module cost in the vitest suite (#38370) 2026-09-28 07:02:43 +00:00
scripts chore: Migrate part of the base packages to oxlint (#40253) 2026-10-05 06:18:31 +00:00
security ci: Add nightly SBOM license validation (no-changelog) (#38077) 2026-09-08 14:30:36 +00:00
.actrc ci: Add blacksmith build step and cache restore (#19563) 2025-09-16 09:59:39 +01:00
.aikido refactor: Group quality engineering workspaces by capability (#40007) 2026-10-01 11:20:00 +00:00
.boundaries-baseline.json chore: Lower boundaries baseline (no-changelog) (#40369) 2026-10-06 03:30:05 +00:00
.code-health-baseline.json chore: Complete base package migration to Oxlint (#40257) 2026-10-05 10:48:34 +03:00
.dockerignore refactor: Group quality engineering workspaces by capability (#40007) 2026-10-01 11:20:00 +00:00
.editorconfig ci: Ensure that eslint runs on all frontend code (no-changelog) (#4602) 2022-11-15 18:20:54 +01:00
.env.eval.example feat(core): Remove the N8N_MCP_CANVAS_GROUPS_ENABLED feature flag (no-changelog) (#38645) 2026-09-17 09:11:18 +00:00
.env.local.example refactor: Remove persistBuilderSessions feature flag (#27481) 2026-03-30 12:16:07 +00:00
.git-blame-ignore-revs refactor(editor): Rename design-system unit test files and snapshots (no-changelog) (#11539) 2024-11-05 14:20:02 +02:00
.gitattributes build: Move the monorepo and Docker deploys to pnpm 12 (no-changelog) (#37899) 2026-09-08 15:15:57 +01:00
.gitignore refactor: Group quality engineering workspaces by capability (#40007) 2026-10-01 11:20:00 +00:00
.npmignore build: Update ESLint to v9 (#16639) 2025-06-27 10:42:47 +02:00
.poutine.yml ci: Add MCP workflow evals CI (no-changelog) (#33019) 2026-06-26 08:53:01 +00:00
.prettierignore test: Remove cypress infrastracture (#21173) 2025-10-28 11:00:04 +01:00
.prettierrc.js 🎨 Set up linting and formatting (#2120) 2021-08-29 20:58:11 +02:00
.tbls.postgres.yml chore(core): Make DB schema docs generation deterministic (#32373) 2026-06-16 11:35:33 +00:00
.tbls.sqlite.yml chore(core): Make DB schema docs generation deterministic (#32373) 2026-06-16 11:35:33 +00:00
agent-harness.lock.json fix: Remove agent harness checksum validation (no-changelog) (#38776) 2026-09-16 07:17:17 +00:00
AGENTS.md refactor: Group quality engineering workspaces by capability (#40007) 2026-10-01 11:20:00 +00:00
biome.jsonc refactor: Group quality engineering workspaces by capability (#40007) 2026-10-01 11:20:00 +00:00
CHANGELOG.md 🚀 Release 2.43.0 (#40376) 2026-10-06 07:10:16 +00:00
CLAUDE.md chore: Move to AGENTS.md file with agent instructions (#22227) 2025-11-25 12:41:53 +01:00
CODE_OF_CONDUCT.md refactor: Format root-level files (#3858) 2022-08-19 15:34:02 +02:00
codecov.yml refactor: Group quality engineering workspaces by capability (#40007) 2026-10-01 11:20:00 +00:00
CONTRIBUTING.md refactor: Group quality engineering workspaces by capability (#40007) 2026-10-01 11:20:00 +00:00
CONTRIBUTOR_LICENSE_AGREEMENT.md refactor: Format root-level files (#3858) 2022-08-19 15:34:02 +02:00
cubic.yaml refactor: Group quality engineering workspaces by capability (#40007) 2026-10-01 11:20:00 +00:00
knip.ts refactor: Group quality engineering workspaces by capability (#40007) 2026-10-01 11:20:00 +00:00
lefthook.yml build: Make check-pnpm as JS script (no-changelog) (#39857) 2026-10-02 08:20:31 +00:00
LICENSE_EE.md docs(license): Introduce n8n Enterprise License (#3945) 2022-08-29 22:08:42 +02:00
LICENSE.md refactor(core): Mark all backend Enterprise Edition files and dirs (#12350) 2024-12-24 13:02:05 +01:00
OWNERS chore: Move Chat Hub ownership to Assistant team (no-changelog) (#40243) 2026-10-05 13:38:29 +00:00
package.json 🚀 Release 2.43.0 (#40376) 2026-10-06 07:10:16 +00:00
pnpm-lock.yaml feat(core): Add a shared OAuth discovery and JWKS client (no-changelog) (#40012) 2026-10-05 12:11:52 +00:00
pnpm-workspace.yaml test: Add E2E coverage for the community node API version guard (no-changelog) (#39805) 2026-10-02 09:23:26 +00:00
README.md docs: Update README quick-start setup command (no-changelog) (#36831) 2026-08-21 13:19:16 +00:00
SECURITY.md chore: Revise security vulnerability reporting instructions (#21432) 2025-10-31 13:30:50 +01:00
tsconfig.configs.json chore: Bundle/2.x (#33793) 2026-07-08 08:48:55 +03:00
tsconfig.json chore: Migrate all base packages to TypeScript 7 (#34338) 2026-07-17 12:56:29 +03:00
turbo.json chore: Update turbo.json oxlint configurations (#40377) 2026-10-06 07:27:56 +00:00
vitest.workspace.ts chore: Update node popularity data (#24145) 2026-01-12 13:57:43 +00:00

Banner image

n8n – The Platform for AI Agents and Workflow Automation

Fair-code platform to build and deploy AI agents and workflows. Combine a visual canvas with custom code, run it self-hosted or in the cloud, and connect to 1500+ integrations. AI automation you can trust with real work, from prototype to production.

n8n.io - Screenshot

Key Capabilities

  • AI-Native Automation Platform: Build and operationalize AI workflows and multi-step agents using your own data, models, and tools
  • Model Flexibility, No Lock-In: Connect to OpenAI, Anthropic, Google, or open-source models and switch providers without changing your architecture
  • From Prototype to Production: Design multi-step AI workflows with logic, tool use, human approvals, and full observability
  • Code When You Need It: Combine visual building with JavaScript, Python, and npm packages for advanced AI workflows
  • Enterprise-Ready AI: Self-host or deploy securely with role-based access, audit trails, and support for sensitive data
  • Leverage What Already Exists: 1500+ integrations and 9,000+ workflow templates to connect AI with your existing systems

Quick Start

Try n8n instantly with our install script (requires Docker):

curl -fsSL https://get.n8n.io | sh

Or deploy manually with Docker:

docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

Access the editor at http://localhost:5678

Resources

Support

Need help? Our community forum is the place to get support and connect with other users: community.n8n.io

License

n8n is fair-code distributed under the Sustainable Use License and n8n Enterprise License.

  • Source Available: Always visible source code
  • Self-Hostable: Deploy anywhere
  • Extensible: Add your own nodes and functionality

Enterprise Licenses available for additional features and support.

Additional information about the license model can be found in the docs.

Contributing

Found a bug 🐛 or have a feature idea ✨? Check our Contributing Guide for a setup guide & best practices.

Join the Team

Want to shape the future of automation? Check out our job posts and join our team!

What does n8n mean?

Short answer: It means "nodemation" and is pronounced as n-eight-n.

Long answer: "I get that question quite often (more often than I expected) so I decided it is probably best to answer it here. While looking for a good name for the project with a free domain I realized very quickly that all the good ones I could think of were already taken. So, in the end, I chose nodemation. 'node-' in the sense that it uses a Node-View and that it uses Node.js and '-mation' for 'automation' which is what the project is supposed to help with. However, I did not like how long the name was and I could not imagine writing something that long every time in the CLI. That is when I then ended up on 'n8n'." - Jan Oberhauser, Founder and CEO, n8n.io