inngest-durable-functions

Build fault-tolerant Inngest functions with durable steps, retries, and event triggers.

Updated Feb 27, 2026
One-click install
npx skills add https://github.com/firstaxel/neon --skill inngest-durable-functions-firstaxel
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: inngest-durable-functions
Source: https://github.com/firstaxel/neon/tree/main/.agents/skills/inngest-durable-functions
Command: npx skills add https://github.com/firstaxel/neon --skill inngest-durable-functions-firstaxel

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires inngest, and includes references (resource) components.

What problem does it solve? Background jobs, webhook handlers, and cron tasks often fail mid-execution, drop events, or lose state when infrastructure crashes. This Skill guides you through building Inngest durable functions in TypeScript that survive process crashes, retry automatically, and resume exactly where they left off. ## Core Features & Use Cases - Durable Step Execution: Wrap side effects in memoized steps so completed work is never re-executed after a failure. - Triggers, Idempotency & Cancellation: Configure event, cron, and invoke triggers with deduplication keys, conditional filters, and cancellation rules. - Error Handling & Observability: Apply NonRetriableError, RetryAfterError, failure handlers, structured logging, checkpointing, and OpenTelemetry tracing. - Use Case: Imagine a payment webhook that must charge a customer, send a confirmation email, and update the database. This Skill shows how to structure each action as a durable step so a crash after charging never causes a double charge. ## Quick Start Ask the AI to create an Inngest durable function triggered by an event that processes an order with retryable steps and proper error handling.

Frequently Asked Questions about inngest-durable-functions

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a durable function with Inngest in TypeScript?▼

Use inngest.createFunction with a unique id, a triggers array (event, cron, or invoke), and an async handler receiving event and step. Wrap all side effects like API calls and database writes in step.run() so they are memoized and retried independently.

How do I retry failed steps in an Inngest function?▼

Each step retries automatically up to the configured retries count (default 4) with exponential backoff. Throw NonRetriableError for permanent failures like missing users, or RetryAfterError to respect API rate limits with custom retry timing.

What code should go inside step.run versus outside?▼

Put API calls, database operations, file I/O, and any non-deterministic logic inside step.run so results are memoized. Keep pure calculations, validation, and conditionals outside steps, since code outside steps re-executes on every replay.

Does Inngest support cron schedules and event triggers together?▼

Yes, a function's triggers array accepts up to 10 triggers mixing events and cron expressions, including timezone-aware cron like TZ=Europe/Paris. Event triggers also support conditional if expressions to filter which events start a run.

What are the limits of an Inngest function run?▼

Each function run allows a maximum of 1,000 steps, 4MB of returned data per step, and 32MB of combined run state. To exceed these, split work into smaller functions connected via step.invoke() or step.sendEvent().

Why do my Inngest logs appear duplicated?▼

Logging outside steps duplicates because function code re-executes during replay while steps are memoized. Move logger calls inside step.run blocks and pass a logger like Winston or ConsoleLogger to the Inngest client for consistent output.