Paraglide JS
Overview
Paraglide JS is a compiler-based i18n library that generates typed message functions and runtime helpers. Use this skill when a project needs Paraglide setup, message usage, locale detection, SSR integration, or refactoring around generated paraglide/ output.
When To Use
- Adding Paraglide JS to a new or existing app
- Updating locale strategy order or custom strategies
- Wiring SSR locale detection with
paraglideMiddleware() - Integrating Paraglide into TanStack Start
- Reusing one
project.inlangacross a monorepo
Do not use this skill for generic copywriting or translation quality review. It is for code integration and runtime behavior.
Core Workflow
- Identify the app shape: Vite app, SSR app, TanStack Start app, or monorepo.
- Prefer the Vite plugin for Vite-based apps.
- Use CLI compilation when bundler integration is unavailable or when a package needs explicit compile scripts.
- Add server middleware only for SSR/server request flows.
- Keep
project.inlangand message files as the source of truth; treat generatedparaglide/output as build artifacts. - Recompile after changing messages, locales, strategy, or output settings.
Rules Of Thumb
- Prefer
paraglideVitePlugin()in Vite projects instead of hand-rolling generated output. - Prefer built-in strategies before adding custom ones.
- Order strategies intentionally. Earlier strategies win.
- Use one owner for URL rewriting. Do not combine router-level URL rewrites and middleware-driven URL localization without checking for redirect loops.
- In monorepos, default to "each package compiles" unless every consumer can share one identical strategy/runtime.
Reference Guide
- Read
references/basics.mdfor setup, generated files, and message/runtime usage. - Read
references/strategies.mdfor strategy ordering and custom strategies. - Read
references/tanstack-start.mdfor TanStack Start integration patterns. - Read
references/monorepo.mdfor sharedproject.inlangpatterns across packages.
Common Mistakes
- Editing generated
src/paraglide/*files directly instead of changing source messages or config - Forgetting to recompile after changing
messages/*.jsonorproject.inlang/settings.json - Adding
paraglideMiddleware()to client-only SPAs - Putting a preference strategy before
urlwithout expecting redirect behavior - Using TanStack Router rewrites and URL-based middleware localization together without testing for loops
External Sources
- Official docs: https://inlang.com/m/gerre34r/library-inlang-paraglideJs/
- Vite guide: https://inlang.com/m/gerre34r/library-inlang-paraglideJs/vite
- Monorepo guide: https://inlang.com/m/gerre34r/library-inlang-paraglideJs/monorepo
- Middleware guide: https://inlang.com/m/gerre34r/library-inlang-paraglideJs/middleware
- TanStack Router i18n guide: https://tanstack.com/router/v1/docs/framework/react/guide/internationalization-i18n