NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2339 most downloaded on npm
i18next internationalization framework
Last release 18 days ago
03 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
608 releases · first in 2012
fix lastIndex in regex when skipOnVariables is true
add ignoreJSONStructure into the types
One column per quarter.
Add alwaysFormat into the types 1586
add support to proper augment PluginOptions type 1583
try to fix another edge case issue 1570 introduces by fixing 1552
Fallback on singular defaultValue 1563
Improve updateMissing default plural behavior 1558
warn if i18next gets initialized multiple times
fix for cases when calling changeLanguage before finished to initialize 1552
use "Object.prototype.hasOwnProperty" instead of "object.hasOwnProperty", fixes 1542
regression fix because of last prototype pollution fix in v19.8.5
fix potential prototype pollution when backend plugin resolves a malicious language value
update format function signature for TS 1520)
fix prototype pollution with constructor
allow nesting recursively with context (could theoretically generate infinite loop, prevented in 1480)
fix "no languageDetector is used" log statement
allow fallbackLng as function 1508
resource manipulation functions are now chainable
- plural rules for ht and iw
fix interpolation with option skipOnVariables when there are multiple placeholders 1490
extend interpolation option skipOnVariables 1488
introduce new interpolation option skipOnVariables 1483
fix local usage of nsSeparator option
fix: recursion when passing nesting to interpolated 1480
typescript fix: getDataByLanguage typings & test 1472
fix Macedonian plural formula 1476
fix nesting interpolation with prepended namespace, fixes #1474 1475
getBestMatchFromCodes: use fallbackLng if nothing found, fixes #1470 1471
These changes are made with temporal backwards compatibility and will warn your for deprecated usage of old terms to give users and plugin providers s…
language detectors can return an array of languages and let i18next figure out best match
rename option whitelist to supportedLngs
rename option nonExpicitWhitelist to nonExplicitSupportedLngs
rename function languageUtils.isWhitelisted to languageUtils.isSupportedCode
These changes are made with temporal backwards compatibility and will warn your for deprecated usage of old terms to give users and plugin providers some time to adapt their code base.
The temporal backwards compatibility will be removed in a follow-up major release.
Learn more about why this change was made here.
Add store events to typings 1451
typescript: Allow passing retry boolean to ReadCallback 1439
ReadCallback 1439fix regression introduced in "support formatting in nesting" 1419
- fix for deno 1428
add getLanguagePartFromCode as in language fallback resolution 1424
support formatting in nesting 1419
fix cloning of service.utils binding to clone 1415
backendConnector extend initial retry from 250 to 350
fix the nested string options parsing introduced in v19.2.0 which broke having multiple options
typescript: add options.interpolation.nestingOptionsSeparator
options.interpolation.nestingOptionsSeparatoradds options.interpolation.nestingOptionsSeparator: ',' to specify that separator
options.interpolation.nestingOptionsSeparator: ',' to specify that separatorAdd ability to use commas in nested keys 1398
explict warning when no languageDetector is used and no lng is defined 1381
fixes retry interval in backend connector 1378
typescript: Type ResourceStore 1366
ignore non valid keys in saveMissing 1359
typescript: Typescript use export default for esm-first approach 1352
export default for esm-first approach 1352check loadedNamespace only once per lng-ns inside using t for better performance
t for better performanceWhen calling i18next.changeLanguage() both i18next.language and i18next.languages will be set to the new language after calling loadResources -> means
When calling i18next.changeLanguage() both i18next.language and i18next.languages will be set to the new language after calling loadResources -> means when accessing t function meanwhile you will get still the translations for the previous language instead of the fallback.
When is this breaking? this does not break any current test - but if you depend on accessing i18next.language or i18next.dir during language change and expect the new language this will break your app.
Reasoning: In react-i18next we get in a not ready state for loaded translations while we would prefer just waiting for the new language ready and trigger a rerender then - also a triggered rerender outside of the bound events would end in Suspense...
How can I get the language i18next will be set to? i18next.isLanguageChangingTo is set to the language called
typescript: Add missing cleanCode option to TypeScript def 1344
cleanCode option to TypeScript def 1344pass used language & namespace to postprocessor 1341
Support using ImmutableJS Records as the data model in interpolation 1339
warning if accessing t before i18next was initialized or namespace loaded
DX improvements:
Both are a clear sign you render your app / call t to early not waiting for the callbacks or Promise.resolve on i18next.init, i18next.loadNamespace or i18next.changeLanguage.
Improve performance of EventEmitter.off 1333
fixes: missing nested key fails if no nested value found and defaultValue contains interpolation -> results in endless loop 1332
typescript: fix incorrect callback type for backend module read callback 1322
Fixed default value as string in IE 1325
typescript: Allow TFunction to receive 1-3 parameters 1317
fixes: Interpolation defaultVariables not recognized on t() 1314
remove unused Interpolator#init reset param (only used internally) 1313
fix issue with unset value in interpolation throwing exception
Your coding agent can read these notes before it upgrades. Set up the MCP server →