Launch customizable workflows, in weeks

Build powerful customizable workflows directly in your product using Inngest as the reliable orchestration engine. Develop locally and ship to your existing production systems ready for any scale.

  • Integrate directly into your existing code
  • Powerful, customizable, and observable
  • Operate at scale
Case study

Florian Works: zero to building a mission-critical workflow engine for fire departments

Florian Works develops custom-built software products for fire departments, incorporating custom workflows built directly on top of Inngest to ship reliable products faster and easier than ever before.

Utilizing Inngest's core workflow engine and primitives such as step.waitForEvent, FlorianWorks ships scheduling, roster management, a rules engine, and finance management without spending effort developing custom distributed systems primitives or reliability concerns.

  • Development on core business logic only
  • Auditable, logged, secure workflows
  • Zero additional infrastructure required

Inngest is a great platform to build reliability into your long running tasks without drowning in complexity.

Image of Ozan Şener
Ozan Şener
Principal Engineer

Fully customizable, durable workflows

You bring the application code, we bring the engine. Allow your own users to create workflows composed of reusable logic that you define. Our engine runs workflows as steps, taking care of scale, orchestration, idempotency, retries, and observability for you.

Build simple linear workflows or complex DAG-based workflows with parallelism and fan-in out of the box. Leverage our step primitives for human-in-the-loop or paused functions which automatically resume based off of conditions being met.

Concurrency, rate limiting and debounce controls built in, with custom keys or controlling your own user's limits
Reliably run any code in any step, with retries and error handling automatically managed
Auditable, observable, and scalable handling tens of thousands of requests per second with real time metrics
workflow.ts
1import { runAction } from "@/actions";
2import { inngest } from "@/inngest";
3
4const fnOptions = {
5  id: "user-workflows",
6  // limit to 10 workflows for each tenant in your system.
7  concurrency: {
8    limit: 10,
9    key: "event.data.account_id",
10  },
11};
12
13const fnListener = { event: "api/workflow.invoked" };
14
15// Create a durable function which runs user defined workflows any time
16// the "api/workflow.invoked" event is received.  This loads the specified
17// user's workflow from your own system, and executes each step of the flow.
18export const userWorkflow = inngest.createFunction(
19  fnOptions,
20  fnListener,
21  async ({ event, step }) => {
22    const workflow = await step.run("load-workflow", async () => {
23      return db.workflows.find({ where: { id: event.data.workflowID } });
24    });
25
26    // Iterate over a simple stack, or create a graph and iteerate over a full
27    // blown DAG whioch a user can define.
28    for (let action of workflow) {
29      const result = await step.run("run-action", async () => {
30        return runAction(event, action);
31      });
32    }
33  }
34);