
Inngest Setup
Add Inngest durable execution to a TypeScript app so webhooks, background jobs, schedules, and multi-step workflows survive crashes and retries.
Overview
inngest-setup is an agent skill for the Build phase that installs and configures the Inngest TypeScript SDK, client, serve endpoints, and local dev server for durable workflows.
Install
npx skills add https://github.com/inngest/inngest-skills --skill inngest-setupWhat is this skill?
- End-to-end TypeScript setup: install `inngest`, shared client with hyphenated app id, and v4 Cloud vs local dev mode not
- Serve endpoint patterns for Next.js, Express, Hono, and Fastify plus connect-as-worker mode
- Prerequisites spelled out: Node.js 18+ (22.4+ recommended for WebSockets), TypeScript, npm/yarn/pnpm/bun
- Points Python and Go builders to official Inngest llms.txt while keeping steps TS-focused
- Covers environment variables and local Inngest dev server for retry-safe development
- Supports four package managers: npm, yarn, pnpm, and bun
- Documents four serve integration targets: Next.js, Express, Hono, and Fastify
Adoption & trust: 2.7k installs on skills.sh; 23 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need retry-safe webhooks and background work in TypeScript but lack a correct Inngest client, serve route, and local dev setup.
Who is it for?
TypeScript solo builders adding Inngest to Next.js, Express, Hono, or Fastify before writing durable functions or event handlers.
Skip if: Greenfield Python or Go projects expecting language-specific install steps in this skill, or teams that only need one-off cron without durable orchestration.
When should I use this skill?
Use when adding durable execution to a TypeScript project—building retry-safe webhook handlers, background jobs that survive crashes, scheduled tasks, or long-running workflows that outlive a single request.
What do I get? / Deliverables
You get a working Inngest client module, registered serve or worker connection, and env-aware dev workflow ready for function authoring in follow-on Inngest skills.
- Shared `inngest` client module with application id
- Framework-specific serve or connect-as-worker endpoint
- Documented environment variables and local dev workflow
Recommended Skills
Journey fit
Installing the SDK, client, serve endpoint, and dev server is core backend wiring during the Build phase before you ship traffic-heavy workflows. Backend is the shelf for async job orchestration, Inngest client bootstrap, and framework-specific serve handlers (Next.js, Express, Hono, Fastify).
How it compares
Use instead of hand-rolled job queues when you want managed retries, observability, and step functions without building worker infrastructure yourself.
Common Questions / FAQ
Who is inngest-setup for?
Indie and solo developers on TypeScript stacks who want Inngest-backed durable execution for webhooks, jobs, and workflows inside their agent-assisted codebase.
When should I use inngest-setup?
Use it during Build (backend) when adding Inngest for the first time, and again in Operate (infra) when fixing serve URL, env keys, or dev-server connectivity before scaling traffic.
Is inngest-setup safe to install?
It documents SDK setup and local/cloud modes; check the Security Audits panel on this page and keep Inngest signing keys out of committed env files.
SKILL.md
READMESKILL.md - Inngest Setup
# Inngest Setup This skill sets up Inngest in a TypeScript project from scratch, covering installation, client configuration, connection modes, and local development. > **These skills are focused on TypeScript.** For Python or Go, refer to the [Inngest documentation](https://www.inngest.com/llms.txt) for language-specific guidance. Core concepts apply across all languages. ## Prerequisites - Node.js 18+ (Node.js 22.4+ r ecommended for WebSocket support) - TypeScript project - Package manager (npm, yarn, pnpm, or bun) ## Step 1: Install the Inngest SDK Install the `inngest` npm package in your project: ```bash npm install inngest # or yarn add inngest # or pnpm add inngest # or bun add inngest ``` ## Step 2: Create an Inngest Client Create a shared client file that you'll import throughout your codebase: ```typescript // src/inngest/client.ts import { Inngest } from "inngest"; export const inngest = new Inngest({ id: "my-app" // Unique identifier for your application (hyphenated slug) }); // IMPORTANT: v4 defaults to Cloud mode. For local dev, set INNGEST_DEV=1 env var. // Without it, your serve endpoint will return 500 ("In cloud mode but no signing key"). // In production, set INNGEST_SIGNING_KEY (required for Cloud mode). ``` ### Key Configuration Options - **`id`** (required): Unique identifier for your app. Use a hyphenated slug like `"my-app"` or `"user-service"` - **`eventKey`**: Event key for sending events (prefer `INNGEST_EVENT_KEY` env var) - **`env`**: Environment name for Branch Environments - **`isDev`**: Force Dev mode (`true`) or Cloud mode (`false`). **v4 defaults to Cloud mode**, so set `INNGEST_DEV=1` env var for local development. **Never hardcode `isDev: true` in source code** — it will silently break in production. Always use the env var. - **`signingKey`**: Signing key for production (prefer `INNGEST_SIGNING_KEY` env var). Moved from `serve()` to client in v4 - **`signingKeyFallback`**: Fallback signing key for key rotation (prefer `INNGEST_SIGNING_KEY_FALLBACK` env var) - **`baseUrl`**: Custom Inngest API base URL (prefer `INNGEST_BASE_URL` env var) - **`logger`**: Custom logger instance (e.g. winston, pino) — enables `logger` in function context - **`middleware`**: Array of middleware (see **inngest-middleware** skill) ### Typed Events with eventType() ```typescript import { Inngest, eventType } from "inngest"; import { z } from "zod"; const signupCompleted = eventType("user/signup.completed", { schema: z.object({ userId: z.string(), email: z.string(), plan: z.enum(["free", "pro"]) }) }); const orderPlaced = eventType("order/placed", { schema: z.object({ orderId: z.string(), amount: z.number() }) }); export const inngest = new Inngest({ id: "my-app" }); // Use event types as triggers for full type safety: inngest.createFunction( { id: "handle-signup", triggers: [signupCompleted] }, async ({ event }) => { event.data.userId; /* typed as string */ } ); // Use event types when sending events: await inngest.send( signupCompleted.create({ userId: "user_123", email: "user@example.com", plan: "pro" }) ); ``` ### Environment Variables Setup Set these environment variables in your `.env` file or deployment environment: ```env # Required for production INNGEST_EVENT_KEY=your-event-key-here INNGEST_SIGNING_KEY=your-signing-key-here # Force dev mode during local development INNGEST_DEV=1 # Optional - custom dev server URL (default: http://localhost:8288) INNGEST_BASE_URL=http://localhost:8288 ``` **⚠️ Common Gotcha**: N