Skip to content

Commit f6bda96

Browse files
authored
Update comparisons to be even more factual and well formatted (#120)
* docs: update comparison tables with new integration details and clarifications - Changed Supabase integration from 'Native' to 'Built-in' and added configuration notes - Clarified infrastructure requirements for DBOS and Inngest, emphasizing lightweight operation - Updated production readiness status to 'Production-ready' for all systems - Refined descriptions of workflow control, state storage, and event handling - Corrected formatting inconsistencies and improved readability of comparison tables * docs: update comparison table and usage guidance for DBOS and pgflow - Clarify Supabase integration details and environment compatibility - Highlight differences in workflow control and use cases - Add notes on production readiness and environment support - Improve clarity on when to choose each system and their features * docs: update comparison tables for pgflow, DBOS, Inngest, and Trigger.dev Refactor and enhance the feature comparison tables with clearer terminology, corrected descriptions, and consistent formatting. Added details on architecture models, infrastructure, workflow definitions, failure handling, and maturity levels for all systems. Improved clarity on integration and operational aspects to better reflect current capabilities and differences.
1 parent c52cd2f commit f6bda96

File tree

3 files changed

+44
-41
lines changed

3 files changed

+44
-41
lines changed

pkgs/website/src/content/docs/comparisons/dbos.mdx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,26 @@ sidebar:
77

88
## Features
99

10-
| Feature | pgflow | DBOS |
11-
|---------|--------|------|
12-
| **Core Philosophy** | 🔍 Database as orchestrator | 🔍 Application code with durability |
13-
| **SQL Transactions** | Any SQL client in steps | Via `@DBOS.transaction()` decorator |
10+
| Technical Criteria | pgflow | DBOS |
11+
|-----------------|--------|------|
12+
| **Architecture Model** | Database-centric orchestration | Application code with durability |
13+
| **Transaction Handling** | Any SQL client in steps | Via `@DBOS.transaction()` decorator |
1414
| **Workflow Definition** | TypeScript DSL with explicit dependencies | Function annotations with regular code flow |
15-
| **Supabase Integration** | Native | ⚠️ Possible but not optimized |
16-
| **Infrastructure Requirements** | Zero additional (just Supabase) | Basic recovery on single server, optional Conductor for distributed |
17-
| **Type Safety** | Complete end-to-end | Via standard TypeScript |
18-
| **Retry & Recovery** | Automatic per step | Automatic per workflow |
19-
| **Learning Curve** | New DSL to learn | New decorator pattern to learn |
20-
| **Production Readiness** | ⚠️ MVP/Early stage | Production-ready |
15+
| **Supabase Integration** | Built-in | Limited compatibility with Supabase Edge Functions¹ |
16+
| **Infrastructure Requirements** | Zero additional (just Supabase) | Lightweight library without additional infrastructure |
17+
| **Type System** | End-to-end type safety | Standard TypeScript typing |
18+
| **Failure Handling** | Automatic per-step retries | Configurable step retries and workflow-level recovery |
19+
| **Developer Experience** | DSL-based API | Decorator-based API |
20+
| **Maturity Level** | Active development | Production-ready |
21+
22+
<small>*¹ The DBOS documentation doesn't explicitly mention Deno compatibility. Analysis of the dbos-transact-ts package shows it relies on Node.js-specific APIs (primarily through the pg package) that would be challenging to run in Deno/Edge Functions environments.*</small>
2123

2224
Both systems provide reliable database operations with proper transaction handling and exactly-once semantics - the key difference is who controls the workflow: the database (pgflow) or your code (DBOS).
2325

2426
## When to Choose
2527

2628
### pgflow
27-
- **Building on Supabase** - Native integration with zero additional infrastructure
29+
- **Building on Supabase** - Built-in integration with zero additional infrastructure, fully compatible with Edge Functions
2830
- **Working with data pipelines & ETL** - Automatic parallel processing based on data dependencies
2931
- **Building graph-like workflows** - Multiple steps with complex dependency relationships
3032
- **Need explicit data flow** - Step dependencies are clearly visible in the workflow definition
@@ -34,8 +36,9 @@ Both systems provide reliable database operations with proper transaction handli
3436
- **Enhancing existing applications** - Add durability to your code with minimal changes
3537
- **Using standard coding patterns** - Keep working with familiar TypeScript control flow
3638
- **Need production-ready solution** - Benefit from a battle-tested implementation
37-
- **Working across environments** - Need to run in diverse PostgreSQL setups (not just Supabase)
39+
- **Working across Node.js environments** - Run in diverse PostgreSQL setups (Note: limited compatibility with Deno/Edge Functions)
3840
- **Want incremental adoption** - Add workflow capabilities to specific parts of your application
41+
- **Building Node.js applications** - Ideal for Node.js applications with standard Node.js PostgreSQL clients
3942

4043
## Code Examples
4144

@@ -94,4 +97,4 @@ Both systems provide reliable database operations in workflows:
9497

9598
The difference is architectural:
9699
- pgflow: PostgreSQL orchestrates when steps run based on dependencies
97-
- DBOS: Application code controls workflow sequence, with PostgreSQL tracking state
100+
- DBOS: Application code controls workflow sequence, with PostgreSQL tracking state

pkgs/website/src/content/docs/comparisons/inngest.mdx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@ sidebar:
77

88
## Features
99

10-
| Feature | pgflow | Inngest |
11-
|---------|--------|---------|
12-
| **Core Philosophy** | 🔍 Database as orchestrator | 🔍 Durable execution engine |
13-
| **Infrastructure** | Zero additional (just Supabase) | Hosted service or self-hosted |
10+
| Technical Criteria | pgflow | Inngest |
11+
|-----------------|--------|---------|
12+
| **Architecture Model** | Database-centric orchestration | Durable execution engine |
13+
| **Infrastructure Requirements** | Zero additional (just Supabase) | Hosted service or self-hosted |
1414
| **Workflow Definition** | TypeScript DSL with explicit dependencies | Step-based functions with checkpoints |
15-
| **Supabase Integration** | Native | ⚠️ Possible but not optimized |
16-
| **Type Safety** | Complete end-to-end | Via standard TypeScript |
17-
| **Retry & Recovery** | Automatic per step | Automatic per step |
18-
| **Execution Model** | Database-driven DAG | Linear step-by-step with state persistence |
19-
| **Step State** | Input/output data stored in database | Input/output memoized in execution service |
20-
| **Wait/Sleep** | Not directly supported (use pgcron) | Built-in sleep and waitForEvent capabilities |
21-
| **Production Readiness** | ⚠️ MVP/Early stage | Production-ready |
22-
| **Dashboard** | None (SQL queries for visibility) | Comprehensive web dashboard |
23-
| **Concurrency Control** | Simple per-flow limits | Advanced throttling and concurrency controls |
15+
| **Supabase Integration** | Built-in | Requires manual configuration |
16+
| **Type System** | End-to-end type safety | Standard TypeScript typing |
17+
| **Failure Handling** | Automatic per-step retries | Automatic per-step retries |
18+
| **Execution Structure** | Database-driven DAG | Linear step-by-step with state persistence |
19+
| **State Management** | Input/output data stored in database | Input/output memoized in execution service |
20+
| **Time-based Operations** | Via Supabase pg_cron | Built-in sleep and waitForEvent capabilities |
21+
| **Maturity Level** | Active development | Production-ready |
22+
| **Monitoring Tools** | SQL queries for visibility | Comprehensive web dashboard |
23+
| **Concurrency Management** | Simple per-flow limits | Advanced throttling and concurrency controls |
2424
| **Event System** | No built-in event system | Rich event-driven architecture |
2525

2626
Both systems provide reliable task execution with proper retries and error handling. The key difference is who controls the workflow orchestration: the database (pgflow) or a durable execution engine (Inngest).
@@ -122,4 +122,4 @@ The difference is architectural:
122122
- **Possible integration** - Can work with Supabase but not specifically designed for it
123123
- **Additional infrastructure** - Requires either hosted service or self-hosted instance
124124
- **Event bridging** - Requires connecting Supabase events to Inngest's event system
125-
- **Separate state storage** - Workflow state stored outside your Supabase database
125+
- **Separate state storage** - Workflow state stored outside your Supabase database

pkgs/website/src/content/docs/comparisons/trigger.mdx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,21 @@ sidebar:
77

88
## Features
99

10-
| Feature | pgflow | Trigger.dev |
11-
|---------|--------|-------------|
12-
| **Core Philosophy** | 🔍 Database as orchestrator | 🔍 Background job execution and orchestration |
13-
| **Infrastructure** | Zero additional (just Supabase) | Hosted service with dashboard or self-hosted |
10+
| Technical Criteria | pgflow | Trigger.dev |
11+
|-----------------|--------|-------------|
12+
| **Architecture Model** | Database-centric orchestration | Background job execution and orchestration |
13+
| **Infrastructure Requirements** | Zero additional (just Supabase) | Hosted service with dashboard or self-hosted |
1414
| **Workflow Definition** | TypeScript DSL with explicit dependencies | TypeScript functions with tasks and subtasks |
15-
| **Supabase Integration** | Native | ⚠️ Possible but not native |
16-
| **Type Safety** | Complete end-to-end | Via standard TypeScript |
17-
| **Retry & Recovery** | Automatic per step | Configurable per task |
18-
| **Lifecycle Hooks** | No explicit hooks | Rich hooks (init, cleanup, onSuccess, onFailure) |
19-
| **Learning Curve** | New DSL to learn | Function-based API with lifecycle hooks |
20-
| **Production Readiness** | ⚠️ MVP/Early stage | Production-ready |
21-
| **Dashboard** | None (SQL queries for visibility) | Comprehensive web dashboard |
22-
| **Execution Model** | Database-driven DAG | Task/subtask hierarchy |
23-
| **Concurrency Control** | Simple per-flow limits | Advanced queues and limits |
24-
| **Scheduler** | Built into Supabase (pg_cron) | Built-in cron scheduler |
15+
| **Supabase Integration** | Built-in | Requires manual configuration |
16+
| **Type System** | End-to-end type safety | Standard TypeScript typing |
17+
| **Failure Handling** | Automatic per-step retries | Configurable per-task retries |
18+
| **Event Handling** | No explicit hooks | Rich hooks (init, cleanup, onSuccess, onFailure) |
19+
| **Developer Experience** | DSL-based API | Function-based API with lifecycle hooks |
20+
| **Maturity Level** | Active development | Production-ready |
21+
| **Monitoring Tools** | SQL queries for visibility | Comprehensive web dashboard |
22+
| **Execution Structure** | Database-driven DAG | Task/subtask hierarchy |
23+
| **Concurrency Management** | Simple per-flow limits | Advanced queues and limits |
24+
| **Scheduling Capabilities** | Built into Supabase (pg_cron) | Built-in cron scheduler |
2525

2626
Both systems provide reliable task execution with proper retries and error handling. The key difference is who controls the workflow orchestration: the database (pgflow) or the task execution platform (Trigger.dev).
2727

0 commit comments

Comments
 (0)