Absurd¶
Absurd is a Postgres-native durable workflow system. It moves the complexity of durable execution into the database layer via stored procedures, keeping SDKs lightweight and language-agnostic. The core principle is to handle tasks that may run for minutes, days, or years without losing state.
All you need is a Postgres database and the single
absurd.sql
schema file. No extra services, no message brokers, no coordination layer.
… because it's absurd how much you can over-design such a simple thing.
How It Works¶
A task dispatches onto a queue from where a worker picks it up. Tasks are subdivided into steps that act as checkpoints. Once a step completes successfully its return value is persisted and the step won't execute again. If a task fails, it retries from the last checkpoint.
Tasks can also sleep (suspend until a time) or await events (suspend until a named event is emitted). Events are cached — first emit wins — making them race-free.
import { Absurd } from 'absurd-sdk';
const app = new Absurd();
app.registerTask({ name: 'order-fulfillment' }, async (params, ctx) => {
const payment = await ctx.step('process-payment', async () => {
return await stripe.charges.create({ amount: params.amount });
});
const shipment = await ctx.awaitEvent(`shipment.packed:${params.orderId}`);
await ctx.step('send-notification', async () => {
return await sendEmail(params.email, shipment);
});
return { orderId: payment.id, trackingNumber: shipment.trackingNumber };
});
await app.startWorker();
Quick Links¶
- Quickstart — install the schema, create a queue, run your first task
- Concepts — tasks, steps, runs, events, and retry semantics
- Patterns — practical recipes for common workflow and scheduling setups
SDKs¶
- TypeScript SDK — full API reference for Node.js / TypeScript
- Python SDK — sync and async clients using psycopg