pgflow

200+ lines of boilerplate

πŸ”§ Queue setup & configuration
πŸ”„ Worker management & polling
πŸ“¦ Message handling & state tracking
❌ Error handling & retries
πŸ”— Manual step coordination

import { Flow } from 'npm:@pgflow/dsl';

new Flow<{ url: string }>({ slug: 'analyzeArticle' })

.step({ slug: 'fetchArticle' },

(flowInput) => scrapeWebsite(flowInput.url)

)

.step({ slug: 'summarize', dependsOn: ['fetchArticle'] },

(deps) => summarizeContent(deps.fetchArticle)

)

.step({ slug: 'extractKeywords', dependsOn: ['fetchArticle'] },

(deps) => extractKeywords(deps.fetchArticle)

)

.step({ slug: 'publish', dependsOn: ['summarize', 'extractKeywords'] },

async (deps, ctx) => {

const flowInput = await ctx.flowInput;

return publishArticle({

url: flowInput.url,

content: deps.fetchArticle,

summary: deps.summarize,

keywords: deps.extractKeywords

});

}

);

npx pgflow@latest install

✨ No manual wiring

Skip the tedious pg_cron β†’ pgmq β†’ Edge Function setup. No manual queue wiring, no archive code, no state table management. pgflow handles all the plumbing - you just define your workflow. Learn more β†’

πŸ“¦ Runs entirely in Supabase

Everything in your existing Supabase project. No Bull, no Redis, no Temporal, no Railway. No external services, no vendor dashboards, no additional infrastructure to manage. Learn more β†’

πŸ‘οΈ Full observability in SQL

All workflow state lives in Postgres tables. Query execution history, inspect step outputs, and debug failures with standard SQL. No hidden state, no external dashboards. Learn more β†’

πŸ”„ Automatic retries

Built-in retry logic with exponential backoff for flaky AI APIs. When OpenAI times out or rate-limits, only that step retries - your workflow continues. Configure max attempts and delays per step, no retry code needed. Learn more β†’

⚑ Parallel array processing

Process arrays in parallel with independent retries per item. Batch 100 embeddings - if 3 fail, only those 3 retry while others continue. Perfect for AI workloads with unreliable APIs. Learn more β†’

πŸ”Œ Trigger from anywhere

Start workflows from database triggers, scheduled pg_cron jobs, browser clients, or RPC calls. Ultimate flexibility in how you start your workflows. Learn more β†’

What Developers Say

Section titled β€œWhat Developers Say”

"Got a flow up and running, this is bad ass. I love that everything just goes into Postgres."

β€” @cpursley (Discord)

"EdgeWorker is clearly a building block missing from supabase. I toyed with it locally for several days and it worked great."

β€” @nel (Discord)

"I'm really enjoying PQFlow β€” this is incredibly powerful! I'm implementing it in a flow with RAG."

β€” @Alipio Pereira (Discord)

"I was for a while now feeling like there had to be a better way of handling workflows on a supabase project without needing to add something like inngest or n8n to my tech stack. It clicked really hard when I found out about your project"

β€” @_perhaps (Discord)

"I was searching through the docs for something like this and I'm quite surprised it's not part of Supabase already. A queue feels kinda useless with serverless runners if I need to trigger them manually"

β€” @TapTap2121 (Reddit)

"Exactly what I was looking for without even knowing it :) well I knew I need smt like this, but I thought I'd had to build a very rudimentary version myself. Thank you for saving me tons of time"

β€” @CjHuber (Hacker News)

"I was trying to build my own after having a couple of pgmq queues... you found a problem and you are giving a very good solution"

β€” @enciso (Discord)

Ready to get started?

Section titled β€œReady to get started?”