https://github.com/sam-goodwin/eventual
Build scalable and durable micro-services with APIs, Messaging and Workflows
https://github.com/sam-goodwin/eventual
aws aws-cdk choreography distributed-systems event-driven microservice-framework microservice-orchestration microservices orchestration orchestrator pubsub saga-pattern service-bus service-fabric state-management typescript workflow-automation workflow-engine workflow-management workflows
Last synced: 18 days ago
JSON representation
Build scalable and durable micro-services with APIs, Messaging and Workflows
- Host: GitHub
- URL: https://github.com/sam-goodwin/eventual
- Owner: sam-goodwin
- License: mit
- Created: 2022-11-05T00:55:43.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-27T04:45:37.000Z (about 1 month ago)
- Last Synced: 2025-04-06T15:14:29.083Z (22 days ago)
- Topics: aws, aws-cdk, choreography, distributed-systems, event-driven, microservice-framework, microservice-orchestration, microservices, orchestration, orchestrator, pubsub, saga-pattern, service-bus, service-fabric, state-management, typescript, workflow-automation, workflow-engine, workflow-management, workflows
- Language: TypeScript
- Homepage: https://docs.eventual.ai
- Size: 58.3 MB
- Stars: 182
- Watchers: 7
- Forks: 3
- Open Issues: 106
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
Eventual is a TypeScript framework for building event-driven applications on AWS using Commands, Events, Subscribers, Workflows and Streams.
Your application exports APIs, Workflows, etc. that are then imported to synthesize an AWS CDK or SST v2 stack that is then deployed to AWS.
```ts
import { event, task, workflow, api, HttpResponse } from "@eventual/core";api.post("/work", async (request) => {
const items: string[] = await request.json();const { executionId } = await myWorkflow.startExecution({
input: items,
});return new HttpResponse(JSON.stringify({ executionId }), {
status: 200,
});
});export const myWorkflow = workflow("myWorkflow", async (items: string[]) => {
const results = await Promise.all(items.map(doWork));await workDone.emit({
outputs: results,
});return results;
});export const doWork = task("work", async (work: string) => {
console.log("Doing Work", work);return work.length;
});export interface WorkDoneEvent {
outputs: number[];
}export const workDone = event("WorkDone");
```