Inngest 1.0.0

dotnet add package Inngest --version 1.0.0
                    
NuGet\Install-Package Inngest -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Inngest" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Inngest" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Inngest" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Inngest --version 1.0.0
                    
#r "nuget: Inngest, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Inngest@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Inngest&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Inngest&version=1.0.0
                    
Install as a Cake Tool

inngest-dotnet

Durable functions for .NET. Write background jobs and workflows as plain C# methods. Inngest runs every step once, retries only what fails and lets a run wait for days, so you ship reliable workflows without queues, state tables or cron glue.

inngest-dotnet is a community .NET SDK for Inngest, ported from the Inngest TypeScript SDK, inngest-js. It targets .NET 8 and .NET 10 and is Native AOT compatible, except Inngest.EntityFrameworkCore, which runs on Entity Framework Core, and the packages for tests and Aspire app hosts, which are never compiled ahead of time.

Packages

  • Inngest: functions, steps, triggers, flow control, middleware, the client that sends events, and request signing. A source generator that registers your function classes, which a project turns on, and an analyzer that finds the types a Native AOT app has not listed, come with it.
  • Inngest.AspNetCore: MapInngest, the endpoint Inngest calls in an ASP.NET Core app, and a health check for readiness probes.
  • Inngest.AwsLambda: InngestLambdaHandler, which serves the endpoint from an AWS Lambda function behind API Gateway or a function URL.
  • Inngest.AzureFunctions: ServeInngestAsync, the endpoint Inngest calls, served from an HTTP-triggered function of an Azure Functions app in the isolated worker model.
  • Inngest.Blazor: RealtimeView, a Blazor component that shows realtime messages on the server, in WebAssembly and in interactive Auto, and IRealtimeSource, which gives them as an async stream.
  • Inngest.Connect: AddConnect, a hosted worker that receives calls over an outbound WebSocket, with no endpoint to expose.
  • Inngest.Aspire.Hosting: an Aspire hosting integration that runs the Inngest dev server, or a self-hosted server, as a container of the AppHost, links its UI in the dashboard and gives projects the settings the SDK reads.
  • Inngest.Testing: an in-memory test host that runs your functions on the real execution engine.
  • Inngest.Testing.Containers: a Testcontainers module that runs the Inngest dev server or a self-hosted server in Docker for end-to-end tests.
  • Inngest.Testing.Containers.AspNetCore: a WebApplicationFactory that runs an ASP.NET Core app on a real port against that server (.NET 10).
  • Inngest.OpenTelemetry: traces and metrics for function calls and steps.
  • Inngest.Encryption: end-to-end encryption of event data, step results and function output, in the format of the TypeScript SDK's encryption middleware.
  • Inngest.Sentry: reports the errors of functions and steps to Sentry, tagged with the app, the function, the run and the event.
  • Inngest.Extensions.AI: makes the model calls and tool calls of a Microsoft.Extensions.AI IChatClient steps of the run, so a replay never calls the model or a tool twice.
  • Inngest.EntityFrameworkCore: a transactional outbox for Entity Framework Core: events saved in the same transaction as your data and sent to Inngest afterwards, under the same id on every attempt.
  • Inngest.Templates: dotnet new inngest-web and dotnet new inngest-worker, projects with a typed event, a function and dev mode in their Development settings.
  • dotnet-inngest: a .NET tool; dotnet inngest dev downloads the Inngest CLI, checks its SHA-256 and runs the dev server for the app in the current folder.
  • Inngest.SignalR: forwards Inngest realtime messages to the clients of a SignalR hub, with one subscription to Inngest shared by the clients of a channel.
  • Inngest.UserContext: carries the signed-in user who caused a run into it, protected with ASP.NET Core Data Protection, as ICurrentUser and ClaimsPrincipal.
  • Inngest.UserContext.AspNetCore: takes the user an event is sent for from HttpContext.User.
  • Inngest.Webhooks: verifies the signatures of webhooks from Stripe, GitHub, Shopify, Standard Webhooks senders such as Clerk and Resend, and any HMAC, and sends each as an event whose id is the delivery id. MapInngestWebhook is in Inngest.AspNetCore, which brings it in.

Install Inngest.AspNetCore for a web app, or Inngest.Connect for a worker. Both bring in Inngest:

dotnet add package Inngest.AspNetCore
dotnet add package Inngest.Connect

