Reference

On Thu, 10 Sep 2026, by @lucasdicioccio, 232 words, 0 code snippets, 10 links, 1images.

Reference

These pages are generated straight from the specs in the tramaj repository — the repository is always the canonical source, and may be ahead of what’s published here.

How the documents relate: the language reference is the base, the Node JSON format encodes what it evaluates to, and v3 and v4 each extend it.

Spec layers: Node JSON encodes the core’s output; v3 symbols (value realm) and v4 types (type realm) both extend the core

  • Language reference — core AST, values, evaluation rules, surface syntax and its desugarings, imports, actions, builtins, and what’s implementation-defined. Start here.
  • Node JSON representation — the normative wire format for the evaluated Node AST.
  • v3 — Symbolic values and constraints — ?(key) allocation, !constraint(name, ...), and the Symbolic evaluation mode.
  • v4 — Types — the nominal type algebra, type parameters through imports, and typed annotations.

Some passages carry a mark. Those marked [§18] (integers and floats as two types, and the arithmetic builtins) and those marked [§20] (round, sorting, format-number) are implemented in all six implementations, on the main branch and in no release yet. The marks are section numbers of decisions.md. For what the number split changes in existing templates, see Migrating to integers and floats.

Two more documents exist only in the repository, not mirrored here since they’re development history rather than language reference:

  • laws.md — the design invariants, rewritten in prose on the Properties page.
  • decisions.md — the resolved-conflicts log: which reading won wherever the design drafts disagreed, and why.

Earlier, superseded design drafts live under specs/archive/, kept for the reasoning in them rather than as current documentation.