=== meta title = "GEML feature tour" author = "the GEML team" release = "1.0" === # {{title}} {#top} One document, written in GEML {{release}} by {{author}} — edit it, or hit **Break a reference** to watch `geml check` fail the build. This opening is a *flow* paragraph, so it carries inline markup: **strong**, ~~struck~~, `inline code`, inline math $a^2 + b^2$, a [link](https://geml-spec.github.io/geml/), an auto-reference to [[#revenue]], and a footnote.[^refs] === note {.tip} A `note` is a callout with full inline markup. It can point at other blocks — see the [[#revenue]] table and the [[#roadmap]] below. Finer intent goes on a class, e.g. `=== note {.warning}` or `{.aside}`. === ## Roadmap {#roadmap} Task lists render as checkboxes; lists nest by indentation: - [x] Ship the 1.0 spec - [x] Publish the reference parser and CLI - [ ] Recruit a second implementation - [ ] Python - [ ] Rust Release steps, in order: 1. Tag the release 2. Publish to npm 3. Announce ## Numbers {#numbers} A `table` in data form with a **computed column** and a **summary row** — the `FY` column and the `Total` row are computed at build time: === table {#revenue caption="Revenue by segment" format=csv header=1 compute="FY [%.0f] = Q1 + Q2 + Q3 + Q4" summary="Segment = 'Total'; FY [%.0f] = sum(FY)"} Segment, Q1, Q2, Q3, Q4 Cloud, 8, 10, 12, 14 Platform, 5, 6, 7, 9 Services, 3, 4, 4, 5 === A `geml-chart` charts that table **by reference** — one source of truth, the column names checked at build time, no data copied: === diagram {#chart format=geml-chart data=#revenue type=bar x=Segment y=FY caption="FY by segment"} === ## Code, math, diagrams {#more} A `code` block keeps its body verbatim: === code {#hello lang=python} def greet(name): return f"hi {name}" === A `math` block, rendered with KaTeX: === math {#pythagoras caption="Pythagoras"} c^2 = a^2 + b^2 === A `diagram` hosts an external DSL — GEML never interprets the body, a renderer does. This one is Mermaid, and renders below: === diagram {#flow format=mermaid caption="Review flow"} graph LR A[Draft] --> B{Review} --> C[Publish] === `geml-code-graph` is different: GEML *does* interpret it. It points at a codemap — a call graph stored as checked GEML documents. The one below is **this repository's own source** — the reference parser and the viewer that is rendering this page — generated by `geml codemap build` (SCIP). The two clusters meet only at the package boundary: the viewer calls the parser's built API, not its internals. **Click a module to open its rendered page**: === diagram {#modmap format=geml-code-graph src=codemap/index.geml caption="geml-parser + geml-viewer — module overview (their own codemap)"} === And one container from the same codemap at method level, rooted at `renderHtml` — **click a node for its callee chain; the ⊕ on an entry node expands the complete caller chain up to the app entry**, and the breadcrumb (`modules / container`) walks back up without leaving the page. Dashed red = recursion back-edge, dotted = dispatch candidate, dimmed = leaf helper: === diagram {#callmap format=geml-code-graph src=codemap/geml-parser--render.ts.geml caption="geml-parser/src/render.ts — layered method flow (interactive)"} === %% A %% line is a comment: kept in the model, never rendered. [^refs]: Every reference — `[[#id]]`, `[text](#id)`, `[^footnote]`, a chart's `data=#id` — is checked at build time. Break one and the build fails.