Skip to content
Palamedes

Open-source i18n tooling for JavaScript & TypeScript

One translation model.Every framework.

Write messages where your UI happens. Keep source-string-first .po catalogs your translators can actually read. Ship the same runtime model across Next.js, TanStack Start, SolidStart, Waku, React Router, and Remix v3 — with a Rust core that ran a checked extract/update benchmark across a real-app-shaped 1,500-file corpus 12.99× faster than Lingui on the recorded machine-local run.

Quick install

pnpm add -D @palamedes/cli

01 — Model

Your i18n setup should not splinter when your framework changes.

Most teams relearn internationalization with every migration: new runtime, new message IDs, new catalog quirks. Palamedes keeps the parts you touch every day stable — and lets the framework be the only thing that changes.

Write messages in place

Macro-style authoring next to your JSX. No message-ID bookkeeping, no separate dictionary files to keep in sync.

More →

One identity model

Messages are identified by message + context — stable across refactors, frameworks, and years of catalog history.

More →

One runtime call

getI18n() resolves the active instance everywhere: server components, client islands, backend request handlers.

More →

02 — Workflow

The whole workflow, honestly small.

import { t, plural } from "@palamedes/core/macro"
import { Trans } from "@palamedes/react"
export function Booking({ seats }: { seats: number }) {
return (
<>
<h1>{t`Your trip to Lisbon`}</h1>
<p>{plural(seats, { one: "# seat left", other: "# seats left" })}</p>
<Trans>Free cancellation until <b>24 hours</b> before departure.</Trans>
</>
)
}

Messages live where the UI happens.

Rendered

The same component, in every locale, in every framework.

en-US

Your trip to Lisbon

3 seats left€1,234.00

Jul 12, 2026

de-DE

Deine Reise nach Lissabon

3 Plätze frei1.234,00 €

12. Juli 2026

es-ES

Tu viaje a Lisboa

Quedan 3 asientos1234,00 €

12 jul 2026

one component · copy, plurals, currency & dates change together

03 — Proof

We don't ask you to trust a slogan. The repo shows the work.

Every framework/strategy combination is a real app, re-verified in CI through the same Playwright flow — with public demos where the hosting is ready. Every benchmark number links to a checked-in, re-runnable report.

FrameworkCookiecookieRouterouteSubdomainsubdomainTLDtld
Next.jsnextjs
✓ verified
✓ verified
✓ verified
✓ verified
provisioningsource
TanStack Starttanstack
✓ verified
✓ verified
✓ verified
✓ verified
provisioningsource
SolidStartsolidstart
✓ verified
✓ verified
✓ verified
✓ verified
provisioningsource
Wakuwaku
✓ verified
✓ verified
✓ verified
✓ verified
provisioningsource
React Routerreact-router
✓ verified
✓ verified
✓ verified
✓ verified
provisioningsource
Remix v3remix
✓ verified
provisioningsource
✓ verified
provisioningsource
✓ verified
✓ verified
provisioningsource

live demo · ◌ provisioning (#306) · ✓ CI browser-verified — all 24 apps run the same verification flow

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

Palamedes
174 ms
i18next-parser
1562 ms
Lingui
2254 ms
ms · linear

Machine-local run (darwin/arm64, Node v24.18.0, 2026-07-06), median of 7 runs — not a marketing average. Methodology →

All benchmarks & the verification story

04 — Scope

Palamedes deliberately owns less. It keeps the part of i18n you touch every day — your messages, your catalog, the runtime lookup — and hands everything framework-specific back to your framework.

05 — Maintainer

Built from repeat experience, not a weekend take.

Palamedes is maintained by Sebastian Software GmbH. It is the third generation of source-string-first JavaScript i18n tooling from the same author — from gettext-style macro systems in qooxdoo to a full enterprise Lingui migration at Regrello (acquired by Salesforce in 2025). The lessons are written down as 16 ADRs before you depend on the tool.

06 — Packages

Small packages, one model.

You own the code. You run the commands. Every piece is a scoped npm package your repo controls.

Your first working translation is 5 minutes away.