Skip to content

Instantly share code, notes, and snippets.

@cristianodabc
Created May 28, 2026 22:59
Show Gist options
  • Select an option

  • Save cristianodabc/de06aad4ede2fc12a8b344fb1563019d to your computer and use it in GitHub Desktop.

Select an option

Save cristianodabc/de06aad4ede2fc12a8b344fb1563019d to your computer and use it in GitHub Desktop.

Bottom Line

Against the three libs in post 59, Squid Mesh is closer to a Phoenix/OTP business workflow runtime than to a minimal durable-function engine.

Absurd and TensorZero durable are mostly “write normal code, checkpoint steps into Postgres.” Estuary Flow automations is closer to a persistent control-plane task actor system. Squid Mesh is more explicit: workflow DSL, durable run facts, step state, transitions, approvals, recovery policy, inspection, replay, and host-app integration.

Comparison

Area Squid Mesh Absurd TensorZero durable Estuary Flow automations
Primary shape Elixir workflow DSL inside Phoenix/OTP apps Postgres-backed durable execution Rust SDK for durable tasks in Postgres Rust task framework for Flow control-plane jobs
Durable unit Workflow run, step, attempt, audit, dispatch facts Task with checkpointed steps Task trait with checkpointed steps Persistent task with state, inbox, heartbeat
Execution style Host workers call SquidMesh.execute_next/1 Pull workers read from Postgres Workers process tasks concurrently Server polls ready DB tasks
Waiting :pause, approvals, waits, deferred continuation sleep / suspend / await event sleep / await event / cron sleep / suspend until messages
HITL First-class approve/reject/unblock APIs and audit Generic events Generic events Generic messages
Recovery retries, replay, compensation/undo, irreversible markers task retry + step checkpoints retry + checkpoint + heartbeat heartbeat timeout + retry polling
Dynamic work child runs, static graph dependencies spawn tasks, await spawned task spawn/join subtasks spawn child tasks, message parent
Operator surface inspect_run, graph inspection, explain_run, SquidSonar companion absurdctl, Habitat UI DB-stored errors; less UI-oriented in README internal control-plane framework
Portability Elixir-first, default Ecto/Jido storage, Postgres production path Postgres-first Postgres-first Rust Estuary/Flow-internal Postgres task framework

Where Squid Mesh Looks Stronger

  1. Business workflow semantics. Squid Mesh has named workflow modules, triggers, payload contracts, transitions, approval gates, cancellation, replay policy, and explainable run state. Absurd and durable are lower-level durable execution systems.

  2. Human workflow support. Squid Mesh’s approve/reject/unblock APIs are more domain-facing than generic “await event” primitives.

  3. Recovery vocabulary. Compensation, undo routing, irreversible markers, and replay blocking give Squid Mesh a clearer operational model for side effects.

  4. Elixir/Phoenix embedding. It fits apps that already want Ecto, supervision, dashboard/CLI inspection, and domain workflows in Elixir modules.

Where The Other Libs Are Ahead Or Cleaner

  1. Durable function ergonomics. Absurd and TensorZero durable make checkpointing feel like normal code: ctx.step, ctx.await_event, ctx.spawn, ctx.join. Squid Mesh is more explicit, but heavier.

  2. Generic external events. Absurd and durable treat event waiting as a core primitive. Squid Mesh has HITL and pause semantics, but a stronger general signal/event wait API would help.

  3. Dynamic fan-out. TensorZero durable has direct spawn/join subtasks. Estuary’s framework also has child task spawning and message passing. Squid Mesh child runs exist, but richer dynamic graph expansion is still the area to sharpen.

  4. Heartbeat/lease clarity. TensorZero exposes heartbeat support directly. Estuary tasks have heartbeat-based liveness. Squid Mesh has the durable dispatch/lease boundary and Bedrock direction, but the “long-running claimed step” story should remain a key maturity bar.

My Read

Squid Mesh should not try to become Absurd-in-Elixir. The more defensible lane is:

durable, inspectable business workflows for Phoenix/OTP apps, with durable-function-style primitives where they genuinely improve authoring.

The specific ideas worth borrowing are:

  1. await_event as a first-class durable step primitive, separate from human approval.
  2. spawn/join ergonomics for child workflow runs.
  3. Explicit heartbeat/lease behavior for long-running claimed work.
  4. Strong docs around “code outside durable steps may rerun” vs Squid Mesh’s stricter step boundary.

Sources

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment