Skip to content
fluenti

Choosing an i18n Library

Choosing an i18n library affects your application’s bundle size, rendering performance, and developer workflow for the lifetime of the project. This guide compares the most popular options across seven measurable dimensions to help you make an informed decision.

  • Fluenti — Compile-time i18n for Vue, React, SolidJS, Next.js, Nuxt, React Router, TanStack Start, and SolidStart. Compiles ICU messages at build time.
  • vue-i18n — The standard i18n library for Vue applications. Runtime-based message interpretation.
  • react-i18next — The most popular React i18n library, built on the i18next ecosystem. Runtime-based.
  • next-intl — A Next.js-specific i18n library with App Router and RSC support. Runtime-based.
  • LinguiJS — Compile-time i18n for React with experimental Vue support. Similar architecture to Fluenti.

LibraryRuntime (gzipped)Architecture
Fluenti~3 KBCompile-time — no parser shipped
LinguiJS~5 KBCompile-time — no parser shipped
next-intl~12 KBRuntime — includes ICU interpreter
react-i18next~13 KBRuntime — includes i18next engine
vue-i18n~14 KBRuntime — includes ICU parser

Compile-time libraries do not ship an ICU parser to the browser. The parser runs during the build step, and only pre-compiled functions reach the client. This architectural difference accounts for the 4-5x size gap.

For mobile users on slower networks, the 10+ KB difference directly impacts Time to Interactive and Largest Contentful Paint — both Core Web Vitals that affect user experience and search ranking.

LibraryArchitectureTypical ThroughputComplex ICU
FluentiCompiled functions~10M ops/sec~10M ops/sec
LinguiJSCompiled functionsSimilarSimilar
vue-i18nRuntime parsing~910K ops/sec~240K ops/sec
react-i18nextRuntime parsing~910K ops/sec~240K ops/sec
next-intlRuntime parsing~910K ops/sec~240K ops/sec

Compile-time libraries are 5-10x faster on typical messages. On complex ICU messages with nested plurals and selects, the gap widens to 40x because runtime libraries must parse, walk, and evaluate the AST on every render, while compiled libraries execute a pre-built function.

For applications with hundreds of translated strings rendered per page, the cumulative rendering cost is measurable — particularly on mobile devices and during server-side rendering.

Fluenti’s benchmarks run automatically on every push to CI. See Benchmarks for full methodology, exact numbers, and reproduction instructions.

LibraryFrameworks Supported
FluentiVue 3, React, SolidJS, Next.js, Nuxt 3, React Router v7, TanStack Start, SolidStart
LinguiJSReact, Vue (experimental)
vue-i18nVue
react-i18nextReact
next-intlNext.js

Fluenti is the only i18n library with first-class support for 8 frameworks from a single codebase. Translation catalogs, CLI workflow, and message format are shared — developers use the same APIs regardless of framework.

This matters for:

  • Monorepos with multiple framework projects sharing translations
  • Cross-framework teams where developers move between Vue, React, and Solid projects
  • Future flexibility — switching frameworks does not require re-implementing i18n
LibraryICU SupportCatalog FormatExtraction CLITranslator Tools
FluentiFull (plurals, selects, nested, custom formatters)PO + JSONfluenti extractPoedit, Crowdin, Weblate, Transifex
LinguiJSFullPO + JSONlingui extractPoedit, Crowdin, Weblate
vue-i18nPartial (via @intlify)JSONManualJSON editors
react-i18nextPartial (via plugins)JSONManual or third-partyJSON editors
next-intlFullJSONManualJSON editors

PO (gettext) is the standard format used by professional translators for decades. Tools like Poedit, Crowdin, and Weblate provide native PO support with translation memory, glossaries, and quality checks. JSON-only libraries require translators to work with raw JSON files or use adapters.

Automatic extraction (fluenti extract, lingui extract) scans source files and generates catalogs without manual key registration — reducing errors and eliminating stale keys.

LibraryCode SplittingConfiguration
FluentiBuilt-in (static + dynamic per-locale)splitting: 'dynamic' in config
LinguiJSManualFile-based splitting
vue-i18nManualNamespace-based
react-i18nextManualNamespace-based
next-intlManualNamespace-based

Fluenti’s Vite plugin can split translation messages per locale automatically. Each locale chunk loads on demand via dynamic imports, so users only download translations for the active language.

For large applications with many routes and locales, built-in code splitting reduces initial payload without manual file organization.

LibraryKey ManagementRich TextTypeScript
FluentiSource text as key — automaticReal HTML elementsFull support
LinguiJSSource text as key — automaticComponent-basedFull support
vue-i18nManual JSON keysv-html (XSS risk) or indexed slotsFull support
react-i18nextManual JSON keysComponent-based or HTML stringFull support
next-intlManual JSON keysComponent-basedFull support

With source-text-as-key libraries (Fluenti, LinguiJS), the text you write in your template is the message key. A CLI command extracts messages from source code — no separate key file to maintain. This eliminates key drift, unused keys, and the naming tax of inventing home.hero.title for every string.

All libraries have good TypeScript support. This is an area of general parity.

Librarynpm Weekly DownloadsGitHub StarsStackOverflow TagsFirst Release
react-i18nextHighHighExtensive2015
vue-i18nHighHighExtensive2016
next-intlGrowingGrowingGrowing2020
LinguiJSModerateModerateLimited2017
FluentiGrowingGrowingGrowing2025

vue-i18n and react-i18next have the largest communities with the most StackOverflow answers, blog posts, tutorials, and third-party integrations (Storybook plugins, testing utilities, CMS adapters). If you expect to frequently search for solutions to edge cases, a larger community provides more resources.

Fluenti and LinguiJS are newer libraries with growing communities. The trade-off: a larger ecosystem means more resources when you encounter issues, but a compile-time approach means fewer runtime edge cases to encounter in the first place.


DimensionFluentivue-i18nreact-i18nextnext-intlLinguiJS
Bundle size~3 KB~14 KB~13 KB~12 KB~5 KB
Runtime speed5-10x fasterBaselineBaselineBaselineSimilar to Fluenti
Frameworks81112
Message formatICU (PO + JSON)JSONJSONICU (JSON)ICU (PO)
Code splittingBuilt-inManualManualManualManual
Key managementAutomaticManualManualManualAutomatic
EcosystemGrowingLargeLargeGrowingModerate

For teams that prioritize bundle size, runtime performance, and multi-framework flexibility, a compile-time approach offers measurable advantages — smaller bundles, faster rendering, and no manual key management.

For teams that value ecosystem size, extensive third-party integrations, and runtime-only deployment without a build plugin, established libraries like vue-i18n and react-i18next remain strong choices with proven track records.

The best library is the one that matches your project’s constraints. Use the dimensions above to weight what matters most for your use case.

What is the fastest i18n library for JavaScript?

Section titled “What is the fastest i18n library for JavaScript?”

Compile-time i18n libraries like Fluenti and LinguiJS are the fastest because they pre-compile messages during the build step. Fluenti achieves ~10M ops/sec for pre-compiled function calls, which is 5-10x faster than runtime-interpreted libraries like vue-i18n, react-i18next, and next-intl.

Which i18n library has the smallest bundle?

Section titled “Which i18n library has the smallest bundle?”

Fluenti has the smallest runtime at ~3 KB gzipped, followed by LinguiJS at ~5 KB. Runtime-based libraries are larger: next-intl (~12 KB), react-i18next (~13 KB), and vue-i18n (~14 KB). The difference is the ICU parser that runtime libraries must ship to the browser.

Which i18n library works with the most frameworks?

Section titled “Which i18n library works with the most frameworks?”

Fluenti supports 8 frameworks from a single codebase: Vue, React, SolidJS, Next.js, Nuxt, React Router, TanStack Start, and SolidStart. Most alternatives support only one framework. This makes Fluenti the best choice for monorepos and cross-framework teams.