A deterministic workflow engine built on the WASM Component Model.
Warning
Pre-release: Expect changes in CLI, gRPC, WIT, and database schema.
The Stargazers app features:
- A webhook listening to GitHub star events.
- Activities for interacting with Turso DB, OpenAI, and GitHub.
- A workflow orchestrating the activities.
- Obelisk Runtime: A single binary executing deterministic workflows, activities, and webhook endpoints, persisting steps in execution log using SQLite.
- Control Interfaces:
- CLI: Manage executions via the
obelisk
command. - gRPC API: Programmatic interaction.
- Web UI: View and submit function executions, execution logs, WIT definitions, and a time-traveling debugger showing backtraces and sources of recorded events.
- CLI: Manage executions via the
- Replayable Workflows: Deterministic execution ensures reliable recovery, debugging, and auditing.
- Resilient Activities: Automatic retries on errors and timeouts, with persistent input and results.
- Schema-first design with end-to-end type safety: Uses WASM Component Model and WIT IDL for generating API bindings.
- Periodic Tasks: Automate periodic checks with complex logic using regular code.
- Background Jobs: Offload tasks with built-in error handling and retries.
- Batch jobs: Manage large-scale tasks like faas deployments.
- End-to-End Testing: Automate tests with detailed logs of each step.
- Activities must be idempotent (retriable). This contract must be fulfilled by the activity itself.
- Support for HTTP requests via WASI 0.2 HTTP client.
- Automatic retries on errors, timeouts, and panics (WASM traps).
- Persistent execution results.
- Runtime guaranteed determinism, fully replayable with persistent execution log and thus crash resilient.
- Automatic retries on failures.
- Support for spawning child executions with structured concurrency.
- Distributed sagas (planned).
- Mounted as a URL path, serving HTTP traffic.
- Support for spawning child executions.
- Concurrency limits and customizable retry handling.
- Linux x64, arm64 (musl, glibc v2.35+, NixOS)
- MacOS x64, arm64
curl -L --tlsv1.2 -sSf https://raw.githubusercontent.com/obeli-sk/obelisk/main/download.sh | bash
Or use cargo-binstall:
cargo binstall obelisk
docker run --net=host getobelisk/obelisk
Requires protoc
.
cargo install --locked obelisk
Using Nix:
nix run github:obeli-sk/obelisk/latest
Check out the Getting Started Guide for details.
obelisk server run
obelisk client component list
# Call fibonacci(10) activity from the workflow 500 times in series.
obelisk client execution submit testing:fibo-workflow/workflow.fiboa '[10, 500]' --follow
Visit localhost:8080 to manage components, functions and execution history.
This project has a roadmap and features are added in a certain order. Discuss features via GitHub Discussions before contributing. A Contributor License Agreement is required.
Set up dependencies via Nix:
nix develop
Or manually install dependencies (see dev-deps.txt).
Run the program:
cargo run --release
./scripts/test.sh
This project (all files and folders except as noted below) is licensed under the GNU Affero General Public License version 3.
The following subfolders are licensed under the MIT License:
wit/
– see LICENSE-MITtoml/
– see LICENSE-MITproto/
– see LICENSE-MIT
The runtime includes functionality that may generate new "extension" WIT files. These generated files are typically based on a combination of user-provided WIT files and the base WIT definitions found in the MIT-licensed wit/
directory.
Users are free to use, modify, and distribute these generated WIT files under the terms of the MIT License, for example, to allow other WASM components to interact via these extended interfaces.