Paraglide JS

Paraglide JS

App

NPM Downloads GitHub Issues Discord License

Paraglide JS

๐Ÿช‚ Paraglide JS

Compiler-based i18n library with tree-shaking, full typesafety, and near zero runtime

Paraglide JS compiles your translations into tree-shakable message functions.
Unused translations are eliminated, and what remains is a fully typesafe API with autocomplete.

Documentation ยท Quick Start ยท Report Bug

Used in production by

Michelinย ย ย  Idealistaย ย ย  Architonicย ย ย  0.emailย ย ย  ...and more

Trusted by framework authors

Svelte Svelte's official i18n recommendation
TanStack Part of TanStack's CI pipeline

Code Preview

// messages/en.json
{
  "greeting": "Hello {name}!"
}
import { m } from "./paraglide/messages.js"

m.greeting({ name: "World" })  // "Hello World!" โ€” fully typesafe

The compiler generates typed message functions. Your bundler tree-shakes unused messages. Expect ~75% smaller bundles (47 KB vs 205 KB) compared to runtime i18n libraries. See benchmarks โ†’

Why Paraglide?

Tiny Runtime~300 bytes. No async loading. No waterfalls.
Tree-ShakableUnused messages are eliminated by your bundler.
Fully TypesafeAutocomplete for message keys and parameters. Typos become compile errors.
Framework AgnosticWorks with React, Vue, Svelte, Solid, TanStack, or vanilla JS/TS.
Built-in i18n RoutingURL-based locale detection and localized paths out of the box.
Inlang EcosystemVS Code extension, CLI, translation editor โ€” all work out of the box.

Works With Your Stack

React React ยท Vue Vue ยท TanStack TanStack Start ยท Svelte SvelteKit ยท Next.js Next.js ยท Astro Astro ยท JavaScript Vanilla JS/TS

Quick Start

npx @inlang/paraglide-js init

The 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 German

Full Getting Started Guide โ†’

How It Works

messages/en.json  โ”€โ”€โ”
messages/de.json  โ”€โ”€โ”ผโ”€โ”€โ†’  Compiler  โ”€โ”€โ†’  ./paraglide/messages.js
messages/fr.json  โ”€โ”€โ”˜                    ./paraglide/runtime.js
  1. You write messages in JSON (or any supported format)
  2. The compiler generates typed functions
  3. Your bundler tree-shakes unused messages
  4. Result: tiny, typesafe, fast

Message Format

Paraglide uses Intl.PluralRules for locale-aware pluralization, supporting all CLDR plural categories (zero, one, two, few, many, other) and ordinals (1st, 2nd, 3rd). 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.

Pluralization & Variants Docs โ†’

Comparison

FeatureParaglidei18nextreact-intl
Runtime size~300B10kB+8kB+
Tree-shakableโœ…โŒโŒ
Typesafeโœ…PartialโŒ
Framework agnosticโœ…Wrappers neededReact only
i18n routingโœ… Built-inโŒโŒ

Full Comparison โ†’

What Developers Say

"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

Talks

Ecosystem

Paraglide is built on the open inlang format. Works with:

ToolDescription
SherlockVS Code extension for inline translation editing
CLIMachine translate from the terminal
FinkTranslation editor for non-developers
ParrotManage translations in Figma

Explore the inlang ecosystem โ†’

Documentation

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT โ€” see LICENSE