The Nucleus Framework workflow engine runs your business processes as a JSON graph you build in a drag-and-drop designer — with human approvals, waits that survive a restart, a dry-run that touches nothing, and typed connectors to every system you integrate. Change a process without a redeploy.
The capabilities that separate a workflow engine you can run in production from a flowchart tool.
A MANUAL_APPROVAL step suspends the run until a person approves or rejects — multi-approver, delegation, author-defined decision outcomes, and an optional queue ingress for the decision. Pending gates land in an Approvals inbox.
A WAIT step pauses on a timer or cron, or indefinitely for an external signal — and the deadline is persisted, so a suspended run resumes exactly where it paused even after the service restarts. A FILE_WATCH step waits for a file to arrive.
Dry-run a flow with side-effecting steps short-circuited to mock outputs — the graph executes end to end, routing and logic run for real, but nothing is sent, written or charged. Author mock responses per node and press Simulate.
If/else and switch routers on SpEL expressions, loops (for-each, count, while, repeat-until), static FAN_OUT/FAN_IN, and dynamic SCATTER that maps over a runtime collection under an admission budget, then gathers.
The CALL_SERVICE step is the engine's one outward primitive — transports rest, messaging (queue), db, bean and ftp, plus an AI step for LLM calls. Each has per-node codecs, idempotency and a saga compensation block.
Edit a draft freely, then publish an immutable version. A SemVer compatibility gate blocks a breaking publish; every run pins the exact graph it started on, so a new version never mutates a run in flight. A version chip links a run back to its graph.
Re-run a workflow from its recorded trigger input for debugging or recovery. When a run fails, saga compensation unwinds the completed side-effecting steps through their declared compensation blocks.
Each run streams over SSE — the live graph, each node's status, its input/output payloads and logs. Workflow Metrics show throughput, duration and outcome breakdowns, with drill-down to the matching runs.
Start a run as an external integration point: submit with your own business id and a set of lifecycle callbacks (kickoff, completion, metrics over REST, queue or DB), then retrieve the result by id — or use the thin client library instead of waiting synchronously.
A palette seeded into every stack on boot, so the designer is populated out of the box.
| Category | Steps | What they do |
|---|---|---|
| Control flow | DECISION · ROUTER · LOOP · FAN_OUT/FAN_IN · SCATTER · CALL_WORKFLOW | Branch on a predicate, switch on a value, iterate a sub-graph, split and join in parallel, map dynamically over a collection, or run another workflow as a guarded child. |
| Data | SCRIPT · SET_VARIABLES · TRANSFORMATION | Run sandboxed JS/Python in GraalVM under code/time/output budgets, assign run-scoped variables, or reshape a payload for the next step. |
| Human | MANUAL_APPROVAL | Suspend until a person decides — multi-approver, delegation, custom outcomes. |
| Integration | CALL_SERVICE · FILE_WATCH | Call REST / queue / DB / bean / FTP / AI with idempotency and compensation, or wait for a file to land. |
| Timing | WAIT | Durable pause on a timer, cron, or external signal — the deadline survives a restart. |
Expressions everywhere use SpEL with #input, #vars, #state and #secrets roots — steps read prior outputs, run variables and Vault-resolved secrets with no glue code.