https://github.com/inngest/stepkit
StepKit is an open source SDK for building production ready durable workflows.
https://github.com/inngest/stepkit
durable-execution durable-workflows orchestration typescript
Last synced: 4 months ago
JSON representation
StepKit is an open source SDK for building production ready durable workflows.
- Host: GitHub
- URL: https://github.com/inngest/stepkit
- Owner: inngest
- License: apache-2.0
- Created: 2025-10-29T13:52:48.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-12-03T00:26:01.000Z (6 months ago)
- Last Synced: 2026-01-11T19:28:31.215Z (5 months ago)
- Topics: durable-execution, durable-workflows, orchestration, typescript
- Language: TypeScript
- Homepage: https://step.run
- Size: 20.3 MB
- Stars: 65
- Watchers: 0
- Forks: 2
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
Documentation
·
Community
·
Roadmap / RFCs
StepKit lets you write durable workflows using the standard steps API and deploy to multiple drivers without refactoring.
StepKit's steps bring:
- 🦾 **Durability**: write unbreakable code that automatically retries without any state loss
- 🕑 **Suspend and Resume**: write code that can pause for weeks without using compute
- 📊 **Observability**: each workflow step becomes a live trace with detailed logs and metadata
- 🪝 **Native webhooks and _"Human in the Loop"_**: make your workflow wait for an external event
Visit the [step.run documentation](https://step.run/docs) for guides and examples.
## Get started
1. Install StepKit with your preferred driver
_Inngest for local dev or production. In-Memory/FileSystem for testing_
```bash
npm i @stepkit/inngest
# npm i @stepkit/local
```
2. Write your first durable workflow
```ts
import { z } from "zod";
import { Client } from "@stepkit/inngest";
// import { FileSystemClient as Client } from "@stepkit/local";
import { emailTemplates, sendEmail } from "./email-service";
export const client = new Client({ id: "readme-example" });
export const onboardingWorkflow = client.workflow(
{
id: "onboarding-workflow",
inputSchema: z.object({
userId: z.string(),
email: z.email(),
userName: z.string(),
}),
},
async ({ input }, step) => {
const { userId, email, userName } = input.data;
// DAY 1: Welcome Email
await step.run("send-welcome-email", async () => {
const template = emailTemplates.welcome(userName);
return await sendEmail(email, template);
});
// Wait 3 days
await step.sleep("wait-for-day-3", 3600 * 24 * 3)
// DAY 3: Feedback Email
await step.run("send-feedback-request", async () => {
const template = emailTemplates.feedbackRequest(userName, 7);
return await sendEmail(email, template);
});
}
);
```
## Community
Welcome to the StepKit community!
Whether you’re here to ask questions, share ideas, or collaborate on code, you’ll find all the action is happening in [the GitHub Discussions](https://github.com/inngest/stepkit/).
Please take a moment to review our [Code of Conduct](./CODE_OF_CONDUCT.md) to understand our shared values and the standards of behavior that help keep our community safe and respectful for everyone.
## Contributing
If you're new to contributing, you will find all the essential information (_architecture overview, etc_) in the ["Welcome to the StepKit Community!" discussion thread](https://github.com/inngest/stepkit/discussions/45) before getting started.
We encourage you to open issues and submit pull requests!
## License
[Apache 2.0](./LICENSE.md)