xlli is the structured-spreadsheet citizen the document ecosystem has been missing — a single canonical JSON form that round-trips through .xlsx, HTML, and, via Pandoc, every other format Pandoc reaches. Two reference engines (C# and Rust) produce byte-identical canonical output; JavaScript and Python bindings layer over Rust. The format is owned by no one. The reference implementations are open source.

A complete .xlli document

{
  "xlliVersion": "0.1.0",
  "documentKind": "container",
  "meta": { "id": "01HXM3V4F8Q2WK9C6YNBZPRS71", "title": "Q1 Revenue Review" },
  "microtables": {
    "summary": {
      "caption": "Q1 by Product",
      "columns": [
        { "id": "product", "label": "Product" },
        { "id": "q1",      "label": "Q1 Revenue", "styleName": "money" },
        { "id": "trend",   "label": "Trend" }
      ],
      "values": [
        ["Widget A", 42500, null],
        ["Widget B", 38100, null],
        ["Widget C", 29700, null]
      ],
      "presentation": [
        [null, null, null],
        [null, null, null],
        [null, null, { "type": "sparkline", "values": [10,12,15,14,18] }]
      ]
    }
  }
}

Cells are grid positions, not objects. values, styleMatrix, rowspan, colspan, and presentation are parallel 2D arrays of the same shape, with null as the empty marker. cat it, grep it, diff it, jq it. The format is exactly what it appears to be on disk.

See it live: JavaScript demo · Rust WASM demo (coming soon)

§1Three bridges

xlli's strategic position is to be the structured-data citizen of the Pandoc world. Three bridges define what that means in practice. Each is independently useful; together they describe how xlli content moves through the document ecosystem without losing what makes it structured.

01 / Pandoc

The spreadsheet bridge

format · convert

Pandoc has had a tables story for years and a readers/writers framework that scales beautifully — but no structured-spreadsheet target. pandoc --to xlli reads anything Pandoc reads; pandoc --from xlli puts xlli content into LaTeX, DOCX, HTML, ICML, EPUB. Reader and writer in collaboration with the Pandoc community, upstream-bound.

02 / RawBlock

The in-document bridge

embed · transit

xlli embeds inside any Pandoc-routed document as RawBlock "xlli". One Markdown source flows to a styled HTML page with a rendered microtable, an .xlsx with a real worksheet, or a JSON pipeline that picks out only the embedded data. Structured data without a sidecar file.

03 / MathIR

The codeBlock bridge

typed source · math

xlli's codeBlocks dictionary carries typed source by language tag. language: "python" and "sql" are what Pandoc's CodeBlock already understands. language: "mathir" is a structured-mathematics intermediate representation, round-trippable through xlli without losing its tree.

More: Architecture · Pandoc bridge details

§2MicroTable now. NanoTable next.

xlli's table story stages in two pieces. MicroTable is the entry-level grid that ships first; NanoTable is the full spreadsheet engine that graduates to public later. Both live inside the same canonical container, so adopters who start with MicroTable today move to NanoTable without migration.

Now · v0.2 · Open source

MicroTable

xlli's entry-level table. The reference implementation of documentKind: "container": CSS-style named styles, spans, presentation cells, HTML-first rendering. Fits naturally into the data models browser spreadsheet libraries already use. This is where most adopters start.

Next · v1.0 · Graduating from private

NanoTable

The full grid engine — LibreOffice / Excel feature parity, plus a handful of extras. Graduates to public alongside the composition dictionaries (sections, cards, pages, codeBlocks, mathBlocks). When NanoTable lands, the same canonical JSON that carries a MicroTable today will carry an entire workbook.

§3Implementations

Two reference engines maintained in lockstep, validated by golden-file tests that produce byte-identical canonical JSON. Implementations in any language are welcome — pass the conformance suite, list yourself.

xlli-cs
C# / .NET 6, 8, 10 · reference engine
NuGet · TBA
xlli-rs
Rust · reference engine
crates.io · TBA
xlli-js
JavaScript · Node, browser · via Rust + wasm-bindgen
npm · TBA
xlli-py
Python · via Rust + PyO3
PyPI · TBA
pandoc
Haskell reader/writer · upstream in Pandoc
v0.2 · in collaboration

§4Get involved

xlli is in late-private collaboration. v0.2 graduates the format and reference implementations to fully public. If you want early access to drafts, reference implementations, or the conformance test suite during the private phase, get in touch.