atlas

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 11, 2026 License: AGPL-3.0 Imports: 0 Imported by: 0

README ΒΆ

Atlas

A blazing-fast, durable BPMN 2.x workflow engine in Go.

Atlas is named after the Titan who bears an immense load without ever letting it drop. That's exactly what it does: it carries millions of process instances, batch after batch, and never drops a token.

🚧 Developer preview (0.x). Atlas already runs a broad slice of BPMN 2.x durably on a single node, but it is not ready for production use β€” the pre-1.0 API and on-disk formats are unstable and changing fast. See the changelog for what's in each release and the roadmap for what's next.


Why another workflow engine?

Most BPMN engines spend their time interpreting XML at runtime and writing process state to a SQL database one transaction at a time. Both are throughput killers. Atlas takes a different path, borrowed from the design lineage of log-structured, event-sourced systems:

  • Compile, don't interpret. BPMN models are compiled once at deploy time into a flat, integer-indexed execution graph. At runtime there are no string lookups, no XML parsing, no map access on the hot path β€” just pointer arithmetic over cache-friendly slices.
  • Event sourcing over state mutation. State is never written in place. Every state transition is an append-only event in a write-ahead log. The live state is a materialization of that log, kept in an embedded key-value store.
  • Group commit. Many events are made durable with a single fsync. One fsync per event caps you at a few thousand per second; one fsync per thousand events unlocks millions.
  • Single writer per partition. Each partition is driven by one goroutine processing commands sequentially β€” no locks, no mutex contention, cache-friendly state access, and trivially deterministic recovery via log replay. Scale horizontally by adding partitions, not threads.

Design at a glance

Command β†’ [Single-writer Processor] β†’ State mutation (in-memory tx) + Events
                                              β”‚
                                    Batched WAL append + one fsync
                                              β”‚
                                    State commit β†’ followup commands β†’ side effects
                                              β”‚
                                    (Recovery: replay events β†’ state)

The three core pillars:

  1. The graph compiler turns hierarchical BPMN XML into immutable, integer-indexed slices β€” nodes, flows, and scopes β€” with interned strings and pre-compiled expressions. Expensive once, cheap a million times.
  2. The processor moves tokens through that graph as a deterministic fold over an event log. A single batch loop collects commands, processes them purely in-memory against a transaction, makes the whole batch durable with one fsync, then runs visible side effects.
  3. The data model makes every step a keyed record with a (ValueType, Intent) discriminator. The same applyToState function runs live and during recovery, so the log and the state can never diverge.

Documentation

Working on this with an AI coding agent? Start at AGENTS.md (Claude Code: CLAUDE.md). It carries the invariants, the exact build/test commands, and how to approach a task.

Goals

  • Durable execution that survives crashes and runs long-lived processes (timers, message events, multi-week instances)
  • Full BPMN 2.0 coverage including subprocesses, boundary events, and event subprocesses
  • High throughput β€” many instances per second per partition
  • Pure Go, no CGO (embedded LSM-tree state store, e.g. Pebble)

Non-goals (for now)

  • A bespoke graphical modeler β€” Atlas ships a browser viewer/editor by embedding the standard bpmn-js toolkit (ADR-0011), rather than reimplementing BPMN rendering from scratch
  • A full-stack, batteries-included server beyond the single self-contained binary β€” the engine core stays a library first, embedded by the server

License

GNU Affero General Public License v3.0 only (AGPL-3.0-only). Strong copyleft with a network-use clause: anyone who runs a modified Atlas as a network service must make their modified source available to its users. Contributions are accepted under the same license (see CONTRIBUTING.md).


Built by someone who appreciates a good atlas.

Documentation ΒΆ

Overview ΒΆ

Package atlas is a blazing-fast, durable BPMN 2.x workflow engine.

Atlas compiles BPMN models into a flat, integer-indexed execution graph, records every state transition as an append-only event in a write-ahead log, and materializes live state in an embedded key-value store. See the documents in docs/ for the architecture, design decisions, and roadmap.

This is the module root. Implementation packages live in subdirectories and will be added as the project develops; see ROADMAP.md for status.

Directories ΒΆ

