flow
Compare

Qoqi Flow vs the rest

They replay your code. Qoqi Flow freezes it.

Temporal, DBOS, Restate, Inngest and Workflow SDK bring a workflow back by running its code again, so the code has to behave the same every time. Qoqi Flow writes down the state of execution and goes on from the line it was at. Everything else follows.

vs Temporal

Temporal's durability, without the determinism rules.

Temporal replays your workflow from its event history, so your code has to play back identically, forever. Qoqi Flow freezes the state of execution and thaws it at the line it was at. Nothing replays, so nothing has to be deterministic.

vs DBOS

Recovery that does not run your code twice.

DBOS recovers a workflow by calling it again and skipping the steps it checkpointed, so the code has to take the same path every time. Qoqi Flow thaws the frozen state at the line it was at: no re-execution, no determinism, and a compiler that checks what DBOS leaves to discipline.

vs Restate

Waiting for months is the point, not a smell.

Restate replays a journal, so every side effect goes through ctx.run and the clock through ctx.date, by discipline. Running invocations stay on their deployment, and its docs advise against handlers that run for days. A Qoqi flow waits as long as the process takes, moves to new code at a stage, and the compiler checks the rules.

vs Inngest

Every line runs once. Not just the steps.

Inngest calls your function again and again, handing back the results of the steps it saved; the code around them runs each time, and a step is known by its string id. Qoqi Flow thaws the instance at its line: every line runs once, and a deploy never makes a step run twice.

vs Workflow SDK

Durable without a sandbox, a compiler plugin or a host.

Vercel's Workflow SDK compiles "use workflow" functions into a sandbox that is replayed from an event log: a logical clock, a seeded Math.random, no fetch, no timers, no Node modules. Each run is pinned to the deployment that started it. Qoqi Flow is a whole language that never replays, moves to new code at a stage, and runs anywhere.

All of them, side by side

Qoqi FlowTemporalDBOSRestateInngestWorkflow SDK
Comes back byThawing its stateReplayRe-executionReplayCalling it againReplay
Determinism rulesNoneYesYesYesYesYes, in a sandbox
Calls outside steps caughtAt compile timePartly: a Go linter, a Python sandboxNoNoNoAt load or run time
Running instances on new codeMove at a stage, checkedPatches, or pinned workersApp version, or patchesPinned to a deploymentMatched by step idPinned to a deployment
A step never run twiceSettled<T>At least onceAt least onceAt least onceAt least onceAt least once
Crash tests built ineveryCrashNoNoNoNoNo
Steps in any languageAny server that speaks the protocolAn SDK per languagePython, TS, Go, JavaAn SDK per languageTS, Python, GoTypeScript
To run itOne binaryService, database, Elasticsearch, workersA library, and PostgresA serverA server, Postgres and Redis to scaleVercel, or a World
LicenseApache 2.0MITMITBSL 1.1SSPLApache 2.0

Write the process. Let it wait.

$ curl -fsSL https://qoqi.dev/install.sh | sh

Quickstart GitHub