Skip to Content
We are live but in Staging 🎉
DSL ReferenceScriptum DSL Reference

Scriptum DSL Reference

Last validated: 2026-05-14

This section is a parser-accurate reference for .scriptum authoring.

Source of truth for this reference:

  • dodil-scriptum/crates/scriptum-compiler/src/lexer.rs
  • dodil-scriptum/crates/scriptum-compiler/src/parser.rs
  • dodil-scriptum/crates/scriptum-compiler/src/ast.rs
  • dodil-scriptum/examples/*.scriptum
  • dodil-scriptum/templates/**/*.scriptum

Read By Domain

  1. 09-scriptum-dsl-reference/01-structure-and-declarations.md
  • File layout, comments/annotations, imports, env, and declaration blocks.
  1. 09-scriptum-dsl-reference/02-type-system-and-constraints.md
  • Types, enums, constraints, defaults, and schema declaration patterns.
  1. 09-scriptum-dsl-reference/03-expressions.md
  • Literal/reference syntax, interpolation, operators, lambdas, and accessors.
  1. 09-scriptum-dsl-reference/04-steps-core-actions.md
  • do, emit, yield, let, send, and section separators.
  1. 09-scriptum-dsl-reference/05-steps-control-flow-and-concurrency.md
  • each, pipe, check, decide, together, wait, repeat.
  1. 09-scriptum-dsl-reference/06-steps-plan-run-agent-ask.md
  • Planning, sub-execution, autonomous agents, and human-in-the-loop input.
  1. 09-scriptum-dsl-reference/07-compatibility-and-caveats.md
  • Runtime caveats, feature parity notes, and safe authoring guidance.
  1. 09-scriptum-dsl-reference/08-template-patterns-and-recipes.md
  • Real template idioms for ingestion/classification/OCR/embedding pipelines.

Quick Mental Model

A Scriptum file has two broad parts:

  1. Declarative contract:
  • script metadata, types, input/output/stream schema, imports, env requirements.
  1. Executable body:
  • ordered workflow steps that can branch, loop, parallelize, pause, and emit results.

Minimal Example

script "Minimal Script" version "0.1.0" input name : text output greeting : text do "Build greeting" with llm prompt = "Write one short greeting for {name}." -> reply emit "Done" greeting = reply.text