Workflows that resume from the last completed step

Build multi-step workflows that Conjoin resumes at the step where they fail, since it saves the result of every step that your HTTP endpoint completes. Conjoin also provides built-in steps for branching, approvals, delays, and the other Relay modules.

Multi-step workflows that resume after a crash, a redeploy, or a timeout

Each time Conjoin calls your endpoint, it sends the results of the earlier steps and receives JSON that describes the next step in reply. Conjoin saves the state of the run after every step, so when a crash, a redeploy, or a timeout interrupts a step, Conjoin resumes the workflow from the last completed step. Because the exchange is plain HTTP and JSON, you can write the endpoint in any language, with no Conjoin SDK on the server.

Steps, gates, and retries for durable workflows

Built-in step types

Conjoin provides run, delay, request, invoke, gate, fork, race, branch, stream, and retry steps for every pipeline, along with Relay-native steps for Queues, Events, Broadcast, MemoryStore, and Scheduler.

Single-endpoint execution

Your endpoint receives the accumulated results of the earlier steps and returns JSON that describes the next step. Any server that accepts an HTTP request can host that endpoint, so you install no SDK and adopt no new runtime.

Relay-native steps

In a Relay-native step, Conjoin enqueues a task, publishes an event, broadcasts a message, reads or writes a MemoryStore key, or creates a schedule on behalf of your workflow, so your endpoint makes no call to those services.

Approval gates

At a gate step, Conjoin pauses the run until a person approves or rejects the step through the API. If the reviewer makes no decision before the timeout that you set on the gate, Conjoin approves or rejects the step according to the timeout action that you choose.

Parallel execution

In a fork step, Conjoin executes branches in parallel and continues once every branch finishes, while in a race step it continues with the first branch to complete.

Retry policies

Set fixed, exponential, or linear backoff for a whole pipeline or for one step. Conjoin retries a failed step under that policy and marks the run as failed only after the last retry.

< 5s
Step dispatch

Time from queueing a step to calling your endpoint

300s
Default step timeout

You can change it for each pipeline or each step

Every step
Step output saved

Conjoin saves each step's result with the run

Build faster with solutions designed for real-world needs

Resume multi-step work from the last successful step

Conjoin stores the output of each step as soon as the step completes. When a step fails partway through a run, Conjoin resumes the run at that step and passes your endpoint the results of every step before it.

Impact

The sample starts one onboarding run for Patternforge Systems under an idempotency key tied to the account, so a retried trigger call returns the existing run. Conjoin records the progress of every step from then on, which means that you write no state machine for onboarding.

Prompt for a coding agent: Run onboarding as steps that resume after a failure, and start it once per account.

Conjoin IDE

Select a file to view its contents

Add human approval as a single pipeline step

At a gate step, Conjoin holds the run until someone calls the approve or reject endpoint. When you set a timeout on the gate, Conjoin auto-approves or auto-rejects the step once that timeout passes with no decision from a reviewer.

Impact

The sample records the approval from Daichi Mori for the compliance sign-off step at Halestone Capital, after which Conjoin moves the trade run on to its next step. Conjoin tracks the wait, the timeout, and the approval record for the gate, so your code makes this one API call for the approval.

Prompt for a coding agent: Record the compliance sign-off, and move the trade on to its next step.

Conjoin IDE

Select a file to view its contents

Coordinate queues, events, and broadcasts as pipeline steps

Give each Relay-native step its target, such as a queue ID or a channel ID, so that Conjoin can perform the action at that point in the sequence.

Impact

In the sample, Conjoin enqueues the packing task, broadcasts the order to the orders channel, and publishes the completion event after the charge step. The Wintermill Bakery code therefore uses Queues, Broadcast, and Events only through this one pipeline definition.

Prompt for a coding agent: After the charge, queue the packing task, broadcast the order, and publish a completion event.

Conjoin IDE

Select a file to view its contents

Workflows that last for days on serverless functions

Conjoin calls your function once per step, so each invocation lasts only as long as that one step. At a delay step, Conjoin waits for the hours or days that you set and then calls your function for the next step.

Impact

The sample allows the Cliffmere civics course run for Kofi Mensah up to 14 days from trigger to finish, while your platform's timeout applies to one step at a time.

Prompt for a coding agent: Give each course run up to 14 days to finish on our serverless functions.

Conjoin IDE

Select a file to view its contents

Build your next app on Conjoin

Conjoin will open with a free Build tier, while the pricing page already lists the launch prices for Pro and Business. If you tell us what you're building, we'll talk you through early access.