Durable background jobs on the Postgres you already run.
A payment succeeds but the receipt email never sends because the process died in between. flow-keeper makes that impossible: retryable, crash-safe, step-based workflows for payments, email sequences, and AI pipelines — without the ops burden. No Redis. No new infra. Just your DB.
npm i @flow-keeper/core — free forever, self-hosted.
import { FlowKeeper, defineWorkflow } from "@flow-keeper/core";
const fk = new FlowKeeper({ connection: process.env.DATABASE_URL });
const checkout = defineWorkflow("checkout", async (ctx, order) => {
const charge = await ctx.step("charge-card", () =>
stripe.charge(order)); // retries with backoff on failure
await ctx.step("send-receipt", () =>
email.receipt(order, charge)); // memoized — replays skip completed steps
await ctx.sleep("wait-1-day", 86_400_000); // durable. survives restarts.
await ctx.step("ask-for-review", () => email.review(order));
});
fk.register(checkout).start();
await fk.trigger("checkout", order, { idempotencyKey: order.id });Built for the stack you already run — Next.js, Node, Bun, and any Postgres (Neon, Supabase, RDS, local).
Everything a queue should have. None of the ops.
Define steps as plain functions. flow-keeper makes them durable.
Automatic retries
Every step retries with exponential backoff. A flaky payment API or a 3am network blip resolves itself — no dead-letter babysitting.
Pause & resume
ctx.sleep() durably suspends a run for seconds or weeks. Email drips, trial reminders, and cooldowns survive deploys and crashes.
Visual run timeline
See every run, every step, every retry on a live timeline. Replay a failed run from the exact step it died on — in one click.
Zero new infra
No Redis. No SQS. No separate worker fleet. State lives in the Postgres you already pay for, in its own schema.
Why not Temporal or a Redis queue?
Both are great at scale. Both are overkill — and a real ops cost — for a solo dev or a small team.
| flow-keeper | Temporal | BullMQ + Redis | |
|---|---|---|---|
| Runs on your existing Postgres | — | — | |
| No Redis / no separate queue | — | — | |
| Set up in < 5 minutes | — | ||
| Durable sleep / pause-resume | |||
| Self-hostable, open-core | — | ||
| Ops burden | None | High | Medium |
Ship reliable jobs this afternoon.
The library is free and open-source. The hosted dashboard — alerting, replay, and a live timeline — is $29/mo (₹2,499/mo).