Home
DESIGN.mdStar on GitHub

Unbreakable
agents.

Durable execution for workflows & AI. Write ordinary functions, split them into steps, and ship reliable background jobs, workflows and agents — with automatic retries and step-level observability.

No workers No queues No refactoring
Brand · flame
Step-state semantics (run dashboard)
Surfaces · dark-first
Text
Whyte Inktrap / 400
Display · 64px
Invisible infra.
Whyte Inktrap
Whyte / 400
Heading · 22px
Steps that never lose their place
Whyte
CircularXX / 500
UI · body · 14.5px
Automatic retries, flow control, and observability
CircularXX
CircularXXMono
Code · 12.5px
step.run("create-stripe-customer")
CircularXXMono
CircularXXMono
Marquee · 11px
▪ No workers · No queues · No refactoring
uppercase
onboard-user.ts
Idle
import { Inngest } from "inngest";

const inngest = new Inngest({ id: "acme-app" });

export default inngest.createFunction(
  { id: "onboard-user", retries: 4 },
  { event: "user/signed.up" },
  async ({ event, step }) => {
    // each step is checkpointed & retried on its own
    const customer = await step.run("create-stripe-customer", () =>
      stripe.customers.create({ email: event.data.email })
    );

    const profile = await step.run("enrich-profile", () =>
      clearbit.enrich(event.data.email)
    );

    await step.sleep("await-onboarding", "1h");

    await step.waitForEvent("await-payment", {
      event: "stripe/payment.succeeded",
      timeout: "24h", match: "data.email",
    });

    await step.run("send-welcome-email", () =>
      resend.emails.send({ to: event.data.email })
    );
  }
);
Triggered by
user/signed.up· evt_01H8ZK
create-stripe-customerstep.run2 attempts
enrich-profilestep.run2 attempts
await-onboardingstep.sleep2 attempts
await-paymentstep.waitForEvent2 attempts
send-welcome-emailstep.run2 attempts
✓ Completed 5 steps · 1 retry · 3.4s
Press Run function — enrich-profile fails once (429) and Inngest retries it; sleep and waitForEvent resume durably. Deterministic.
Buttons
Step-state pills
Queued Running Completed Failed Sleeping
Event input
Radius
14 window
12 card
9 step
8 btn
2 mark
Do
Anchor on a dark, near-black canvas with one hot flame (#F75536) accent — bold and editorial.
Model work as steps on a timeline — a run is an ordered trace, not one opaque spinner.
Set display type oversized in CircularXX; lean into the blunt voice (Unbreakable agents.).
Keep green / amber / blue strictly as step-state signals — functional, never brand chrome.
Show durability out loud — a failed attempt that retries and succeeds, a sleep that resumes.
Don't
Make green (the completed-step color) the brand accent — the brand is flame on black.
Reduce a run to one status — the point is per-step observability.
Use a light/pastel canvas as the primary identity — Inngest is dark and confident.
Set body or code in the display weight, or hide retries — durability is the story.
Invent status colors — reuse the run-dashboard green / amber / blue / red.