Rust · PostgreSQL · Tokio

Process orchestration
without the JVM

Conduit is a BPMN 2.0 workflow engine that fits in a single binary. No application server. No JVM warm-up. No middleware overhead. Just Rust, PostgreSQL, and your workers.

Single binary

Ships as one executable. No JVM, no app server, no container sprawl. Drop it on a VM or package it in a scratch container.

🗄

PostgreSQL is the runtime

All state lives in the database. Atomic token advancement. No separate message broker or state machine service.

🔌

Workers are external

Workers poll for tasks over REST. Write them in any language. The engine orchestrates — it never executes business logic itself.

📐

BPMN 2.0 + DMN

Full BPMN 2.0 element support including subprocesses, boundary events, message/signal correlation, and DMN decision tables.

🔢

FEEL expressions

Gateway conditions and DMN rules use standard FEEL (Friendly Enough Expression Language), the same expression language as Camunda and Zeebe.

📊

Observability built-in

Prometheus metrics, structured JSON logs, and a health endpoint. Leader election for clustered deployments via PostgreSQL advisory locks.

How it works

Conduit models your business process as a BPMN 2.0 diagram. When an instance starts, a token advances through the graph. At each element the engine decides what happens next — all in a single PostgreSQL transaction.

              Your Application
                    │
                    │  REST API
                    ▼
          ┌─────────────────┐
          │    Conduit       │
          │                  │
          │  API Layer       │  ◀── Deploy BPMN / Start instances
          │    │             │       Complete tasks / Send messages
          │  Engine          │
          │    │             │
          │  Job Executor    │  ──▶ Timer events / boundary timeouts
          │    │             │
          │  PostgreSQL      │
          └─────────────────┘
                    ▲
                    │  Fetch & lock / Complete
              Worker Processes
              (any language)
      

Quick start

1

Run PostgreSQL

docker-compose up -d
cargo sqlx migrate run
2

Deploy a process

curl -X POST http://localhost:8080/api/v1/deployments \
  -F "file=@my-process.bpmn"
3

Start an instance

curl -X POST http://localhost:8080/api/v1/instances \
  -H 'Content-Type: application/json' \
  -d '{\"process_key\":\"my-process\",\"variables\":{\"amount\":100}}'