Ask your question and get a summary of the document by referencing this page and the AI provider of your choice
Version History
- "Merged configOptions into single options object; proxy bundled into intlayer()"v9.0.06/25/2026
If you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
intlayerProxy
intlayerProxy is a Vite plugin that registers locale-routing middleware for every environment: dev server, preview server, and production SSR (Nitro / TanStack Start).
Since Intlayer v9intlayerProxyis automatically included inside the mainintlayer()plugin and enabled by default viarouting.enableProxy: true. You only need to register it separately if you need lower-level control or are using it outside the standardintlayer()setup.
Usage
As part of intlayer() (recommended, v9+)
Pass proxy options to the main plugin instead of registering intlayerProxy separately:
Copy the code to the clipboard
Standalone (when needed)
Copy the code to the clipboard
Options
Copy the code to the clipboard
All options are optional and passed as a single object:
Open the table in a modal to view all data content clearly
| Option | Type | Description |
|---|---|---|
ignore | (req: IncomingMessage) => boolean | Predicate that excludes requests from locale routing. Return true to skip a request (e.g. API routes, health checks). |
configOptions | GetConfigurationOptions | Intlayer configuration overrides forwarded to getConfiguration(). Use when you need the proxy to read a specific config file or override values. |
Example
Copy the code to the clipboard
createIntlayerProxyHandler
createIntlayerProxyHandler creates a standalone, framework-agnostic Node.js (req, res, next) middleware that contains all the locale-routing logic. It is useful in environments where the Vite plugin API is unavailable (e.g. a plain Node.js server or a custom Nitro module).
Copy the code to the clipboard
Production SSR (TanStack Start / Nitro via h3)
Copy the code to the clipboard
Routing behaviour
The middleware mirrors the routing logic from next-intlayer middleware and supports all Intlayer routing modes.
Routing modes
Open the table in a modal to view all data content clearly
| Mode | URL visible in browser | Behaviour |
|---|---|---|
prefix | /en/about | Default. Locale prefix in the URL. Default locale redirects to the un-prefixed URL unless prefix-all. |
prefix-all | /en/about, /fr/about | All locales — including default — are always prefixed. |
no-prefix | /about | No locale in the URL. Locale is stored in cookies only; URL rewrites happen internally. |
search-params | /about?locale=en | Locale passed as a query parameter. Redirects to add/update the locale param when missing or stale. |
Detection priority
- URL path prefix (e.g.
/fr/about→fr). - Cookie / localStorage value (
intlayer-locale). Accept-Languageheader.defaultLocalefrom config.
Automatic bypass
The middleware always passes these requests straight through without locale handling:
- Requests matching the
ignorepredicate. /node_modules/**/@**– Vite internals (@vite/,@fs/,@id/, etc.)./_**– server internals (__vite_ping,__manifest, etc.).- Requests whose path ends with a file extension (static assets). If a locale prefix is present on a static asset path (e.g.
/fr/logo.png), it is stripped so the file can be served correctly.
Domain routing
When routing.domains is configured in your Intlayer config, the middleware handles cross-domain locale routing:
- A request for
/zh/aboutonintlayer.orgis redirected tohttps://intlayer.zh/aboutwhendomains.zh = "intlayer.zh". - A request to
intlayer.zh/aboutis rewritten internally to/zh/aboutso the[locale]route parameter is populated.
Redirect loop protection
The middleware tracks redirect counts per originalUrl → newUrl pair within a 2-second sliding window. More than 10 redirects within that window returns a 500 response with a descriptive error instead of looping forever.
Nitro / production SSR (automatic injection, v9+)
When intlayerProxy is used as a Vite plugin, it carries a .nitro property. The nitro/vite build plugin reads this property and pushes it into nitroConfig.modules, so intlayerNitroHandler is registered as a Nitro server middleware automatically — no manual configuration is needed for production SSR.
The Nitro handler uses h3 v2's Web Fetch API event model (not fromNodeMiddleware) so it is compatible with all Nitro presets: Node, Bun, Deno, edge runtimes.
Deprecated aliases
Open the table in a modal to view all data content clearly
| Deprecated export | Replacement |
|---|---|
intlayerMiddleware | intlayerProxy |
intLayerMiddlewarePlugin | intlayerProxy |
