본문으로 건너뛰기

XTL Implementations

Implementations of the XTL spec. xl3 is the reference implementation.

LanguageRepoPackageSpec versionConformanceNotes
TypeScriptxl3-lang/xl3@xl3-lang/xl3 1.0.0-rc.1XTL 0.1 (draft)reference; all current fixtures pass (live dashboard)Browser + Node ≥ 20.12; in-memory object binding and .xlsx export in Browser/Node; runner via npx xl3-conformance; 3-TZ matrix in CI
Rust (WASM)xl3-lang/xl3-rsxl3-core + xl3-wasmXTL 0.1 (draft)partial 119/148 Stage 1 (see freshness note below)Pure-Rust acceleration core (calamine + rust_xlsxwriter) wrapped for browser / Node hosts. Drives the opt-in engine: 'wasm' path introduced in xl3 0.9.0. Outstanding gaps: HYPERLINK function, shared formulas, ~20 validation error sites
Pythonxl3-lang/xl3-py(unpublished)XTL 0.1 (draft)133/133 Stage 1 on the corpus it ran (see freshness note below)Tracked alongside the reference impl; drop a --report=json artifact under conformance/reports/ and npm run conformance:dashboard will pick it up

Report freshness

The two figures above come from the JSON reports committed under conformance/reports/, and both predate the current corpus. The live corpus size is in conformance/DASHBOARD.md, which is generated — this section deliberately does not repeat it, because a hardcoded count goes stale every time a fixture lands.

ReportRan againstResult
xl3-wasm-0.1.0.json (2026-06-08)154 fixtures119 passed, 29 failed, 6 skipped
xl3-py-0.1.0a3.json (2026-05-23)133 fixtures133 passed, 0 failed, 6 skipped

Read the "Ran against" column before the "Result" column. A report saying 133/133 means 100% of what that report ran, not of the corpus. Both reports are tens of fixtures behind — the corpus has grown in 0.9.0, 0.10.0, and again on 2026-07-28 (fixtures 162-170, the data-loss group).

So a port's standing against today's corpus is unknown until it submits a fresh report. ROADMAP G13 is judged on a current report, not on these. This is not hypothetical: the 2026-07-28 gate audit ticked G13 off 133/133 without checking the denominator, and it was reverted on 2026-07-30.

Production users

ROADMAP gate G15 points at this section. It ticks when there is at least one named user — either an external company that has given permission to be listed, or the maintainer's own employer running xl3 in scheduled production with a public case study.

OrganizationSinceWorkloadCase study
none listed yet

G15 is in progress, not blocked: a production deployment at the maintainer's employer has been running since the week of 2026-05-26. The gate ticks when the case study is published and a row lands here — a running deployment alone does not satisfy it, because the gate's point is a reference a third party can verify.

If you run xl3 in production and are willing to be named, open a PR adding a row. Partial detail is fine (organization + workload, no case study link) — say so in the PR and we will mark the row accordingly.

Adding an implementation

Read PORTERS_GUIDE.md first — it distinguishes spec-normative requirements from TS-impl-incidental details and gives a recommended development order keyed to the conformance corpus.

To list a port here:

  1. Implement enough of XTL 0.1 to pass the conformance fixtures you target.
  2. Run your impl against conformance/ following conformance/runner-protocol.md.
  3. Open a PR adding a row to the table above with: language, package URL, spec version targeted, conformance status (full / partial / N of M fixtures).

Ports under active development are welcome — link your in-progress repo even if conformance is partial.

Spec compliance levels

  • reference — this implementation. Definitionally conformant for its declared spec version.
  • full — passes all conformance fixtures for the declared spec version.
  • partial (N/M) — passes N of M fixtures. List the categories of fixtures not yet supported.
  • draft — early WIP, not yet running conformance.