Choosing a flow authoring model
Orvanta has three ways to author a flow: DAG Flow, BPMN Flow, and Code Flow (Code Flow is a beta capability that is off by default since 6.2.0; see Code Flow). They are different authoring surfaces over one execution engine, not three separate products — this page is for deciding which one to reach for, and being honest about what each one costs you.
At a glance
Section titled “At a glance”| DAG Flow | BPMN Flow | Code Flow | |
|---|---|---|---|
| Artifact | OpenFlow YAML/JSON | BPMN 2.0 XML | A Python/TypeScript script with @workflow/@task decorators |
| Authored as | Node-based canvas | BPMN 2.0 canvas | Code |
| Maturity | Most mature, no coverage gaps against its own model | Executes a defined subset of BPMN 2.0 (see below) | Full language power, no visual canvas |
| Portability | Orvanta-specific | Standards-based (with caveats — see below) | Orvanta-specific |
| Tier | Included in every tier | Business and Enterprise (verify current requirement) | Off by default (beta); code_flow is catalogued at the Teams tier |
DAG Flow
Section titled “DAG Flow”What it is. Orvanta’s original, node-based flow model: a directed acyclic graph of steps — scripts, branches, loops, approvals, error handlers — wired together on a canvas. It compiles to an OpenFlow YAML/JSON artifact. See Workflows and Flows as artifacts.
As of 6.0.0, DAG Flow renders and edits on the same canvas vocabulary as BPMN Flow — see the workflow editor’s shared canvas section. The artifact format is unchanged.
When to choose it. It’s the most mature of the three authoring models and has no coverage gaps against its own feature set — everything the DAG model supports, the engine executes. Choose it by default unless BPMN or Code Flow’s specific trade-offs matter to you.
What it costs you. The artifact format is Orvanta-specific — there’s no external standard behind it, so it isn’t portable to another orchestration engine.
BPMN Flow
Section titled “BPMN Flow”What it is. Process modelling using BPMN 2.0 notation, the standard used by Camunda, Flowable, and Activiti. A business-rule task can call out to a DMN decision table. See BPMN Flow overview.
When to choose it. Your team already thinks in BPMN, the process needs standards-based notation for governance or stakeholder review, or you’re migrating an existing Camunda/Flowable estate.
What it costs you — specifically, not just “some limitations”. The engine executes a defined subset of BPMN 2.0, not the full spec: see the element reference for the exact list of 18 supported element kinds. Measured against a corpus of 1,754 real Flowable process definitions, the engine currently parses 45.5% and fully validates 31.1% — that is the honest current baseline, not “broad BPMN 2.0 support”. callActivity, multi-instance activities, event sub-processes, and most boundary event types beyond interrupting error are not yet supported and block deploy rather than degrading quietly. If you’re evaluating BPMN Flow against a specific process, check it against the element reference before assuming portability. See Importing from Flowable/Camunda for the full picture, including what’s preserved read-only and what blocks deploy.
Code Flow
Section titled “Code Flow”Availability. Off by default since 6.2.0: authoring is refused, queued jobs fail with CODE_FLOW_UNAVAILABLE, and deployed Code Flow scripts are archived at boot, unless ORVANTA_BETA=true. See Code Flow.
What it is. Orchestration written directly as a Python or TypeScript function, using @workflow/@task decorators (or their TypeScript equivalents) instead of a visual graph. Each task dispatches as a separate, checkpointed job. See Code Flow.
When to choose it. The orchestration logic is easier to express as a program than as a graph — dynamic branching, loops with non-trivial exit conditions, or a variable number of tasks computed at runtime.
What it costs you. No canvas, and no visual run overlay in the sense DAG Flow and BPMN Flow have — you get a checkpointed timeline of task jobs, not a live graph animation. It gives you the full expressiveness of the language you write it in — check Scripts for the current language list before assuming a specific language runs end to end.
What about CMMN case models?
Section titled “What about CMMN case models?”A CMMN case model is not a fourth flow authoring model, and it is deliberately not a fourth column in the table above — it isn’t reachable from the New flow chooser at all. It has its own Case Models sidebar entry, its own artifact format (CMMN 1.1 XML), and its own engine.
The distinction is not organisational, it’s a different question. The three models above all answer “what happens, in what order?”. A CMMN case model answers “what is allowed to happen, and under what conditions?” — it declares a set of permitted activities each guarded by a sentry, and lets a person decide what actually happens. There is no sequence flow, no gateway and no token. That’s the right shape for knowledge work — a claim, an investigation, an onboarding — where the goal is fixed and the route isn’t.
It is not available in a released build. Feature::CaseManagement is built: false at Business tier: the editor (which saves drafts and deploys to the server), the CMMN 1.1 round trip, the deploy path and the runtime exist in the code, but the capability is hidden unless the beta toggle is on. See the overview’s status section for the precise build state before planning anything around it.
If the work you’re modelling does follow a fixed path, one of the three models above is what you want — start with DAG Flow.
What’s shared across all three
Section titled “What’s shared across all three”This is the part that doesn’t change based on which model you pick: one execution engine, the same permissions and RBAC model, the same audit trail, the same ability to call any Orvanta script as a step, and the same runs UI for watching and debugging execution. Choosing an authoring model is a choice about how you build a flow, not about which platform capabilities you get.
Can you migrate between them?
Section titled “Can you migrate between them?”No — not automatically. There is no converter between the OpenFlow (DAG Flow), BPMN 2.0 XML (BPMN Flow), and Python/TypeScript (Code Flow) artifact formats. Moving a flow from one model to another today means rebuilding it in the target model by hand. If you’re choosing between models for a new flow, that’s a reason to decide deliberately up front rather than expecting to switch later at low cost.
See also
Section titled “See also”- Flows as artifacts: the artifact model underneath all three.
- Workflows: DAG Flow in depth.
- BPMN Flow overview: BPMN Flow in depth.
- Code Flow: Code Flow in depth.