Inngest 1.0.0
dotnet add package Inngest --version 1.0.0
NuGet\Install-Package Inngest -Version 1.0.0
<PackageReference Include="Inngest" Version="1.0.0" />
<PackageVersion Include="Inngest" Version="1.0.0" />
<PackageReference Include="Inngest" />
paket add Inngest --version 1.0.0
#r "nuget: Inngest, 1.0.0"
#:package Inngest@1.0.0
#addin nuget:?package=Inngest&version=1.0.0
#tool nuget:?package=Inngest&version=1.0.0
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, andIRealtimeSource, 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: aWebApplicationFactorythat 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.AIIChatClientsteps 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-webanddotnet new inngest-worker, projects with a typed event, a function and dev mode in their Development settings.dotnet-inngest: a .NET tool;dotnet inngest devdownloads 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, asICurrentUserandClaimsPrincipal.Inngest.UserContext.AspNetCore: takes the user an event is sent for fromHttpContext.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.MapInngestWebhookis inInngest.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,RetryAfterExceptionand 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 withAddConnect, or from Azure Functions and AWS Lambda. - Realtime: steps publish updates and stream text such as a model's reply,
IInngestRealtimereceives them in .NET, andMapInngestRealtimerelays them to browsers as server-sent events. - AI calls as steps:
InferAsynchas Inngest make the model call, andAIWrapAsyncruns 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 | Versions 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. |
-
net10.0
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.14)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.14)
- Microsoft.Extensions.Http (>= 10.0.14)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.14)
- Microsoft.Extensions.Options (>= 10.0.14)
-
net8.0
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.14)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.14)
- Microsoft.Extensions.Http (>= 10.0.14)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.14)
- Microsoft.Extensions.Options (>= 10.0.14)
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 |