Node Flowdocs

Temporal alternative: node-flow vs Temporal

node-flow vs Temporal — JSON workflows and polyglot workers instead of deterministic workflow code, on Postgres alone instead of a Temporal cluster.

node-flow is a Temporal alternative for processes that cross teams, services and languages. Temporal makes code durable: your workflow is a function that the SDK replays from an event history. node-flow orchestrates a document: the workflow is a JSON DAG the engine reads, and your code only ever implements one step. The two answer different questions, and it is worth being honest about which one you have.

Why people look for a Temporal alternative

  • Determinism rules. Temporal workflow code must be deterministic — no direct clock, randomness, network or unversioned logic changes — because it is replayed. node-flow workers are ordinary code with no such rules; the engine is the only deterministic part, and it is ours to keep that way.
  • Versioning in-flight workflows. Changing Temporal workflow code while runs are in flight needs patching or worker versioning. A node-flow definition is versioned data: running executions keep the version they started with.
  • Running the cluster. Self-hosted Temporal is a set of services (frontend, history, matching, worker) over Cassandra, MySQL or PostgreSQL, with Elasticsearch commonly added for advanced visibility. node-flow is one image on one Postgres database.
  • People who are not the workflow's author. In node-flow an operator can open a run in the dashboard, see the DAG, retry a step, rerun from a task or terminate — without reading the code that defined it.

node-flow vs Temporal at a glance

node-flowTemporal
Workflow is…A JSON DAG (data)Code in a Temporal SDK
Determinism constraints on your codeNoneWorkflow code must be deterministic
Worker languagesAny — workers are HTTP clients; generated Python, Go, Java, TypeScript clientsLanguages with an official SDK
Worker runtimeNone; poll, do the work, reportSDK workflow runtime in your process
InfrastructurePostgreSQL 18Temporal services + Cassandra/MySQL/PostgreSQL, optional Elasticsearch
Long waits and timersOne row per wait, no worker heldDurable timers
Human approvalsFirst-class HUMAN task and inboxBuilt from signals and your own UI
Visual editingDAG editor in the dashboardNot applicable — workflows are code
Testingtestkit runs a definition with no serverSDK test environments with time skipping
Conductor compatibilityYesNo
Managed offeringSelf-hostedTemporal Cloud
LicenceSource available, free to run commerciallyMIT

When Temporal is the better choice

Choose Temporal when the workflow lives inside one team's service, in one language, and is genuinely code: complex state, rich types, loops whose logic would be painful to express as JSON. Temporal's model is excellent at that, its ecosystem is large, and Temporal Cloud removes the operational cost.

Using both

They are not mutually exclusive. A common shape is node-flow owning the cross-team process — the one operators look at — and calling a Temporal workflow as a single SIMPLE step inside it.

Frequently asked questions

What is a simpler alternative to Temporal?

node-flow is simpler to run and to reason about when your workflow can be expressed as a DAG: it needs only PostgreSQL, workflows are JSON you can read and diff, and workers are plain HTTP clients with no determinism rules. For logic that is truly code, Temporal remains the stronger tool.

Does node-flow have determinism constraints like Temporal?

Not for your code. Workers can call clocks, random numbers and networks freely. Determinism lives inside node-flow’s engine, a pure decide function, which is what lets it replay a recorded run against a definition.

Can node-flow run long-running workflows like Temporal?

Yes. Runs survive restarts and deploys, WAIT and HUMAN tasks can last days or weeks at the cost of one database row, and retries, timeouts and compensation are defined per task.

Does node-flow need Cassandra or Elasticsearch?

No. PostgreSQL 18 holds state, queues, timers, the outbox and search. It is the only infrastructure dependency.

Next

On this page