i18next

The internationalization framework for JavaScript, with zero runtime dependencies and a pluggable ecosystem for every environment.

Library
npm
v26.5.7
8,648 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
90 /100 Excellent
Development Activity 100
Maintenance 96
Community 64
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
81 /100 Excellent
Architecture 88
Code Quality 85
Innovation 82
Learning Curve 70

i18next is a mature, widely-adopted internationalization (i18n) framework for JavaScript that provides everything needed to translate an application: pluralization, context, nesting, interpolation, and language detection. It runs in the browser, Node.js, Deno, and React Native, and ships with zero runtime dependencies, keeping it lightweight and portable across build targets.

What sets i18next apart is its plugin architecture: translation loading (backends), language detection, formatting, and post-processing are all pluggable via a single .use() API, letting teams swap in HTTP/filesystem backends, browser language detectors, or custom formatters without touching core code. A large companion ecosystem (react-i18next, i18next-http-backend, i18next-browser-languagedetector, and more) builds on this same interface, making it the default choice for internationalizing React, Vue, Angular, and vanilla JS projects alike.

What You Get

  • A t() translation function with key nesting, interpolation ({{variable}}), and context/pluralization support out of the box
  • A .use() plugin API for backends (HTTP, filesystem, in-memory), language detectors, formatters, and post-processors
  • Automatic language and namespace resolution with fallback chains, so missing translations degrade gracefully instead of breaking the UI
  • cloneInstance() and getFixedT() for multi-tenant/SSR apps that need isolated or namespace-scoped translator instances per request
  • First-class TypeScript definitions (hand-authored .d.ts/.d.mts) covering the full options and API surface, including typed selector-based key lookups

Common Use Cases

  • Translating a React, Vue, or Angular single-page app via the matching companion binding (react-i18next, vue-i18next, angular-i18next)
  • Server-side rendered apps that need a fresh, request-scoped translator instance (via cloneInstance) to avoid leaking state across requests
  • Loading translation JSON over HTTP or from the filesystem via i18next-http-backend / i18next-fs-backend, with lazy per-namespace loading
  • Detecting a visitor’s preferred language from the browser, cookies, or query string using i18next-browser-languagedetector
  • Applying locale-aware pluralization and number/date formatting through the built-in Formatter and PluralResolver modules

Under The Hood

Architecture The I18n class in src/i18next.js extends a small custom EventEmitter and owns instance lifecycle (init, changeLanguage, cloneInstance). On init() it wires up a set of single-responsibility services — LanguageUtils for locale-code resolution, PluralResolver for CLDR-style plural rules, Interpolator for {{var}}/nesting substitution, Formatter for value formatting, and BackendConnector (src/BackendConnector.js) which queues and dedupes async loads of translation resources per language/namespace pair. A Translator (src/Translator.js, the largest module at 645 lines) is the actual t() implementation: it resolves keys against the in-memory ResourceStore, triggers backend loads for missing namespaces, then pipes the result through interpolation, pluralization, and a registered postProcessor chain (e.g. sprintf-style formatting). Extension points (backend, languageDetector, i18nFormat, formatter, postProcessor, 3rdParty) are all registered through one .use(module) call keyed off a module.type string, which is what lets the ecosystem of companion packages plug into the same core without forking it. Tech Stack The package has zero runtime dependencies — package.json declares only an optional typescript peer dependency for consumers who want type-checking. Source is plain ES modules (no TS at the source level); the public API surface is instead hand-maintained in index.d.ts/index.d.mts (19KB), which is unusual for a package this size and signals deliberate API-surface control. The build pipeline uses Rollup (rollup.config.mjs) to emit CJS, ESM, and UMD bundles, with Babel handling syntax transforms for older test targets. Tests run on Vitest 4.x across three separate workspace configs (runtime, compatibility, typescript), the last of which uses @arktype/attest to assert inferred TypeScript types, not just runtime behavior. Code Quality The test/ directory holds 66 test files spanning interpolation, pluralization, backend concurrency, language detection, selector-based key access, and a dedicated security.test.js. Several non-trivial async races are documented inline with direct references to the originating GitHub issue numbers (e.g. the init/changeLanguage ordering fix referenced at src/i18next.js lines 214-216, and the selector-scoping logic at lines 406-419) — evidence of a codebase that has absorbed a decade of real-world edge cases rather than one written in a vacuum. Naming is consistent and each module (ResourceStore, LanguageUtils, BackendConnector) has a narrow, single responsibility, which keeps the 3,148-line src/ tree easy to navigate despite its age. API Design The .use().use().init({...}) chaining pattern is the standout DX decision: adding a backend and a language detector is two .use() calls before init(), and the same pattern is what every companion package (react-i18next, i18next-http-backend) targets, so the mental model transfers across the whole ecosystem. getFixedT(lng, ns, keyPrefix) gives callers a pre-scoped t function for a given namespace/language without re-passing options on every call, and hasLoadedNamespace() supports Suspense-style loading gates in frameworks like React. The trade-off is that a zero-dependency core means common needs (fetching translations over HTTP, detecting browser language) require pulling in a companion package rather than working out of the box, which adds a small amount of assembly for newcomers relative to a more batteries-included i18n library.

