Skip to content

Framework matrix

Six server frameworks. Vite. Two backend runtimes. One mental model.

Frontend and full-stack hosts use first-party adapters and verified example applications. Hono and Express are a separate backend path: they use the shared runtime directly with request-local locale resolution. Start with the integration boundary you own, then inspect its exact setup and verification evidence.

01 — Matrix

The 6 × 4 server matrix, plus Vite.

FrameworkCookieRouteSubdomainTLD
Next.js
✓ verified
✓ verified
✓ verified
✓ verified
TanStack Start
✓ verified
✓ verified
✓ verified
✓ verified
Solid
✓ verified
✓ verified
✓ verified
✓ verified
Waku
✓ verified
✓ verified
✓ verified
✓ verified
React Router
✓ verified
✓ verified
✓ verified
✓ 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 has a focused browser proof; public hosting is pending.

All 25 apps are smoke-checked on relevant pull requests and main pushes. The 22 browser-capable examples — the20 established UI-adapter matrix apps plus the Vite MDX proof — cover SSR output, locale switching, and localized server actions or functions in weekly or manual Playwright runs; the four Remix v3 apps cover server responses and locale handling through smoke checks. Versioned screenshots cover the 20 UI-adapter examples; Vite has no capture artifact. Cookie, route, subdomain, and TLD demos are publicly hosted for all five browser-verified framework families. Every Remix v3 host remains a source-only proof surface and is still provisioning. Hosting status is documented in the repo's demo-deployments guide.

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 handles the host-specific build wiring; authoring, catalogs, and runtime access stay on the shared model.

cookieroutesubdomaintldi18n guide →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.

cookieroutesubdomaintldi18n guide →source →

Solid

examples/solid-*

Solid-native rich-message rendering with @palamedes/solid — the same macro authoring, hook-free lookup, and catalogs as React.

cookieroutesubdomaintldi18n guide →source →

Waku

examples/waku-*

Minimal RSC framework. Waku exercises the request-local runtime model through a different server integration, which is why it belongs in the matrix.

cookieroutesubdomaintldi18n guide →source →

React Router

examples/react-router-*

Framework-mode React Router with loaders and actions. The classic SPA-plus-SSR shape, same catalogs, same runtime.

cookieroutesubdomaintldi18n guide →source →

Remix v3

examples/remix-*

The new Remix stack — not React Router Framework Mode and not React. Node and browser asset loaders cover ordinary and rich Remix UI macros; the cookie example proves SSR, hydration, interaction, and full-document locale navigation.

◌ local / CIi18n guide →source →

Vite

packages/vite-plugin

The shared build integration behind the TanStack Start, Solid, Waku, and React Router families. Use it directly with React or Solid for macro transforms, PO imports, and build diagnostics.

i18n guide →source →

04 — Backend

Backend services are a separate integration path.

Hono and Express do not use a frontend adapter. They call the shared runtime with request-local locale resolution, so transactional emails, API errors, and PDF generation use the same catalogs without pretending to be framework UI.

See your framework speaking three languages — right now.