Path Synopsis
Package api is the single-binary server surface for Atlas: it embeds one engine.Processor behind an HTTP API and serves an embedded web UI, so a single self-contained binary can deploy BPMN models, run instances, and (as the UI grows) view them in a browser.
Package api is the single-binary server surface for Atlas: it embeds one engine.Processor behind an HTTP API and serves an embedded web UI, so a single self-contained binary can deploy BPMN models, run instances, and (as the UI grows) view them in a browser.
Package clio integrates a clio event store as a server-registered Atlas connector: a BPMN clio "write-events" connector task appends an event to a configured clio instance through the job path (ADR-0036), mirroring how the dmn package delegates a decision to temis (ADR-0014).
Package clio integrates a clio event store as a server-registered Atlas connector: a BPMN clio "write-events" connector task appends an event to a configured clio instance through the job path (ADR-0036), mirroring how the dmn package delegates a decision to temis (ADR-0014).
cmd
atlas command
Command atlas is the single-binary Atlas server: one self-contained process that embeds the engine, exposes an HTTP API, and serves the web UI.
Command atlas is the single-binary Atlas server: one self-contained process that embeds the engine, exposes an HTTP API, and serves the web UI.
Package compiler turns a BPMN model into an immutable, integer-indexed CompiledProcess (ADR-0004).
Package compiler turns a BPMN model into an immutable, integer-indexed CompiledProcess (ADR-0004).
Package dmn integrates the temis DMN decision engine (github.com/pblumer/temis) into Atlas, so a BPMN business rule task can delegate a decision and get an answer back.
Package dmn integrates the temis DMN decision engine (github.com/pblumer/temis) into Atlas, so a BPMN business rule task can delegate a decision and get an answer back.
Package engine is the heart of Atlas: a single-writer processor that folds commands into durable events and applies them to state.
Package engine is the heart of Atlas: a single-writer processor that folds commands into durable events and applies them to state.
Package expr is Atlas's boundary to a FEEL engine.
Package expr is Atlas's boundary to a FEEL engine.
Package job is Atlas's in-process worker harness: it bridges the engine's activatable jobs to worker handlers and feeds their results back as commands (ADR-0007, streaming pull with completion-as-command).
Package job is Atlas's in-process worker harness: it bridges the engine's activatable jobs to worker handlers and feeds their results back as commands (ADR-0007, streaming pull with completion-as-command).
Package mail integrates an outbound e-mail provider as a server-registered Atlas connector: a BPMN mail connector task sends a model-authored message through a configured provider via the job path (ADR-0079), mirroring how the clio package delegates an append to a registry-managed endpoint (ADR-0036).
Package mail integrates an outbound e-mail provider as a server-registered Atlas connector: a BPMN mail connector task sends a model-authored message through a configured provider via the job path (ADR-0079), mirroring how the clio package delegates an append to a registry-managed endpoint (ADR-0036).
Package mcp is Atlas's Model Context Protocol server: it lets an AI agent drive a running Atlas server through tools β€” deploy a BPMN model, manage design-time projects and artifacts, start an instance, complete human tasks, and inspect live runtime state.
Package mcp is Atlas's Model Context Protocol server: it lets an AI agent drive a running Atlas server through tools β€” deploy a BPMN model, manage design-time projects and artifacts, start an instance, complete human tasks, and inspect live runtime state.
Package model defines the records that flow through Atlas and their on-disk binary encoding.
Package model defines the records that flow through Atlas and their on-disk binary encoding.
Package remedy integrates BMC Remedy (BMC Helix ITSM / the AR System) as a server-registered Atlas connector: a BPMN Remedy connector task creates an entry (e.g.
Package remedy integrates BMC Remedy (BMC Helix ITSM / the AR System) as a server-registered Atlas connector: a BPMN Remedy connector task creates an entry (e.g.
Package rest integrates an external HTTP-REST API as a service-task connector: a BPMN REST connector task calls a model-authored endpoint through the job path (ADR-0036/0067), mirroring how the dmn package delegates a decision to temis (ADR-0014).
Package rest integrates an external HTTP-REST API as a service-task connector: a BPMN REST connector task calls a model-authored endpoint through the job path (ADR-0036/0067), mirroring how the dmn package delegates a decision to temis (ADR-0014).
Package script is Atlas's in-process worker for polyglot script tasks (PowerShell, Python, JavaScript β€” ADR-0047).
Package script is Atlas's in-process worker for polyglot script tasks (PowerShell, Python, JavaScript β€” ADR-0047).
Package sharepoint integrates Microsoft SharePoint as a server-registered Atlas connector: a BPMN SharePoint connector task creates a list item in a model-authored site and list through a configured provider via the job path (ADR-0105), mirroring how the mail package delegates a send to a registry-managed provider (ADR-0079).
Package sharepoint integrates Microsoft SharePoint as a server-registered Atlas connector: a BPMN SharePoint connector task creates a list item in a model-authored site and list through a configured provider via the job path (ADR-0105), mirroring how the mail package delegates a send to a registry-managed provider (ADR-0079).
Package state is Atlas's materialized state store: the queryable fold of the event log (ADR-0001), backed by Pebble (ADR-0003).
Package state is Atlas's materialized state store: the queryable fold of the event log (ADR-0001), backed by Pebble (ADR-0003).
Package temis integrates a central temis decision service as a server-registered Atlas connector: a business rule task marked <atlas:temisConnector> delegates its decision to a configured temis instance through the job path (ADR-0050), instead of the embedded temis library that evaluates a local decision (ADR-0014).
Package temis integrates a central temis decision service as a server-registered Atlas connector: a business rule task marked <atlas:temisConnector> delegates its decision to a configured temis instance through the job path (ADR-0050), instead of the embedded temis library that evaluates a local decision (ADR-0014).
Package wal is Atlas's write-ahead log: a segmented, append-only record store with group commit.
Package wal is Atlas's write-ahead log: a segmented, append-only record store with group commit.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL