Decision. For most React apps in 2026, react-i18next is still the safe default — biggest ecosystem, ~10.5M weekly downloads, works everywhere including React Native.[11][1]
Pick next-intl if you are on the Next.js App Router — it is the RSC-native standard.[28][25] Pick Paraglide (the interesting challenger) for a new web app where a tiny tree-shaken bundle and compile-time type-safe keys matter most.[23] Pick Lingui for compile-time DX with automatic extraction and RSC support.[26] Pick react-intl / FormatJS when strict ICU MessageFormat is non-negotiable.[2] Skip typesafe-i18n — great idea, but adoption and cadence have stalled.[37]
The six at a glance
Star counts and versions fetched 2026-07-15; weekly downloads are the npm registry's last-7-day point. Bundle figures are minified + gzipped and vary by source and setup — treat them as ranges, not guarantees.[19][20]
| Library | ⭐ Stars | Weekly npm | Bundle (min+gz) | Runtime model | Latest / cadence |
|---|---|---|---|---|---|
| react-i18next + i18next | 10.0k + 8.6k[3][4] | ~10.5M / 14.8M[11][12] | ~15–22 kB[19][20] | Runtime resolver; hooks + components; JSON loaded at runtime | 17.0.9; daily commits[18] |
| react-intl (FormatJS) | 15k[5] | ~3.4M[13] | ~13–20 kB (more w/ polyfills)[2][20] | Runtime; native Intl + full ICU; hooks + components |
10.1.16; active monorepo[40] |
| Lingui | 5.8k[6] | ~1.05M[15] | ~10 kB total, ~2–3 kB runtime[41][19] | Compile-time macros → compiled catalog; hooks + components; RSC | 6.5.0 (v6 Apr 2026)[38] |
| next-intl | 4.3k[7] | ~4.0M[14] | ~14 kB client / 457 B server-only[29][19] | Runtime + AOT; RSC-first; useTranslations hook |
4.13.2; frequent[35] |
| Paraglide-JS (inlang) | 567[8] / inlang 2.0k[9] | ~395k[16] | ~1 kB / locale, tree-shaken[23] | Compile-time → typed functions; no hooks; tree-shakable imports | 2.22.0 (v2 line)[36] |
| typesafe-i18n | 2.5k[10] | ~48k[17] | ~1 kB + generated code[19] | Codegen; fully-typed dictionary; functions/hooks | 5.27.1 (Feb 2026, slowing)[37] |
Head-to-head on the axes that decide it
| Axis | react-i18next | react-intl | Lingui | next-intl | Paraglide | typesafe-i18n |
|---|---|---|---|---|---|---|
| Message format | Custom {{x}}, key-suffix plurals; ICU via plugin[21] |
Full ICU, native Intl[22] |
ICU-style macros[33] | ICU inline[28] | ICU-style / messages | Custom typed |
| Type safety (keys) | Opt-in TS augmentation[24] | Moderate | Compile-time | Autocomplete + compile checks[28] | Typed functions, missing key = compile error[23] | Best-in-class codegen |
| Tree-shakes unused strings | ✗ full catalog to client[24] | ✗ | ✓ (extraction-dependent)[34] | Partial (AOT) | ✓ per-message[23] | ✓ |
| RSC / App Router | Needs setup[25] | Manual | ✓ v5+[26] | ✓ native, no use client[28] |
✓ (adapters) | Limited |
| Auto extraction | Manual + tools[25] | CLI | ✓ CLI | Manual | Compiler | Codegen watcher |
| Beyond React (RN, other FW) | ✓ RN, Node, vanilla[19] | React-focused | ✓ multi-FW | Next.js only | ✓ Vite, TanStack, Svelte, Astro, Vue, Solid[23] | ✓ multi-FW |
| TMS integrations | Locize, Crowdin, Phrase[25] | Good | PO/Crowdin | Good | inlang ecosystem[9] | Fewer |
Per-library verdict
react-i18next ⭐ 10k (Jul 2026)
- Largest ecosystem and download base by a wide margin; plugin for almost everything and every TMS.[32][31]
- Works identically in React, React Native, Node and vanilla — the only real answer when you need one library across surfaces.[19]
- ⚠ Ships the whole JSON catalog to the client, custom (non-ICU) format by default, and no key type-safety without opt-in augmentation.[24][21]
react-intl / FormatJS ⭐ 15k (Jul 2026)
Lingui ⭐ 5.8k (Jul 2026)
- Macros extract inline messages at build time; compiler strips them for near-zero runtime overhead (~2 kB) and automatic tree-shaking.[22][41]
- Full RSC / App Router support since v5; v6 shipped Apr 2026.[26][27][38]
- ⚠ Catalog accuracy depends on how tree-shakeably you write code; extra Babel/SWC config.[34]
next-intl ⭐ 4.3k (Jul 2026)
- First-class App Router / Server Components / static rendering with one
useTranslationsAPI and ICU messages; 457 B in server-only paths.[28][29] - Compile-time key autocompletion and typo checks out of the box.[28]
- ⚠ Next.js only, and effectively a single-maintainer project (amannn) — high quality, small bus factor.[7][42]
Paraglide-JS ⭐ 567 (Jul 2026)
- Compiles each message into a standalone typed function; your bundler tree-shakes unused ones. Benchmark: 47 kB vs i18next's 205 kB at 5 locales × 100 messages, and it stays flat as the catalog grows.[23]
- Import
m.someKey()anywhere — no hook, no provider; a missing/renamed key is a compile error.[24] - Framework-agnostic (Vite, TanStack Start, React Router, Astro, SvelteKit, Vue, Solid); translated pathnames built in.[23]
- ⚠ Youngest/smallest of the set, adds a codegen step and extra
project.inlang/+paraglide/folders; no official React Native adapter.[24][1]
typesafe-i18n ⭐ 2.5k (Jul 2026)
How to choose
- On the Next.js App Router? → next-intl. Purpose-built, RSC-native, minutes to set up.[25][39]
- Need React Native / multiple frameworks / heavy TMS workflow, or a large existing team? → react-i18next. Boring, proven, universal.[1][30]
- New web app, bundle size + type safety are top priority, comfortable with a build step? → Paraglide (aggressive bet) or Lingui (safer compile-time pick with automatic extraction and a bigger community).[23][26]
- Translators live in ICU, or you need the richest formatting? → react-intl / FormatJS.[2]
- Considering typesafe-i18n? → prefer Paraglide instead; same type-safety promise, healthier project.[37]
Bottom line: the runtime-resolver era (react-i18next, react-intl) still dominates by inertia and reach, but the compile-time cohort (Paraglide, Lingui, next-intl's AOT) is where 2026's momentum and the bundle/type-safety wins are. Choosing is a long-term bet — mid-project migration is one of the most painful refactors in frontend.[29]