Compiler-based i18n library that emits tree-shakable translations, leading to up to 70% smaller i18n bundle sizes.
Documentation Β· Quick Start Β· Report Bug
Used in production by
Β Β Β
Β Β Β
Β Β Β
Β Β Β
...and more
Trusted by framework authors
SvelteKit's official i18n integration
Part of TanStack's CI pipeline
// messages/en.json
{
"greeting": "Hello {name}!"
}import { m } from "./paraglide/messages.js";
m.greeting({ name: "World" }); // "Hello World!" β fully typesafeThe compiler generates typed message functions. Your bundler tree-shakes unused messages. Expect up to 70% smaller i18n bundle sizes compared to runtime i18n libraries (e.g. 47 KB vs 205 KB).
| Smaller i18n Bundle | Up to 70% smaller i18n bundle size than runtime i18n libraries. |
| Tree-Shakable | Unused messages are eliminated by your bundler. |
| Fully Typesafe | Autocomplete for message keys and parameters. Typos become compile errors. |
| Framework Agnostic | Works with React, Vue, Svelte, Solid, TanStack, or vanilla JS/TS. |
| Built-in i18n Routing | URL-based locale detection and localized paths out of the box. |
| Built on inlang | Integrates with Sherlock (VS Code extension), Fink (translation editor), and more. |
React Β·
Vue Β·
TanStack Start Β·
SvelteKit Β·
React Router Β·
Astro Β·
Vanilla JS/TS
Tip
Paraglide is ideal for any Vite based app. Setup is just one plugin and Vite's tree-shaking eliminates unused messages automatically. Get started β
npx @inlang/paraglide-js initThe CLI sets up everything:
- Creates your message files
- Configures your bundler (Vite, Webpack, etc.)
- Generates typesafe message functions
Then use your messages:
import { m } from "./paraglide/messages.js";
import { setLocale, getLocale } from "./paraglide/runtime.js";
// Use messages (typesafe, with autocomplete)
m.hello_world();
m.greeting({ name: "Ada" });
// Get/set locale
getLocale(); // "en"
setLocale("de"); // switches to GermanFull Getting Started Guide β
Paraglide compiles an inlang project into tree-shakable message functions. Your bundler eliminates unused messages at build time.
ββββββββββββββββββ
β Inlang Project β
βββββββββ¬βββββββββ
β
βΌ
ββββββββββββββββββββββββββ
β Paraglide Compiler β
βββββββββββββ¬βββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββ
β ./paraglide/messages.js β
β ./paraglide/runtime.js β
ββββββββββββββββββββββββββββ
Watch: How Paraglide JS works in 6 minutes β
Paraglide supports locale-aware formatting via declaration formatters:
plural(Intl.PluralRules) for plural and ordinal categoriesnumber(Intl.NumberFormat) for numbers, currency, compact notation, and moredatetime(Intl.DateTimeFormat) for dates/times with locale-aware output
Gender and custom selects are supported via the variants system.
// Pluralization example
m.items_in_cart({ count: 1 }); // "1 item in cart"
m.items_in_cart({ count: 5 }); // "5 items in cart"
// Works correctly for complex locales (Russian, Arabic, etc.)Message format is plugin-based β use the default inlang format, or switch to i18next, JSON, or ICU MessageFormat via plugins. If your team relies on ICU MessageFormat 1 syntax, use the inlang-icu-messageformat-1 plugin.
Formatting Docs β Β· Pluralization & Variants Docs β
| Feature | Paraglide | i18next | react-intl |
|---|---|---|---|
| i18n bundle size | Up to 70% smaller via tree-shaking | β Ships all messages | β Ships all messages |
| Tree-shakable | β | β | β |
| Typesafe | β | Partial | β |
| Framework agnostic | β | Wrappers needed | React only |
| i18n routing | β Built-in | β | β |
"Paraglide JS is by far the best option when it comes to internationalization. Nothing better on the market."
Ancient-Background17 Β· Reddit
"Just tried Paraglide JS. This is how i18n should be done! Totally new level of DX."
Patrik Engborg Β· @patrikengborg
"I was messing with various i18n frameworks and must say Paraglide was the smoothest experience. SSG and SSR worked out of the box."
Dalibor Hon Β· Discord
"I migrated from i18next. Paraglide reduced my i18n bundle from 40KB to ~2KB."
Daniel Β· Why I Replaced i18next with Paraglide JS
Paraglide is built on the open inlang format. Works with:
| Tool | Description |
|---|---|
| Sherlock | VS Code extension for inline translation editing |
| CLI | Machine translate from the terminal |
| Fink | Translation editor for non-developers |
| Parrot | Manage translations in Figma |
Explore the inlang ecosystem β
- Getting Started
- Framework Guides (React Router, SvelteKit, Astro, etc.)
- Message Syntax & Pluralization
- Formatting (Number/Date)
- Routing & SSR
- API Reference
We welcome contributions! See CONTRIBUTING.md for guidelines.
MIT β see LICENSE