Skip to content

DRTML overview

DRTML is the Framework’s declarative workload language. A step ships *.drtml (plus optional fragments) as a machine-readable execution contract: run type, params, inputs/outputs, store profiles, metrics, UI, dashboard views, and orchestration metadata.

The Framework treats that contract as a structured artifact that can be parsed, validated, semantically checked, compiled into typed plans, inspected, generated by software or external AI, repaired from structured validation errors, and executed without embedding infrastructure code in the domain package.

It is more than “YAML configuration.” Older drtml_version: 3 manifests are not accepted. The public surface is v4 only; the loader lowers it into internal runtime plans.

main *.drtml
→ resolve relative include paths / globs
→ deep-merge fragments (entry wins)
→ lower v4 source → internal StepManifest
→ validate lowered contract
→ compile_step_manifest
→ runtime plans (StoragePlan, feed/mapping/reduce/metrics/evaluation/embed)

The DRTML layer performs no dataset I/O. Runtime consumes compiled plans.

Human authors and external agents compose DRTML from Framework primitives; see AI & Automation and Compare.

drtml: 4
step: normalize_text
run:
type: partition
processor:
batch: acme_steps.normalize.processor:process_batch
storage:
default: artifacts
stores:
artifacts: {backend: local, root: /tmp/drtoller-data}
inputs:
documents:
schema: {document_id: string, text: string}
run: mapping.upstream_runs
feed: {batch: 256}
outputs:
normalized_documents:
schema: {document_id: string, text: string}
from: documents
params:
runtime:
metrics_enabled: true
document_batch_size: 64
src/acme_pipeline_steps/normalize/
normalize.drtml
fragments/
params.drtml
ui.drtml
metrics.drtml
hooks.py
processor.py

Package DRTML files as distribution data. Airflow/UI discover their root through deployment configuration; manifest_path_adjacent resolves a main manifest from a thin hook.

Steps do not parse DRTML. The parser does not perform parquet/database I/O. A YAML field without a compiled/runtime consumer is not a supported feature.