Skip to content

Benchmarks · verification · decisions

Claims you can re-run.

Every number on this page comes from a checked-in, machine-readable report with fixtures and commands in the repo. If a claim can't be re-run, we don't make it.

Re-run from the repository root

pnpm bench:e2e

01 — Benchmarks

Three corpora, two lanes, one rule: every number re-runs.

The end-to-end benchmark measures source scanning, extraction, and output writes. The catalog-aware tools also update existing catalogs; the React Intl extraction workflow writes one aggregated extraction artifact and is marked as narrower scope. Every run uses the same logical inventory and is validated semantically. The cached Palamedes re-run is shown separately as a capability, not turned into a competitor speedup claim.

End-to-end extract + catalog update

Three checked corpora

2026-08-14 · Node v24.19.0 · darwin/arm64 · median of 7

CorpusPalamedes coldPalamedes warm · 5 files touchedSame-scope tools
80 files, 640 messages12 ms9 ms27–51× slower
240 files, 1920 messages21 ms13 ms24–50× slower
1,500 files (750 with i18n), ~400k lines, 6,000 messages73 ms47 ms30–100× slower

Checked result ledger

Realistic corpus — 1,500 files across ~400k lines, 6,000 messages (median of 7 runs)

Methodology →
Rounded workflow times and relative factors for 1,500 files (750 with i18n), ~400k lines, 6,000 messages. Exact values are available in the checked benchmark report.
WorkflowResultRelative time
Palamedesextract + catalog update47–73 ms*
React Intlextraction only · narrower scope424 ms
Linguiextract + catalog update2.2 s30×
fbteecollect + two-catalog update · two CLI commands7.3 s100×
General Translationextract + catalog update5.1 s70×
i18next-cliextract + catalog update5.8 s80×

* 47 ms is Palamedes on a cached re-run after 5 changed source files; 73 ms is the cold workflow result. No speedup factor is calculated for the non-comparable cached run. Cache details →

Times are rounded to display precision and relative factors are rounded down. Exact medians remain in the checked report. Machine-local run: darwin/arm64, Node v24.19.0, 2026-08-14, median of 7 runs.

02 — Verification

25 apps smoke-checked on relevant changes; 21 browser-checked weekly.

01

Build

All 25 example apps build and smoke-test against the workspace packages on relevant PRs and main pushes — no mocked integrations.

02

Drive

21 browser-capable examples run the Playwright flow weekly or on manual dispatch: load, SSR output, locale switch, and localized server actions.

03

Capture

Screenshots are versioned in the repo, so 'works across frameworks' is a diffable artifact, not a slide.

nextjs-route…/de
Versioned CI screenshot: nextjs-route · /de · CI run
nextjs-route · /de · CI run
react-router-cookie…
Versioned CI screenshot: react-router-cookie · de · CI run
react-router-cookie · de · CI run
solidstart-route…/de
Versioned CI screenshot: solidstart-route · /de · CI run
solidstart-route · /de · CI run
waku-cookie…
Versioned CI screenshot: waku-cookie · de · CI run
waku-cookie · de · CI run
All versioned screenshots →

03 — Catalog quality

Fast would be worthless if the catalogs were wrong.

Catalog semantics live in one dedicated engine (ferrocat): parsing, merging, structured audits, and ICU authoring diagnostics. The benchmark harness validates every tool run semantically — message inventories are compared, not just timed.

Structured audits

Machine-readable catalog audits catch missing translations, stale entries, and metadata drift in CI.

ICU diagnostics

Authoring mistakes in plural/select syntax are flagged at extract time, not at runtime in production.

Semantic merging

A Git merge driver resolves catalog conflicts by meaning, not by line — no more broken .po files after rebases.

04 — ICU semantics

ICU stays ICU from source to runtime.

A checked-in nested select + plural message runs through extraction, macro transformation, PO catalog update, catalog compilation, and six executions of the transformed runtime function. The proof compares exact messages and selector structure instead of treating ICU as a yes/no feature checkbox.

05 — Decision trail

26 decisions, written down before you depend on them.

The ADRs cover message identity, the native boundary, adapter architecture — and, just as deliberately, what Palamedes refuses to own. Reading them is the fastest way to know if our tradeoffs match yours.

Convinced by the receipts? Start with the guided quickstart.