Workflow
Durable workflows for your .NET services — a trigger, ordered steps and approval gates, where every step writes a record you can point to. Defined in code, tuned per tenant, run in your own AWS.
- notificationtaps a shoulderstep 1notification.send
- approvalwaits for a personstep 2approval.gate
- team_calendarupdates itstep 3UpdateCalendar()
Drawn like the records it keeps.
A trigger starts a run. Steps go in order, a gate waits for a person, and every step writes a record the run points to, so its history is the audit trail. The records below are examples; yours are whatever your service keeps.
An event, a schedule, Run now or a webhook starts a run. Each step writes a record — one your service owns, or a receipt for a call it made — and the run keeps a pointer to it.
- leave_requestA leave-request event arrives — its type isn't sick, so the When passes
- notificationStep 1 taps the manager on the shoulder
- approvalStep 2 parks the run until the manager decides
- team_calendarStep 3, an inline method, writes the calendar entry
—Pick a workflow to watch it run — pick it again to replay.
None of this is fixed. Code owns the structure; tenants own the parameters and toggles; a fork owns everything but its preset's pinned steps.
Every step leaves a record.
Start from anything
An event on your bus, a cron or rate schedule, a "Run now" someone dispatches, or a signed webhook, so Zapier, Make and n8n can start a run too.
[ScheduleTrigger("cron(…)")] Approval gates
A gate parks the run until a person approves or rejects, with a reminder if they don’t. By default a rejection stops the remaining steps.
[Gate(2, OnReject = …)] Every step writes a record
A step returns an Effect that points at what it wrote; a step that writes nothing fails the build. The run history is an audit trail, not a log.
Task<Effect> Conditions without code
A small When language (paths, comparisons, and / or / not) skips what doesn’t apply. No code to run, so tenants can edit it safely.
When = "trigger.days > 5" Code owns the structure
Ship workflows as [Workflow] classes. Tenants switch them on or off, set parameters and toggle optional steps, or fork a preset into their own.
StepPin.Optional Durable runs
State is saved at every step, so a run resumes after a crash and retries with backoff, on DynamoDB and SQS in your own account.
RunDriver.Queued Kanject.Program.cs, and exposes a typed API the rest of your service can use immediately.
Want in early?
Workflow is in private beta. Tell us what you'd build with it and we'll bring you in as places open — and you'll help shape it before general availability. No purchase, no sales call.