Skip to content

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.

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

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.

Locale strategies in depth →

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.

See your framework speaking three languages — right now.