Inngest is a free, open source orchestration & scheduling project written in Go and released under a custom open-source licence. It has 5,841 GitHub stars, 357 forks and 234 open issues, and was last pushed 8 hours ago. On this registry it ranks #29 of 64 tracked projects in Orchestration & Scheduling, with 5 head-to-head comparisons available. It gained 13 stars over the last 6 tracked days.

What is Inngest?

Inngest is an open-source workflow orchestration platform that lets developers write durable, event-driven step functions in their existing language SDKs and run them on serverless, long-running servers, or the edge.

What it is

Inngest is a workflow orchestration platform, listed in this registry under Infrastructure & Operations / Orchestration & Scheduling and written in Go. Its core unit is the Inngest Function, which is composed of three parts: triggers, which are events, Cron schedules, or webhook events that start the function; flow control, which configures how function runs are enqueued and executed, including concurrency, throttling, debouncing, rate limiting, and prioritization; and steps, the fundamental building blocks that turn a function into a reliable workflow capable of running for months and recovering from failures. Inngest invokes the developer's functions securely via HTTPS whenever triggering events are received.

The concrete problem it solves is the infrastructure that normally has to be assembled around background logic. As the README puts it, Inngest's durable functions replace queues, state management, and scheduling, so that a developer can write reliable step functions without touching infrastructure. Rather than hand-rolling retry logic, state persistence, and a scheduler, a developer wraps business logic in step.run(...) calls that are retried automatically on failure. A README example defines a function with the id import-product-images, constrained by concurrency: { key: "event.data.userId", limit: 10 } and triggered by the shop/product.imported event, which performs a copy-images-to-s3 step and then a resize-images step; the same event is emitted elsewhere in application code through await inngest.send({ name: "shop/product.imported", data: { ... } }).

Key capabilities

  • Durable step functions built on step.run(...), where each wrapped section of code is retried automatically on failure.
  • Multiple trigger types: events, Cron schedules, and webhook events.
  • Flow control configuration covering concurrency, throttling, debouncing, rate limiting, and prioritization, including per-key limits such as concurrency: { key: "event.data.userId", limit: 10 }.
  • Language SDKs with published quick start guides for Next.js, Node.js, and Python.
  • Inngest Dev Server for local development with production parity, started with the CLI command npx inngest-cli@latest dev and exposing a dashboard at http://localhost:8288.
  • Deployment to the user's own infrastructure, followed by syncing functions to either the hosted Inngest Platform or a self-hosted Inngest server.
  • HTTPS invocation of functions by Inngest whenever triggering events are received.

Who uses it and how

  • Teams building background jobs and complex multi-step workflows, including sequences that must run for months and recover from failures.
  • Applications split across serverless functions, long-running servers, or the edge, since the same functions can be deployed to any of these targets.
  • Systems that need per-entity concurrency limits, as shown by the event.data.userId keyed limit of 10 in the README example.
  • Developers iterating locally against the Dev Server and its dashboard before syncing functions to production.
  • Operators who prefer to keep execution on their own infrastructure while choosing between the hosted Inngest Platform and a self-hosted Inngest server for orchestration.

Getting started

Run the Inngest Dev Server with the CLI command npx inngest-cli@latest dev, then open the dashboard at http://localhost:8288. The README points to dedicated quick start guides for Next.js, Node.js, and Python.

How it compares

No list of paid products that Inngest replaces is provided in the available facts, and no comparable tools are named either. On the facts given, it stands alone in this registry.

When to use it — and when not to

A self-hoster must operate an Inngest server of their own rather than relying on the hosted Inngest Platform, so the operational burden of the orchestration layer does not disappear for that deployment path. Teams that want no infrastructure responsibilities at all should use the hosted platform instead of the self-hosted route. The repository metadata is a caution rather than a disqualifier: the licence field reads NOASSERTION, meaning no standard SPDX identifier is recorded, and the README excerpt supplied here is truncated partway through the SDK list, so the documentation in this registry is thinner than the linked docs site.

project readme (upstream, from github) — read inline

Inngest

Latest release Test Status Discord Twitter Follow

Inngest's durable functions replace queues, state management, and scheduling to enable any developer to write reliable step functions faster without touching infrastructure.

  1. Write durable functions using any of our language SDKs
  2. Run the Inngest Dev Server for a complete local development experience, with production parity.
  3. Deploy your functions to your own infrastructure
  4. Sync your application's functions with the Inngest Platform or a self-hosted Inngest server.
  5. Inngest invokes your functions securely via HTTPS whenever triggering events are received.

