Skip to content

Node Runtime Model

Fabric workflow nodes use a two-axis model that separates what a node does from how it runs:

  1. Semantic operation — what the node does (e.g., audio.transcribe, media.thumbnail)
  2. Runtime implementation — how the node runs (Native, Tool, Provider, Wasm)

The semantic operation is the stable, canonical meaning. The runtime implementation can change without affecting workflow semantics.

Built-in Rust logic with no external dependencies.

OperationDescription
workflow.noopNo-op passthrough
workflow.merge_contextMerge context values
workflow.validate_contextValidate context shape
workflow.fan_inCollect parallel results
text.transform_basicSimple text transformations

External binaries invoked safely through typed operations. Not raw shell commands.

ToolOperations
ffmpegmedia.transcode, media.extract_audio, media.thumbnail
yt-dlpsource.youtube_download

Commands are constructed from typed operations — no arbitrary shell execution. See Tool Nodes for details.

AI provider-backed operations via fabric-providers. Routes through ProviderRouter with tier/cost/health-based selection.

Supports all modalities: text, image, audio, video, embedding.

See Provider Nodes for details.

Sandboxed WebAssembly plugins for portable custom logic. Memory-limited, CPU/fuel-limited, capability-controlled.

See Wasm Nodes for details.

NodeDefinition::provider("transcribe", "audio.transcribe", "audio")
.input("audio_url", "$context.audio.url")
.output("transcript", "$context.transcript.text", MergePolicy::Replace)
.requires("provider.audio.transcribe")
.with_policy(NodePolicy { timeout_ms: 120_000, ..Default::default() })
  1. Capability check — Dispatcher verifies required capabilities are available
  2. Input binding — Values resolved from shared context
  3. Runtime execution — The appropriate runtime executor is invoked
  4. Output binding — Results applied to shared context using the configured merge policy
  5. Result normalization — A NodeExecutionResult is returned with status, output, and usage metadata

Each runtime kind enforces specific security boundaries:

RuntimeSecurity Model
NativeTrusted Rust code, no external dependencies
ToolValidated command construction, no arbitrary shell, timeout enforced, stdout/stderr captured and truncated
ProviderRoutes through policy-controlled ProviderRouter
WasmMemory/fuel limits, capability allowlist, no raw OS access