Inngest mit Claude Code: Background Jobs und Workflows 2026

Inngest ist die moderne Alternative zu BullMQ und Celery — keine Queue-Infrastruktur, automatische Retries, Step-Functions und Observability. Claude Code generiert vollstaendige Inngest-Workflows fuer Next.js und Node.js.

Setup und erste Function

FunctionInngest in Next.js integrieren

# Prompt: "Erstelle Inngest-Setup fuer Background Email-Sending" npm install inngest // inngest/client.ts import { Inngest } from "inngest"; export const inngest = new Inngest({ id: "my-saas-app" }); // inngest/functions/send-welcome-email.ts export const sendWelcomeEmail = inngest.createFunction( { id: "send-welcome-email", retries: 3, // Automatische Retries bei Fehler }, { event: "user/signed-up" }, // Trigger-Event async ({ event, step }) => { // step.run = automatisch gecached und idempotent const user = await step.run("fetch-user", async () => { return db.user.findUnique({ where: { id: event.data.userId } }); }); await step.run("send-email", async () => { await resend.emails.send({ from: "noreply@myapp.com", to: user.email, subject: `Willkommen bei MyApp, ${user.name}!`, html: renderWelcomeEmail(user), }); }); return { userId: user.id, emailSent: true }; } ); // app/api/inngest/route.ts — Webhook-Endpoint import { serve } from "inngest/next"; export const { GET, POST, PUT } = serve({ client: inngest, functions: [sendWelcomeEmail, processPayment, dailyReport], });
Inngest-Vorteil: Keine Redis/Bull-Infrastruktur noetig — Inngest Cloud uebernimmt Queue, Retries und Observability. Lokal: npx inngest-cli dev startet einen lokalen Server.

Step-Functions: Komplexe Workflows

StepsMulti-Step Workflows mit Wait und Sleep

# Prompt: "Onboarding-Workflow: Email-Serie ueber 7 Tage" export const onboardingWorkflow = inngest.createFunction( { id: "user-onboarding-sequence" }, { event: "user/signed-up" }, async ({ event, step }) => { const { userId, email } = event.data; // Sofort: Welcome Email await step.run("welcome-email", () => sendEmail(email, "welcome")); // 1 Tag warten await step.sleep("wait-day-1", "1d"); // Nach 1 Tag: Check ob User sich eingeloggt hat const hasLoggedIn = await step.run("check-login", async () => { return db.user.findFirst({ where: { id: userId, lastLoginAt: { not: null } } }); }); if (!hasLoggedIn) { await step.run("nudge-email", () => sendEmail(email, "nudge")); } // Auf externen Event warten (max 7 Tage) const profileCompleted = await step.waitForEvent( "wait-profile", { event: "user/profile-completed", match: "data.userId", timeout: "7d" } ); if (profileCompleted) { await step.run("congrats-email", () => sendEmail(email, "profile-complete")); } else { await step.run("reminder-email", () => sendEmail(email, "complete-profile")); } } );

Scheduled Jobs und Events triggern

ScheduledCron-Jobs und Event-Trigger

# Scheduled Job: Taeglich um 9 Uhr UTC export const dailyDigest = inngest.createFunction( { id: "daily-digest" }, { cron: "0 9 * * *" }, // Standard Cron-Syntax async ({ step }) => { const users = await step.run("fetch-active-users", () => db.user.findMany({ where: { notificationsEnabled: true } }) ); // Fan-out: fuer jeden User parallel await step.run("send-digests", async () => { await Promise.all( users.map(user => inngest.send({ name: "digest/requested", data: { userId: user.id } })) ); }); } ); // Event von Route Handler triggern: export async function POST(req: Request) { const { email } = await req.json(); const user = await createUser(email); // Inngest-Event senden → loest alle Subscriber aus await inngest.send({ name: "user/signed-up", data: { userId: user.id, email: user.email }, }); return Response.json({ user }); }
Retry-Verhalten: Jeder step.run-Block wird einzeln gecached. Bei Retry startet Inngest beim fehlgeschlagenen Step — nicht von vorn. Datenbankschreibvorgaenge in frueheren Steps werden nicht wiederholt.

Background Jobs im Kurs

Im Claude Code Mastery Kurs: vollstaendiges Inngest-Modul mit Function-Design, Step-Patterns, Scheduled Jobs, Fan-out-Patterns und Observability — inkl. Migration von BullMQ zu Inngest.

14 Tage kostenlos testen →