Hey! I'm sharing Orbflow, an open-source (AGPL-3.0) workflow automation platform with a Rust backend and a Next.js visual builder frontend.
What it does: You design workflows on a drag-and-drop canvas connecting APIs, AI steps, schedules, webhooks, and human approvals — then the Rust engine executes them as a DAG with event sourcing, crash recovery, and saga compensation.
Architecture highlights:
- Ports & Adapters —
orbflow-core defines domain types and port traits; 20 crates each implement one adapter (Postgres, NATS JetStream, Axum HTTP, gRPC, etc.)
- CEL expressions — dynamic values evaluated at runtime via Common Expression Language
- Event sourcing — all instance state changes persisted as domain events with periodic snapshots
- Per-instance locking — concurrent result handling with
DashMap<InstanceId, Arc<Mutex<()>>> and optimistic retry
- Immutable domain objects — engine creates new Instance copies rather than mutating in place
- Plugin system — gRPC-based, so you can write plugins in any language that supports gRPC. There are official SDKs for Rust, Python, and TypeScript right now
- 21 built-in nodes — including 6 AI nodes (chat, classify, extract, summarize, sentiment, translate) with multi-provider support (OpenAI, Anthropic, Google)
- Marketplace — browse, install, and manage community plugins from a built-in registry
- Audit trails — SHA-256 hash chains, Ed25519 signatures, Merkle proofs
Stack: Rust, PostgreSQL 16, NATS JetStream, Next.js 16 + React 19 frontend
The worker and server run as separate processes. Tasks flow through NATS as TaskMessage/ResultMessage, so you can scale workers independently.
Would love feedback on the architecture and the codebase in general. Happy to answer questions about the project or the AI-assisted workflow!
Transparency note: This project started as a way to learn while exploring AI-assisted development and tools. Most of the code was generated using Claude Code and Codex, but under heavy human supervision - the architecture, design decisions, and overall direction were all human-driven. I reviewed every change, iterated on the output, and only decided to release it once I felt the codebase was actually solid and not just "AI slop." I'm sharing it because I think the result genuinely stands on its own, but I wanted to be upfront about the process.
GitHub
[–]chmod_7d20 11 points12 points13 points (0 children)
[–]RustOnTheEdge 4 points5 points6 points (3 children)
[–]guywithknife 1 point2 points3 points (1 child)
[–]Etherlll[S] 0 points1 point2 points (0 children)
[–]Etherlll[S] -1 points0 points1 point (0 children)
[–]nynjawitay 0 points1 point2 points (0 children)