Framework matrix
Six frameworks. Four locale strategies. One mental model.
Every cell below is a real application — the same booking UI, the same catalogs, the same runtime calls — browser-verified in CI. Where public hosting is ready, open the demo, switch the language, and watch copy, plurals, currency, and dates change together.
01 — Matrix
The 6 × 4 verified matrix.
| Framework | Cookiecookie | Routeroute | Subdomainsubdomain | TLDtld |
|---|---|---|---|---|
| Next.jsnextjs | ✓ verified provisioningsource | |||
| TanStack Starttanstack | ✓ verified provisioningsource | |||
| SolidStartsolidstart | ✓ verified provisioningsource | |||
| Wakuwaku | ✓ verified provisioningsource | |||
| React Routerreact-router | ✓ verified provisioningsource | |||
| Remix v3remix | ✓ verified provisioningsource | ✓ verified provisioningsource | ✓ verified provisioningsource |
● live demo · ◌ provisioning (#306) · ✓ CI browser-verified — all 24 apps run the same verification flow
All 24 apps are verified in CI: SSR output, locale switching, localized server actions or server handlers. Screenshots cover the established UI-adapter matrix and are versioned in the repo. Cookie and route demos are publicly hosted for the established adapters today; subdomain, TLD, and Remix v3 public hosting are being provisioned — until then those cells link the verified source instead.
02 — Strategies
Pick the locale strategy your product needs — not the one your framework dictates.
Cookie
One URL for all locales. Best for apps behind login where SEO is irrelevant and switching should be instant.
Route segment
/de/checkout-style paths. The SEO-friendly default for public content with indexable localized pages.
Subdomain
de.example.com. Clean separation per market, works well with regional CDNs and analytics splits.
Top-level domain
example.de vs example.com. Maximum market trust; Palamedes maps each domain to its locale.
03 — Per framework
Your stack, specifically.
Next.js
examples/nextjs-*
App Router with server components and server actions. The @palamedes/next-plugin wires the transform into the Next build; everything else is the shared model.
cookieroute◌ subdomain◌ tldall source →
TanStack Start
examples/tanstack-*
Server functions and file-based routing, integrated through @palamedes/vite-plugin. Locale resolution runs in a server function; the client stays island-light.
cookieroute◌ subdomain◌ tldall source →
SolidStart
examples/solidstart-*
Fine-grained reactivity with @palamedes/solid — the same macro authoring and catalogs as React, no fork of your i18n strategy for a different renderer.
cookieroute◌ subdomain◌ tldall source →
Waku
examples/waku-*
Minimal RSC framework. If the model holds here, it holds in your custom setup too — that's why Waku is in the matrix.
cookieroute◌ subdomain◌ tldall source →
React Router
examples/react-router-*
Framework-mode React Router with loaders and actions. The classic SPA-plus-SSR shape, same catalogs, same runtime.
cookieroute◌ subdomain◌ tldall source →
04 — Backend
And it doesn't stop at the frontend.
The same getI18n() model runs in Hono and Express with request-local locale resolution — transactional emails, API error messages, and PDF generation speak the user's language from the same catalogs.