Orchestration

Design workflows. Don't code them.

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 Nucleus workflow designer: a categorized step palette on the left and a left-to-right DAG of service-call, router and transformation nodes with typed success and failure edges.
The workflow designer — drag steps from the palette, wire typed outcome edges, validate, test-run and publish a versioned flow.

Built for real processes, not just happy paths

The capabilities that separate a workflow engine you can run in production from a flowchart tool.

🧑‍⚖️

Human-in-the-loop

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.

⏸️

Restart-proof waits

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.

🧪

Simulate before you run

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.

🔀

Branch, loop, fan-out

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.

🔌

Call anything

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.

📦

Versioned & immutable

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.

↩️

Replay & compensate

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.

📺

Watch every run live

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.

🔗

An integration endpoint

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.

The Nucleus workflow metrics console: run count and success-rate tiles, median/P95/max/average duration cards, a throughput chart stacked by outcome, and an outcomes donut — all for a chosen time window.
Run metrics out of the box — throughput, success rate, duration percentiles and outcome breakdowns per workflow type, over any window.

14 step kinds, grouped by what they do

A palette seeded into every stack on boot, so the designer is populated out of the box.

CategoryStepsWhat they do
Control flowDECISION · ROUTER · LOOP · FAN_OUT/FAN_IN · SCATTER · CALL_WORKFLOWBranch 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.
DataSCRIPT · SET_VARIABLES · TRANSFORMATIONRun sandboxed JS/Python in GraalVM under code/time/output budgets, assign run-scoped variables, or reshape a payload for the next step.
HumanMANUAL_APPROVALSuspend until a person decides — multi-approver, delegation, custom outcomes.
IntegrationCALL_SERVICE · FILE_WATCHCall REST / queue / DB / bean / FTP / AI with idempotency and compensation, or wait for a file to land.
TimingWAITDurable 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.

Read the full workflow reference, or see it running.

Workflow reference → Live demo →