05 — Side by side
The comparison, without the adjectives.
Where a row cites a measurement, it comes from the checked benchmark report in the repository. Where nothing was measured, the row says so.
| Criteria | Lingui | Palamedes |
|---|
| Authoring | Macros, JSX-first | Macros, JSX-first — deliberately familiar |
|---|
| Message identity | Source-derived IDs or explicit custom IDs | message + context only, no second convention |
|---|
| Runtime access | i18n object, hooks, macros | getI18n(), one model everywhere |
|---|
| Catalog engine | JS tooling with a plugin ecosystem | Native Rust core, semantic merge and audits |
|---|
| Extract + update, realistic corpus | 2200 ms vs 73 ms | 30.32× faster on realistic extract + catalog update¹ |
|---|
| Framework coverage | React, React Native, Vue, Solid, vanilla | React and Solid across Next.js, TanStack Start, SolidStart, Waku, React Router and Remix v3; no Vue, no React Native |
|---|
| Verified host coverage | Broad UI-framework packages | Smoke-verified examples; browser-capable examples checked weekly |
|---|
¹ Median of 7 runs on the realistic corpus (1,500 files, ~400k lines, 6,000 messages — half the files carry no i18n marker), one machine-local run, same semantic validation for every tool. The full report and the harness are in the repository, and the site build fails if these numbers drift from it.