Millstream vs n8n
n8n is a workflow automation tool built around a visual editor and a large catalogue of integration nodes, including nodes for LLMs and agents. Millstream is a pipeline platform for engineers: the pipeline is a file in git, validated before it runs, and every item that flows through code, agents and review is persisted with its history.
At a glance
| Millstream | n8n | |
|---|---|---|
| Definition | pipeline.yaml and a package directory in git |
Workflows built in a browser editor, stored in n8n's database, exportable as JSON |
| Validation | millstream check: actions, streams, CEL, schemas between producers and consumers |
In the editor, and at execution |
| Unit of durable work | One delivery of one item to one step, with retries and dead letters | One workflow execution, passing a list of items between nodes |
| Revisions | Content hash of the package; runs pinned to theirs; millstream rollback |
Kept in n8n's database |
| Agents | Agent actions with schemas, sandbox, transcripts, budgets and evals | AI and agent nodes |
| Human decisions | review builtin with an inbox, edits, reason codes, timeouts and sampled auto-approval |
Wait nodes and forms |
| Integrations | Actions you write or install from a registry; a commercial catalogue is planned | A large catalogue of built-in nodes |
| Licence | Apache-2.0 core, commercial edition | Sustainable Use License |
| Status | Pre-release: M1 to M5 built and tested | Released, widely used |
Where the models differ
The file in git is the source of truth
A Millstream package is a directory: pipeline.yaml, local actions, lessons, evals and assets. Its revision is the SHA-256 of its content, so a change to a prompt or a lessons file is a new revision, exactly like a change to a step. Code review, diffs and CI apply to pipelines as they do to any code. Millstream has no graphical editor on purpose: the UI shows the live graph, runs, items and the review inbox, and pipelines change through their packages.
Failures are per item and replayable
Each item has its own deliveries, retry policy (maxAttempts, backoff, maxBackoff) and dead-letter stream. An output that matches no route goes to the step's dlq as an unrouted dead letter, so a gap in routing is visible and replayable. The crash suite kills the engine and nodes at every boundary of every atomic unit; the 30-minute soak test killed engines and cut nodes off the network under load and ended with every run settled and no item published twice.
Agents are governed
An agent action declares its model, tools, network destinations and maxCostUsd. Output that fails its schema is a retryable error, and the full transcript of each attempt is kept. Agent calls are recorded and replayed in tests, so millstream eval and millstream test pipeline run deterministically in CI without an API key. Cost is a metric per step and model, and the cost insight reports cost per approved item.
Review is measured
qualify-review:
action: review
in: leads.qualified
out: leads.approved
config: { inbox: sales, timeout: 8h, onTimeout: { escalate: sales-leads }, reasons: [notOurMarket, student] }
Every decision records the reason code and the diff of any edit. Auto-approval rules are measured on a sample (sampleRate, 5% by default), and the intervention rate per step tells you whether the pipeline needs people less over time.
When to choose n8n
- Your automations are mostly integration glue between SaaS tools, and its node catalogue already covers them.
- The people building them prefer a visual editor to a file and a terminal.
- You want a working automation within hours, hosted or self-hosted, from a released and widely used tool.
- The Sustainable Use License fits your use. Millstream's core will be Apache-2.0.
Using them together
n8n's HTTP nodes can fire a Millstream run through a webhook trigger, POST /hooks/<pipeline>/<trigger> with the trigger's token. In the other direction, a review step's notify posts a generic JSON webhook each time an item parks or escalates, which an n8n webhook can receive and fan out to the team's channels.