Inngest alternative: node-flow vs Inngest
node-flow vs Inngest — a self-hosted JSON workflow orchestrator with polling workers in any language, as an alternative to event-driven step functions.
node-flow is an Inngest alternative for workflows that should be data, not
code. Inngest runs step functions: event-triggered functions in your app,
written with its SDK, where each step.run is checkpointed and the function is
re-invoked over HTTP to continue. node-flow holds the workflow itself as a JSON
DAG, and workers — any language, no SDK required — poll for the steps they own.
Why people look for an Inngest alternative
- The workflow should outlive one codebase. When a process spans several services and teams, a JSON definition registered with the orchestrator is a shared artefact; a function inside one app is not.
- Pull, not push. Inngest calls your endpoints. node-flow workers poll and lease, so they can sit behind a firewall with no inbound route, and concurrency caps and rate limits are enforced at dequeue on the server.
- One dependency to self-host. node-flow is one image on PostgreSQL 18.
- Operators, not just developers. Retry a step, rerun from a task, terminate, bulk actions and a human-task inbox are in the dashboard.
node-flow vs Inngest at a glance
| node-flow | Inngest | |
|---|---|---|
| Workflow is… | A JSON DAG | A function using the Inngest SDK |
| Execution | Workers poll and lease tasks | Inngest invokes your function over HTTP per step |
| Languages | Any, over HTTP | Languages with an Inngest SDK |
| Triggers | API, cron, signed webhooks, Kafka/NATS/AMQP/SQS/Redis Streams events | Events, cron, webhooks |
| Flow control | Concurrency, rate limits, semaphores enforced server-side at dequeue | Concurrency, throttling, debounce, priority |
| Human approvals | HUMAN task with inbox | waitForEvent plus your own UI |
| Self-hosting | PostgreSQL 18 | Inngest server with its own stores |
| Managed offering | Self-hosted | Inngest Cloud |
When Inngest is the better choice
Choose Inngest when your workflows live inside one application, you like defining them next to the code that runs them, and you want event-driven features such as debounce and batching with a managed service behind them.
Frequently asked questions
What is a self-hosted alternative to Inngest?
node-flow is a self-hosted workflow orchestrator that runs on PostgreSQL alone. Workflows are JSON DAGs, workers poll for tasks in any language, and triggers include cron, signed webhooks and message-broker events.
Do node-flow workers need a public endpoint?
No. Workers make outbound HTTP requests to lease tasks, send heartbeats and report results, so they can run in private networks with no inbound traffic.
Next
Trigger.dev alternative: node-flow vs Trigger.dev
node-flow vs Trigger.dev — language-agnostic workers and JSON workflows on your own Postgres, instead of TypeScript tasks deployed to a task runtime.
Restate alternative: node-flow vs Restate
node-flow vs Restate — JSON-defined orchestration with polling workers in any language, compared with Restate's durable handlers and virtual objects.
