Where does Palamedes need to run?Choose an integration →
Choose a frontend or full-stack adapter, or take the same request-local model into a backend service.
How should locale selection live in the application?Explore locale architecture →
Compare cookie, route-prefix, subdomain, and top-level-domain shapes before wiring the host.
Does the architecture fit your constraints?Inspect the architecture →
Inspect the system boundary first, then test its performance, message semantics, and evidence.
Are you starting fresh or moving an existing stack?Start the guided setup →
Follow one guided first translation, or enter through the migration and implementation material you need.
Open-source i18n for TypeScript
Source to runtime · MIT
A foundation you can keep
Clear.Complete.Fast.Pick three.
Build i18n on one coherent TypeScript foundation: source-local messages, first-party framework integrations, four proven locale architectures, repository-owned catalogs, and a native toolchain that stays fast as the codebase grows.
01 — Start from your question
Choose a path
The right evidence depends on the decision in front of you.
Begin with the question your team actually needs to answer. Every route returns to the same source-to-runtime model and its checked boundaries.
First-party integrations
Frontend and full-stack adapters are verified as applications. Backend integrations use the same request-local runtime in Hono and Express.
Brand-asset status →Backend integrations
02 — Clear
Developer experience
Write the message where the interface happens.
Messages stay readable in TypeScript and JSX. Palamedes transforms them for extraction and runtime use without making developers manage parallel identifiers, generated wrappers, or a second authoring language.
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 loaded locale, with the same model across supported hosts.
en-US
Your trip to Lisbon
Jul 12, 2026
de-DE
Deine Reise nach Lissabon
12. Juli 2026
es-ES
Tu viaje a Lisboa
12 jul 2026
03 — Complete
Already wired
Framework integrations and locale architectures are two different promises.
The adapter layer supplies tested glue code for each supported host. Separately, the example matrix proves four application shapes for locale selection and URLs. You do not have to turn generic compatibility into an architecture yourself.
Integration breadth
Frameworks
- Next.js
- TanStack Start
- Solid
- Waku
- React Router
- Remix v3
First-party adapter code and verified host wiring — not a compatibility logo wall.
Deployment breadth
Locale architectures
- Cookie
- Route
- Subdomain
- TLD
Cookie, route, subdomain, and TLD are implemented application shapes, not documentation-only recipes.
The local workflow
A single hand-off: write in the component, extract to a catalog, translate that catalog, then render through the same runtime contract.
01
Write
src/*.tsx
t`…` macro in the component
02
Extract
pmds
finds messages and updates the catalog
03
Translate
.po catalog
source-string-first
04
Render
supported hosts
same runtime model
04 — Fast
Checked performance
Fast enough to stay out of the way.
The realistic workflow measures extraction and catalog updates across 1,500 files. The exact command, fixtures, machine details, and semantic checks remain available for reproduction.
$ pnpm benchmark:e2e-workflow
realistic corpus 1,500 files (750 with i18n), ~400k lines, 6,000 messages
Palamedes 73 ms extract + catalog update
fbtee 7.3 s same scope
exact report, fixtures, and semantic checks: checked inChecked result ledger
Realistic corpus — 1,500 files across ~400k lines, 6,000 messages (median of 7 runs)
| Workflow | Result | Relative time |
|---|---|---|
| Palamedesextract + catalog update | 47–73 ms* | 1× |
| React Intlextraction only · narrower scope | 424 ms | 5× |
| Linguiextract + catalog update | 2.2 s | 30× |
| fbteecollect + two-catalog update · two CLI commands | 7.3 s | 100× |
| General Translationextract + catalog update | 5.1 s | 70× |
| i18next-cliextract + catalog update | 5.8 s | 80× |
* 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.
05 — Architecture
A native core handles extraction, catalogs, validation, merging, and compilation. Each framework adapter handles only its own routing, rendering, and locale conventions.
Palamedes owns it — shared across supported hosts
└─── one Rust core, everywhere ───┘
Each host owns it — specific to that stack
Adopt another supported host, and the integration changes without redefining your messages or catalogs. The full local workflow stays coherent.
06 — Verification
Executable evidence
The matrix is made of applications, not logos.
Every cell represents implemented source. All 25 examples are smoke-checked on relevant changes, while 21 browser-capable examples exercise SSR output, locale switching, and localized server actions on a schedule.
| Framework | Cookie | Route | Subdomain | TLD |
|---|---|---|---|---|
| Next.js | ✓ verified | |||
| TanStack Start | ✓ verified | |||
| Solid | ✓ verified | |||
| Waku | ✓ verified | |||
| React Router | ✓ verified | |||
| Remix v3 | ✓ verified · host pending public host pending | ✓ verified · host pending public host pending | ✓ verified · host pending public host pending | ✓ verified · host pending public host pending |
● public demo · ◌ public host pending · ✓ verified in CI — Remix v3 is currently a local/CI proof surface.
07 — Trust
Built for the long run
The tradeoffs are documented before you depend on them.
Palamedes is maintained by Sebastian Software GmbH. It is the third generation of source-string-first i18n tooling from the same author, shaped by framework changes and enterprise migration work.
The public boundary is as important as the capability: MIT-licensed source, repository-owned catalogs, and no hosted TMS, machine translation, or account requirement. Architecture, release behavior, security policy, and rejected alternatives are documented before you depend on them.
08 — FAQ
Boundaries, stated plainly
What Palamedes does—and what it does not claim to do.
These answers are part of the page, the product boundary, and the structured data. They stay deliberately specific so a useful answer does not become a broader promise.
01Is Palamedes ready for production use?
Palamedes publishes its source, tests, examples, benchmark fixtures, and decision records so teams can inspect the supported surface. Production suitability remains a team decision: verify the framework, locale architecture, and workflow you intend to use against the current documentation and release notes.
02Which frameworks does Palamedes support?
Palamedes has first-party integrations for Next.js, TanStack Start, Solid, Waku, React Router, Remix v3, and Vite. The framework matrix shows the example and verification status for each supported host; Remix v3 remains explicitly qualified as preview work.
03Does Palamedes replace a translation management system or write translations with AI?
No. Palamedes provides a complete local workflow for source messages and repository-owned catalogs. It does not provide a hosted TMS, machine translation, or an AI translation service.
04Where do translation catalogs live?
Catalogs are repository-owned artifacts. The toolchain extracts messages, updates catalogs, audits and merges them semantically, and compiles runtime artifacts as part of the application workflow.
05How do translators work with Palamedes?
Palamedes keeps source-string-first PO catalogs readable in version control. Translators can work with those catalogs directly or through the import and export path of a chosen TMS; the exact external workflow and fidelity depend on that product and its project configuration.
06Can a team migrate from an existing i18n library?
Yes, but migration depends on the source model, catalog format, runtime usage, and framework host. Palamedes provides a Lingui migration guide and comparison pages for selected tools; use them to establish the exact boundary before planning a migration.