inngest-steps

Implement durable workflow steps in TypeScript using Inngest step methods.

2|Updated Oct 16, 2021
One-click install
npx skills add https://github.com/pattobrien/dotfiles --skill inngest-steps-pattobrien
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: inngest-steps
Source: https://github.com/pattobrien/dotfiles/tree/main/.agents/skills/inngest-steps
Command: npx skills add https://github.com/pattobrien/dotfiles --skill inngest-steps-pattobrien

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires inngest.

What problem does it solve? Long-running workflows break when processes restart, and coordinating delays, approvals, and retries manually is error-prone. This Skill guides you through Inngest's step methods so each unit of work is independently retried, memoized, and survives crashes. ## Core Features & Use Cases - Durable execution with step.run: Wrap non-deterministic code (API calls, DB queries) in retriable steps that memoize results on retry. - Delays and event coordination: Use step.sleep, step.sleepUntil, step.waitForEvent, and step.waitForSignal for scheduled follow-ups, human approval gates, and webhook callbacks with timeouts. - Composition and parallelism: Fan out with step.sendEvent, call other functions with step.invoke, and run parallel work with Promise.all and chunked batch processing. - Use Case: Build a cart abandonment flow that sends a welcome email, sleeps 24 hours, waits for a purchase event with a 7-day timeout, and invokes a discount function if the user never checks out. ## Quick Start Use the inngest-steps skill to write an Inngest function that sends a welcome email, waits 24 hours, then waits for a purchase event with a timeout.

Frequently Asked Questions about inngest-steps

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

FAQPage Schema
How do I add a delay that survives restarts in Inngest?▼

Use step.sleep with a duration string like "24h" or "7d", or step.sleepUntil with a specific Date. The function pauses without consuming compute and resumes durably even if your process restarts.

How to wait for a webhook or approval event in an Inngest function?▼

Use step.waitForEvent with an event name, timeout, and optional match or CEL if expression. Always handle the null return, which means the timeout elapsed before the event arrived.

What is the difference between step.waitForEvent and step.waitForSignal?▼

step.waitForEvent matches events that multiple functions might consume, while step.waitForSignal provides exact 1:1 matching to a specific function run using a unique signal ID. Signals require an onConflict policy of replace or fail.

Why does my Inngest function log or run code multiple times?▼

Code placed outside steps re-executes every time a step runs because each step is a separate HTTP request. Move all non-deterministic logic such as API calls, database queries, and logging inside step.run blocks.

Does step.invoke still support string function IDs in Inngest v4?▼

No, string function IDs were removed in v4. Pass an imported function reference directly, or use referenceFunction with an appId and functionId for cross-app invocation.

What are the step limits for Inngest functions?▼

Each function run allows a maximum of 1,000 steps, 4MB per step output, and 32MB total per function run. Step IDs can be reused in loops since Inngest handles counters automatically.