Used by 111 apps in this directory

TypeScript
63%
MIT

Ghost

Blogging · CMS

55,598

Open source headless Node.js CMS for professional publishing, paid memberships, and newsletters with a fully owned audience.

View details
96
Repo Health
85
Technical
64
Dependency
Built with
TypeScript 63%
JavaScript 35%
Updated 1 weeks ago
TypeScript
91%
Other

GitNexus

AI Code Assistants · Developer Tools · Mcp

48,014

Index any codebase into an interactive knowledge graph and give your AI agents deep architectural context via MCP — with zero servers required.

View details
88
Repo Health
86
Technical
70
Dependency
Built with
TypeScript 91%
Updated 1 weeks ago
TypeScript
51%
AGPL 3.0

Glean

Bookmarks Archiving · Knowledge Management

872

Self-hosted RSS reader and personal knowledge management tool with MCP server integration for AI assistant connectivity.

View details
73
Repo Health
75
Technical
70
Dependency
Built with
TypeScript 51%
Python 45%
Updated 1 weeks ago
Go
68%
MIT

Gogs

Developer Tools

47,897

The painless self-hosted Git service that runs on anything from a Raspberry Pi to a $5 cloud droplet, delivering GitHub-like workflows as a single Go binary.

View details
82
Repo Health
79
Technical
71
Dependency
Built with
Go 68%
Go Template 16%
Updated 1 weeks ago
TypeScript
47%
AGPL 3.0

Grafana

Analytics · Monitoring

77,469

The open-source observability platform that unifies metrics, logs, and traces from any data source into dynamic, queryable dashboards.

View details
95
Repo Health
91
Technical
63
Dependency
Built with
TypeScript 47%
Go 47%
Updated 6 days ago
TypeScript
83%
Apache 2.0

Grist

Databases · No Code Platforms

11,991

A modern relational spreadsheet that combines Python-powered formulas, drag-and-drop dashboards, and granular access controls in a self-hostable, SQLite-backed data platform.

View details
91
Repo Health
93
Technical
63
Dependency
Built with
TypeScript 83%
Python 11%
Updated 1 weeks ago
Rust
60%
MIT

Handy

Productivity · Voice AI

34,484

Free, offline, open-source speech-to-text that pastes directly into any app on Windows, macOS, and Linux.

View details
88
Repo Health
78
Technical
71
Dependency
Built with
Rust 60%
TypeScript 30%
Updated 6 days ago
TypeScript
95%
AGPL 3.0

HeyForm

Forms Surveys · No Code Platforms

9,048

Open-source conversational form builder with AI generation, conditional logic, and 30+ integrations — self-host with full data ownership.

View details
86
Repo Health
67
Technical
67
Dependency
Built with
TypeScript 95%
Updated 6 days ago
JavaScript
99%
GPL 3.0

homepage

Monitoring · Productivity

33,326

A fast, fully static, and secure self-hosted startpage with Docker service discovery and integrations for over 160 services.

View details
91
Repo Health
86
Technical
71
Dependency
Built with
JavaScript 99%
Updated 6 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers