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*1×
React Intlextraction only · narrower scope424 ms5×
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; 22 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

22 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
solid-route…/de
Versioned CI screenshot: solid-route · /de · CI run
solid-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

29 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.

No.DecisionStatus
  1. 001Project Scope and Open PositioningAccepted
  2. 002Rust-First Core with Thin Host AdaptersAccepted
  3. 003Source-String-First Message IdentityAccepted
  4. 004Internal Compiled Lookup KeysAccepted
  5. 005Universal `getI18n()` Runtime ModelAccepted
  6. 006Ferrocat as Catalog and ICU FoundationAccepted
  7. 007Native Boundary and DistributionAccepted
  8. 008Framework Adapter ArchitectureAccepted
  9. 009Typed N-API Boundary with Workflow-First Native OperationsAccepted
  10. 010Generated TypeScript Types Derived from the Native Binding SurfaceAccepted
  11. 011Native Catalog Rendering Produces Bundler ModulesAccepted
  12. 012Translation Augmentation BoundaryAccepted
  13. 013Bounded Parallel ExtractionAccepted
  14. 014Native Transform Source MapsAccepted
  15. 015Runtime Formatter Subset DiagnosticsAccepted
  16. 016Native CLI And YAML-First ConfigurationAccepted
  17. 017Host Explicit Binary CLI Plugins In RustAccepted
  18. 018Binary Plugin Protocol For Rust-Hosted ExtensionsAccepted
  19. 019Extraction CacheAccepted (extended to shared source analysis)
  20. 020Locale Is Fixed for a Browser DocumentAccepted
  21. 021Shared Cross-Repository Site UIAccepted
  22. 022Generated Catalogs Use Executable Message FunctionsAccepted
  23. 023Public Application Runtime Is Parser-FreeAccepted
  24. 024The npm Launcher Is A Packaging Bridge With A Node-Free Escape HatchAccepted
  25. 025React Router RSC Entry Request ScopeAccepted
  26. 026Editorial Visual Brand SystemAccepted
  27. 027Privacy-Bounded CLI Update Check With Deployment-Gated RolloutAccepted; service readiness complete, activation configured for the next release
  28. 028Effective Flow Project Setup
  29. 029README Theme Composition

Convinced by the receipts? Start with the guided quickstart.