Node Expression Engine
A complete reference for how data moves through a BizFirst workflow, how expressions are written and evaluated, and how the node field policy system controls the behaviour of every field in every node. For engineers and AI agents building or reasoning about node executors.
Why an Expression Engine?
Node configuration in BizFirst is defined at design time in the workflow editor — but the actual values those fields need are often only known at runtime: the name of the employee being onboarded, the approval threshold calculated earlier in the workflow, the API key stored in a vault.
The expression engine bridges design-time configuration and runtime data by
allowing config fields to contain expression directives —
placeholders like @{input:employeeId} or @{secret:ApiKey}
that are resolved to real values before the node executor runs.
Data Flow — The Big Picture
System Architecture
Data Bags
Named containers that hold data at runtime. Input bags, output bags, memory variables, config bags — each with a specific lifecycle and scope.
Read more →Expression Syntax
The @{directive:key} and {{directive:key}} syntax. What directives exist, how they resolve, and the three evaluator kinds.
Evaluation Pipeline
Two-tier evaluation: Tier 1 at config-load (env/secrets), Tier 2 after input is ready (runtime data). Why two tiers and exactly when each runs.
Read more →Node Field Policies
The NodeFieldDescriptor system — how each field declares its expression, data flow, HIL, and security behaviour. The manifest and override system.
Read more →Who Should Read This
- Node executor developers — understand how your config fields are resolved and how to declare a NodeFieldManifest.
- AI agents building nodes — understand what data is available at each stage and how to reference it via expressions.
- Integration developers — understand how to use expression directives in workflow configuration to wire data between nodes.
- Platform engineers — understand how the two-tier pipeline works and how to extend it.