/inngest-js

Serverless event-driven systems, background jobs, and scheduled jobs for TypeScript & JavaScript

Primary LanguageTypeScriptGNU General Public License v3.0GPL-3.0




Serverless event-driven queues, background jobs, and scheduled jobs for Typescript.
Works with any framework and platform.

Read the documentation and get started in minutes.


Inngest allows you to:

  • ๐Ÿ‘‰ Write background jobs in any framework, on any platform
  • ๐Ÿ‘‰ Create scheduled & cron jobs for any serverless platform
  • ๐Ÿ‘‰ Build serverless queues without configuring infra
  • ๐Ÿ‘‰ Write complex step functions anywhere
  • ๐Ÿ‘‰ Build serverless event-driven systems
  • ๐Ÿ‘‰ Reliably respond to webhooks, with retries & payloads stored for history

๐Ÿ‘‹ Have a question or feature request? Join our Discord!


Getting started ยท Features ยท Contributing ยท Documentation


Screen Shot 2022-10-05 at 17 06 32

Getting started


Install Inngest:

npm install inngest  # or yarn install inngest

Writing functions: Write serverless functions and background jobs right in your own code:

import { createFunction } from "inngest";

export default createFunction(
  "Send welcome email",
  "app/user.created", // Subscribe to the `app/user.created` event.
  ({ event }) => {
    sendEmailTo(event.data.id, "Welcome!");
  }
);

Functions listen to events which can be triggered by API calls, webhooks, integrations, or external services. When a matching event is received, the serverless function runs automatically, with built in retries.


Triggering functions by events:

// Send events
import { Inngest } from "inngest";
const inngest = new Inngest({ name: "My App" });

// This will run the function above automatically, in the background
inngest.send("app/user.created", { data: { id: 123 } });

Events trigger any number of functions automatically, in parallel, in the background. Inngest also stores a history of all events for observability, testing, and replay.


Features

  • Fully serverless: Run background jobs, scheduled functions, and build event-driven systems without any servers, state, or setup
  • Deploy anywhere: works with NextJS, Netlify, Vercel, Redwood, Express, Cloudflare, and Lambda
  • Use your existing code: write functions within your current project, zero learning required
  • A complete platform: complex functionality built in, such as event replay, canary deploys, version management and git integration
  • Fully typed: Event schemas, versioning, and governance out of the box
  • Observable: A full UI for managing and inspecting your functions
  • Any language: Use our CLI to write functions using any language

Contributing

Clone the repository, then:

yarn # install dependencies
yarn dev # build/lint/test

We use Volta to manage Node/Yarn versions.

When making a pull request, make sure to commit the changed etc/inngest.api.md file; this is a generated types/docs file that will highlight changes to the exposed API.

Locally linking (npm|yarn link)

In order to provide sensible namespaced imports such as "inngest/next", the package actually builds to and deploys from dist/.

To replicate this locally to test changes with other local repos, you can link the project like so (replace npm for yarn if desired):

# in this repo
yarn build
yarn prelink
cd dist/
yarn link
# in another repo
yarn link inngest