Skip to content
Back to skills

Inngest

ASecurity

> Durable workflow engine — event-driven background jobs, retries, scheduling, and step functions.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 26, 2026
businesstypescriptnextjstestingapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 26, 2026

npx -y skills add nhan03bit/ultrathink --skill inngest --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Inngest?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Inngest
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nhan03bit-inngest/badge)](https://www.skillsdirectory.com/skills/nhan03bit-inngest)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Inngest

> Durable workflow engine — event-driven background jobs, retries, scheduling, and step functions.

## When to Use
- Background jobs that must survive failures (email sequences, data pipelines)
- Event-driven workflows triggered by app events (user.signup, order.created)
- Scheduled/cron tasks without separate infrastructure
- Multi-step processes needing automatic retries per step
- Fan-out patterns (one event triggers many functions)

## Core Patterns

### Basic Function
```typescript
import { Inngest } from "inngest";

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

export const syncUser = inngest.createFunction(
  { id: "sync-user", retries: 3 },
  { event: "user/created" },
  async ({ event, step }) => {
    const profile = await step.run("fetch-profile", () =>
      fetchProfile(event.data.userId)
    );
    await step.run("sync-to-crm", () => syncToCRM(profile));
    return { synced: true };
  }
);
```

### Step Primitives
```typescript
inngest.createFunction(
  { id: "onboarding-flow" },
  { event: "user/signup" },
  async ({ event, step }) => {
    await step.run("send-welcome", () => sendEmail(event.data.email));
    await step.sleep("wait-1d", "1 day");
    const opened = await step.waitForEvent("wait-for-open", {
      event: "email/opened",
      match: "data.userId",
      timeout: "3 days",
    });
    if (!opened) await step.run("send-nudge", () => sendNudge(event.data.email));
  }
);
```

### Cron & Throttling
```typescript
// Cron schedule
inngest.createFunction(
  { id: "daily-report" },
  { cron: "0 9 * * *" },
  async ({ step }) => { await step.run("generate", () => buildReport()); }
);

// Throttle: max 10 per user per hour
inngest.createFunction(
  { id: "send-notification", throttle: { key: "event.data.userId", count: 10, period: "1h" } },
  { event: "notify/send" },
  async ({ event }) => { /* ... */ }
);
```

### Framework Serve (Next.js)
```typescript
import { serve } from "inngest/next";
import { inngest } from "@/lib/inngest";
import { syncUser, onboardingFlow } from "@/inngest/functions";

export const { GET, POST, PUT } = serve({ client: inngest, functions: [syncUser, onboardingFlow] });
// Mount at app/api/inngest/route.ts
```

## Key Features
- **Steps**: `step.run()` (durable exec), `step.sleep()`, `step.sleepUntil()`, `step.waitForEvent()`
- **Retries**: Per-function or per-step, exponential backoff by default
- **Fan-out**: Multiple functions trigger on the same event independently
- **Concurrency**: `{ concurrency: { limit: 5, key: "event.data.tenantId" } }`
- **Cancellation**: `{ cancelOn: [{ event: "user/deleted", match: "data.userId" }] }`
- **Batching**: `{ batchEvents: { maxSize: 100, timeout: "5s" } }` for bulk processing
- **Sending events**: `await inngest.send({ name: "user/created", data: { userId } })`
- **Dev server**: `npx inngest-cli@latest dev` for local testing with UI at localhost:8288

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.