A durable function

Attributes give the function its id and the event that starts it. Each call to a step tool is a step. Inngest saves its result, so a retry runs only the step that failed.

using Inngest;

public sealed record OrderPaid(string OrderId, string CustomerId, decimal Amount);

[InngestFunction("checkout")]
[EventTrigger("shop/order.paid")]
public sealed class CheckoutFunction(IPayments pay, IMailer mail, IWarehouse warehouse)
    : InngestFunction<OrderPaid>
{
    public override async Task<object?> ExecuteAsync(
        FunctionContext<OrderPaid> context, CancellationToken cancellationToken)
    {
        var order = context.Event.Data;

        var charge = await context.Step.RunAsync("charge",
            ct => pay.ChargeAsync(order, ct));

        await context.Step.RunAsync("send-receipt",
            ct => mail.SendReceiptAsync(order, ct));

        await context.Step.SleepAsync("cooling-off",
            TimeSpan.FromMinutes(30));

        await context.Step.RunAsync("ship",
            ct => warehouse.ShipAsync(order, ct));

        return new { charge.Id };
    }
}

Register it and map the endpoint Inngest calls:

builder.Services
    .AddInngest(options => options.AppId = "shop")
    .AddFunction<CheckoutFunction>();

var app = builder.Build();
app.MapInngest("/api/inngest");
app.Run();

Start the app with INNGEST_DEV=1, run the Inngest dev server, send an event with IInngestClient, and watch the run at http://localhost:8288.

Features

  • Steps that run once, sleeps, waits for events, parallel steps with Task.WhenAll, and invoking other functions.
  • Fan-out over a list with MapAsync: a step per item, a limit on how many run at once, results in order, and child runs for lists beyond the 1,000 steps of a run.
  • Triggers from events, filtered events and cron schedules.
  • Flow control as attributes or options: concurrency, throttling, rate limits, debounce, batching, priority, idempotency, singletons, cancellation and timeouts.
  • Retries per step, NonRetriableException, RetryAfterException and failure handlers.
  • Middleware with observer and wrap hooks, resolved from DI.
  • Signed requests in cloud mode, with a fallback key for key rotation.
  • Serve from ASP.NET Core with MapInngest, from a worker with AddConnect, or from Azure Functions and AWS Lambda.
  • Realtime: steps publish updates and stream text such as a model's reply, IInngestRealtime receives them in .NET, and MapInngestRealtime relays them to browsers as server-sent events.
  • AI calls as steps: InferAsync has Inngest make the model call, and AIWrapAsync runs your own call as a step.
  • Durable endpoints: ASP.NET Core endpoints whose handlers run steps and answer the caller directly, with Inngest taking over when a step has to wait or fails. Beta in Inngest, so the API is marked experimental.

Documentation

License

Apache License 2.0. inngest-dotnet is a C# port of inngest-js, Copyright 2022 Inngest Inc., also licensed under the Apache License 2.0; the package includes the NOTICE file. This project is not affiliated with or endorsed by Inngest Inc. "Inngest" is a trademark of Inngest Inc.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (15)

Showing the top 5 NuGet packages that depend on Inngest:

Package Downloads
Inngest.AspNetCore

ASP.NET Core hosting for the Inngest .NET SDK: MapInngest serves sync, introspection and invocation, MapInngestWebhook receives webhooks from Stripe, GitHub, Shopify and others as events, and a health check tells readiness probes whether the app can work with Inngest.

Inngest.Connect

Connect for the Inngest .NET SDK: runs functions in a worker that holds an outbound WebSocket to Inngest, with no HTTP endpoint to expose.

Inngest.OpenTelemetry

OpenTelemetry for the Inngest .NET SDK: spans for function calls and executed steps, and metrics for runs, steps, retries and durations.

Inngest.Testing

Test host for the Inngest .NET SDK: runs functions in memory on the real execution engine, with mocked steps, retries and replays.

Inngest.EntityFrameworkCore

A transactional outbox for the Inngest .NET SDK on Entity Framework Core: events are saved in the same transaction as the app's data and sent to Inngest afterwards, each under an id of its own, which Inngest uses to drop a repeated send.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 123 10/31/2026
0.1.0 75 10/30/2026
0.1.0-preview.3 122 10/30/2026
0.1.0-preview.2 68 10/29/2026
0.1.0-preview.1 52 10/29/2026