Skip to content

Architecture overview

Abada is a self-hosted BPMN orchestration platform. Clients and workers use the versioned API, any engine replica may handle a command, and PostgreSQL owns the workflow truth.

flowchart TB
    subgraph Clients
      T[Tenda task application]
      R[Orun operations application]
      W[External workers and Java SDK]
      A[API clients]
    end
    P[Traefik or trusted ingress]
    subgraph Engine cluster
      E1[Engine replica 1]
      E2[Engine replica 2]
      EN[Engine replica N]
    end
    DB[(PostgreSQL)]
    O[OpenTelemetry collector]
    IDP[OIDC identity provider]

    T --> P
    R --> P
    W --> P
    A --> P
    P --> E1
    P --> E2
    P --> EN
    IDP -. signed JWT .-> E1
    IDP -. signed JWT .-> E2
    IDP -. signed JWT .-> EN
    E1 <--> DB
    E2 <--> DB
    EN <--> DB
    E1 --> O
    E2 --> O
    EN --> O

Public boundary

/api/v1 and worker protocol v1 expose stable DTOs, typed errors, pagination, idempotency and trace propagation.

Execution boundary

Core command services reconstruct state and execute the supported BPMN semantics inside explicit transactions.

Persistence boundary

JPA repositories and Flyway migrations map durable definitions, instances, tasks, subscriptions, jobs, variables, history and outbox records.

Presentation boundary

Tenda and Orun consume public DTOs. They do not define authorization or reconstruct authoritative workflow history.

State Authority Replica memory policy
Definitions and versions PostgreSQL deployment rows Parsed immutable model may be cached by deployment ID
Instances, tokens and joins PostgreSQL Command-local only
Variables and user tasks PostgreSQL Detached read snapshots or command-local models
Subscriptions, timers and work PostgreSQL Acquired through locks and leases
Audit history and lifecycle events PostgreSQL Lifecycle delivery originates from the outbox