Skip to content

Read markdown as typed data

Each example builds on the one before it — read the group in order, or jump to the one you need. Every shipped artifact is regression-checked against the real CLI and library output.

  1. One contract, two doors — The contract that validates a document also types it: validate() returns findings as data, read() returns the typed model or throws.
  2. Tables as typed rows — A table leaf with cell schemas reads back as an iterable of typed rows — no cell parsing in the consumer.
  3. Anchors make blocks addressable — A line-terminal ^block-id names a block; a contract can require it, and a consumer can resolve it to the block’s typed view.
  4. Navigate without a contractparse() alone projects a document into a positioned section tree — navigation helpers and verbatim table cells, no contract required.

Or browse all examples, or open the Typed model reference for the underlying spec.