An example durable function

Inngest Functions enable developers to run reliable background logic, from background jobs to complex workflows. An Inngest Function is composed of three key parts that provide robust support for retrying, scheduling, and coordinating complex sequences of operations:

  • Triggers - Events, Cron schedules or webhook events that trigger the function.
  • Flow Control - Configure how the function runs are enqueued and executed including concurrency, throttling, debouncing, rate limiting, and prioritization.
  • Steps - Steps are fundamental building blocks of Inngest, turning your Inngest Functions into reliable workflows that can run for months and recover from failures.

Here is an example function that limits concurrency for each unique user id and performs two steps that will be retried on error:

export default inngest.createFunction(
  {
    id: "import-product-images",
    concurrency: {
      key: "event.data.userId",
      limit: 10
    }
  },
  { event: "shop/product.imported" },
  async ({ event, step }) => {
    // Here goes the business logic
    // By wrapping code in steps, each will be retried automatically on failure
    const s3Urls = await step.run("copy-images-to-s3", async () => {
      return copyAllImagesToS3(event.data.imageURLs);
    });
    // You can include numerous steps in your function
    await step.run("resize-images", async () => {
      await resizer.bulk({ urls: s3Urls, quality: 0.9, maxWidth: 1024 });
    })
  };
);

// Elsewhere in your code (e.g. in your API endpoint):
await inngest.send({
  name: "shop/product.imported",
  data: {
    userId: "01J8G44701QYGE0DH65PZM8DPM",
    imageURLs: [
      "https://useruploads.acme.com/q2345678/1094.jpg",
      "https://useruploads.acme.com/q2345678/1095.jpg"
    ],
  },
});

Learn more

Getting started

Run the Inngest Dev Server using our CLI:

npx inngest-cli@latest dev

Open the Inngest Dev Server dashboard at http://localhost:8288:

Screenshot of the Inngest dashboard served by the Inngest Dev Server

Follow our Next.js, Node.js or Python quick start guides.

SDKs

Project Architecture

To understand how self-hosting works, it's valuable to understand the architecture and system components at a high level. We'll take a look at a simplified architecture diagram and walk through the system.


  • Event API - Receives events from SDKs via HTTP requests. Authenticates client requests via Event Keys. The Event API publishes event payloads to an internal event stream.
  • Event stream - Acts as buffer between the Event API and the Runner.
  • Runner - Consumes incoming events and performs several actions:
    • Scheduling of new “function runs” (aka jobs) given the event type, creating initial run state in the State store database. Runs are added to queues given the function's flow control configuration.
    • Resume functions paused via waitForEvent with matching expressions.
    • Cancels running functions with matching cancelOn expressions
    • Writes ingested events to a database for historical record and future replay.
  • Queue - A multi-tenant aware, multi-tier queue designed for fairness and various flow control methods (concurrency, throttling, prioritization, debouncing, rate limiting) and batching.
  • Executor - Responsible for executing functions, from initial execution, step execution, writing incremental function run state to the State store, and retries after failures.
  • State store (database) - Persists data for pending and ongoing function runs. Data includes initial triggering event(s), step output and step errors.
  • Database - Persists system data and history including Apps, Functions, Events, Function run results.
  • API - GraphQL and REST APIs for programmatic access and management of system resources.
  • Dashboard UI - The UI to manage apps, functions and view function run history.

Community

Contributing

We embrace contributions in many forms, including documentation, typos, bug reports or fixes. Check out our contributing guide to get started. Each of our open source SDKs are open to contributions as well.

Additionally, Inngest's website documentation is available for contribution in the inngest/website repo.

Self-hosting

Self-hosting the Inngest server is possible and easy to get started with. Learn more about self-hosting Inngest in our docs guide.

License

The Inngest server and CLI are available under the Server Side Public License and delayed open source publication (DOSP) under Apache 2.0. View the license here.

All Inngest SDKs are all available under the Apache 2.0 license.

Frequently asked questions

Is Inngest free to use?

Inngest is open source. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does Inngest do?

Effortless event-driven workflows for modern applications

What is Inngest written in?

Inngest is primarily written in Go. Its source is publicly available at https://github.com/inngest/inngest, and it has 5,841 GitHub stars.