# What changed in i18next-cli

> 377 changes in i18next-cli 1 from its official release notes, upgrade guides and advisories: 33 breaking, 2 security, 77 new APIs and options. Each one cited. Sources checked 2026-10-25. HTML: https://unstale.sh/npm/i18next-cli/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## i18next-cli 1

### Breaking changes

- Plural forms of flat keys stay flat in secondary locales; existing nested copies are removed on the next extract. (1.80.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1804)
- Spaces on one side of placeholders such as `{{ name}}` are trimmed. (1.80.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1802)
- A <Trans> interpolation variable named format is extracted as {{format}} instead of being dropped. Requires react-i18next ^17.1.8. (1.80.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1801)
- Lint interprets language codes containing underscores as hyphenated codes when determining required plural categories. (1.78.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1780)
- Lint requires `other` and every category selected by whole numbers below one million; exact selectors count only when they select a few small numbers. (1.78.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1780)
- With ICU or MF2, text around converted placeholders is escaped, and literal braces are quoted or escaped for the selected format. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- Depth now counts from the type selected by an indexed access, rather than from its declared wrapper type. (1.75.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1750)
- Commented template literals no longer extract placeholders as keys; matching existing keys are kept even with removeUnusedKeys, while patterns without a static part are ignored. (1.74.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1748)
- The shorthand ns option now resolves like its long form instead of filing the key under the default namespace. (1.74.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1743)
- Files are visited in sorted path order, so conflicting defaults resolve consistently and unchanged source trees produce stable catalogs. The kept default may change once if sources contain conflicts. (1.74.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1742)
- Named type aliases are no longer resolved to their first member, avoiding arbitrary namespace attribution for app-wide unions. (1.70.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1703)
- Calls to t() inside fenced code blocks in doc comments are no longer extracted as real call sites. (1.70.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1701)
- status and extract now resolve useTranslation calls with a dynamic namespace and a literal ?? or || fallback to the statically known fallback namespace instead of defaultNS. (1.70.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1700)
- When false, the generated i18next.d.ts derives the default namespace from generated resources, avoiding types that silently accept any string. Locale-named resource files still emit false. (1.67.9) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1679)
- Lint detection now flags any two or more adjacent translation units rendered as direct siblings, including adjacent <Trans> components and {t(...)} expressions. (1.67.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1672)
- Adds a default-enabled lint check for translated-string concatenation in JavaScript and sentences split across multiple <Trans> components; set false to disable it. (1.67.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1670)
- When a locale is requested, the pass/fail result is based only on that locale; primary locales fail only on absent keys, while secondary locales fail on any untranslated or absent key. (1.64.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1642)
- The option now accepts true or false, allowing you to sync all languages with --src-lng-only false; omitting it preserves locize-cli's true default. (1.61.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1611)
- The status command now checks the primary language and reports missing keys with a non-zero exit code; empty-string placeholders count as present. (1.61.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1610)
- The directive now suppresses the entire following JSX element, including nested children, in both lint and instrument commands. (1.60.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1600)
- Unparseable JSON/JSON5/YAML files that exist on disk now throw instead of returning null, stopping the command before it can overwrite their contents; .ts/.js resource files remain lenient. (1.59.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1591)
- Scoped i18n method calls that do not match a configured function pattern are no longer extracted as translation keys; matching calls still inherit namespace and keyPrefix scope. (1.56.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1567---2026-04-23)
- The <Trans> bare-identifier diagnostic now uses logger.error and is prefixed with Error:, allowing build tooling to treat it as fatal. (1.56.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1564---2026-04-22)
- Detects hardcoded strings in JSX expression containers, applying the same acceptance and ignore rules as raw text. (1.56.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1562---2026-04-22)
- When nsSeparator is false, the merged-path loop treats any defaultNS-keyed bucket as top-level, including keys from useTranslation() with no arguments. (1.50.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1507---2026-03-25)
- Files with unsupported extensions that no plugin handles are silently skipped instead of throwing an ExtractorError. (1.50.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1500---2026-03-13)
- Nesting conflicts are now reported as errors instead of silently skipping the key. (1.46.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1464---2026-02-28)
- The extractor should fail on error, so extraction errors are no longer silently tolerated. (1.45.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1450---2026-02-25)
- When a config file exists but fails to load, the CLI exits with a non-zero code instead of prompting to create a new one. (1.42.10) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#14210---2026-02-19)
- Interpolation lint checks the translated value, not just the key, when key and value differ. (1.42.10) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#14210---2026-02-19)
- Keys containing spaces or punctuation remain flat when keySeparator is enabled, and sentences containing colons are no longer split into namespaces. (1.29.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1292---2025-12-02)
- Invalid JSX placeholders now throw an error instead of silently producing incorrect output. (1.28.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1282---2025-12-01)
- The status command exits when locales have missing keys. (1.28.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1280---2025-11-29)

### Security

- Potential API-key output is masked for the locize command, reducing the risk of exposing keys in console output. (1.47.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1474---2026-03-02)
- Patched a glob security vulnerability. (1.24.14) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12414---2025-11-18)

### New APIs and options

- Writes current lint issues to a baseline so lint reports and fails only on new issues while the file exists. (1.80.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1800)
- Sets an alternate path for the lint baseline file. (1.80.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1800)
- Compares i18next translation placeholders, nested references and tags across locales; set to 'error' to fail or 'off' to disable the check. (1.80.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1800)
- Controls how values identical to the primary language are counted and whether they trigger a warning or are ignored. (1.80.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1800)
- Selects the translation value syntax: i18next by default, or ICU or MF2. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- Sets how many levels of nested object members are followed when a dynamic key reads a typed value; defaults to 5. (1.75.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1750)
- Offers to append an Internationalization section to AGENTS.md and, when present, CLAUDE.md; no files are written unless the developer agrees. Use --no-agent-note to skip the question. (1.73.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1730)
- Supplies the Locize project id and skips the signup page and credential prompts; LOCIZE_PROJECTID can supply the same value. (1.73.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1730)
- Runs init without the wizard and uses detected defaults for questions not answered by the supplied options, enabling scripted setup. (1.73.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1730)
- Syncs and AI-auto-translates only keys changed on the current Git branch versus the base branch; deletions are skipped and changed plural keys include all plural forms. (1.72.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1720)
- Configures changed-only syncing for locize. (1.72.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1720)
- Sets the base branch for changed-only locize syncing. (1.72.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1720)
- Propagates only primary-language keys added or modified on the branch to secondary language files; obsolete keys are left in place. Supports JSON, JSON5 and YAML files. (1.72.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1720)
- Adds glob patterns for keys that status should not report or fail on; extract is unchanged. (1.71.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1710)
- Set acceptedTags to 'all' to lint every JSX tag, including custom components; ignoredTags and transComponents still take precedence, and the unset default is unchanged. (1.69.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1690)
- Adds --unused to report translation keys that are no longer used in source code. The command does not modify files and exits non-zero when unused keys are found or source files fail to parse. (1.68.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1680)
- Adds an opt-in lint check that flags punctuation glued onto a translation; it accepts the same values as checkConcatenation and defaults to 'off'. (1.67.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1673)
- Accepts severity levels: 'error' makes the lint command exit non-zero, 'warn' reports non-failing warnings, and 'off' disables the check. Boolean values remain supported. (1.67.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1671)
- Lint issues can carry an optional severity of 'error' or 'warning'; plugins may set it, and omitted severity defaults to 'error'. (1.67.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1670)
- Adds the `locize` sort preset, matching locize-published key order so extract followed by locize-sync/locize-download avoids spurious reorder diffs. (1.66.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1660)
- The init wizard can scaffold an inlang project with project.inlang/settings.json derived from i18next configuration and recommend the Sherlock VS Code extension; existing settings are not overwritten. (1.63.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1630)
- A new supercommand orchestrates detection, configuration, instrumentation, extraction, Locize setup and sync, then downloads asynchronous translations. It is safe to re-run. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a CDN type option supporting standard and pro. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds CI mode, which skips instrumentation unless combined with --yes. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a dry-run flag to the localize command. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a namespace option to the localize command. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Prints a copy-paste prompt for AI coding agents to perform the same steps via individual CLI commands. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a flag to skip instrumentation. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a flag to skip Locize setup. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a flag to skip translation. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds an update-values flag to the localize command. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a yes flag to the localize command. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a pass-through flag to enable or disable automatic translation. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a pass-through flag to select languages for automatic translation. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a pass-through flag to configure automatic translation review. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a configuration option for staging or self-hosted Locize API endpoints. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a configuration option for automatic translation. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a configuration option for selecting automatic translation languages. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Adds a configuration option for automatic translation review. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- The localize flow is also available for programmatic use. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Setting this option to false lets you sync all languages instead of only the source language. (1.61.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1611)
- The types command can use --ci to compare generated TypeScript definitions with files on disk without writing, exiting non-zero when they are out of date. It cannot be combined with --watch. (1.59.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1590)
- The --with-types flag regenerates TypeScript definitions in the same process after extraction when translation files change, avoiding two parallel watch processes. (1.58.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1580)
- The init wizard now asks which translation backend to use, offering local files, Locize, or other/skip. (1.57.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1570)
- Choosing Locize opens its signup page, prompts for a Project ID and optional API key, and writes a `locize` block matching the shape consumed by Locize commands. (1.57.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1570)
- Accepts 'strict', applying leading-namespace rewrites uniformly across hook scopes and emitting enableSelector: "strict" in generated i18next.d.ts. (1.56.12) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#15612)
- Adds the locale field to the TranslationResult object passed to the afterSync plugin hook, so plugins no longer need to reverse-engineer this value from the file path. (1.53.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1532---2026-04-14)
- Adds the namespace field to the TranslationResult object passed to the afterSync plugin hook, so plugins no longer need to reverse-engineer this value from the file path. (1.53.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1532---2026-04-14)
- Optionally derive TypeScript namespaces from paths relative to types.basePath, enabling nested namespaces; omitting it preserves existing behavior. (1.53.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1530---2026-04-14)
- Adds an opt-in flag that trusts default values inferred from keys, including plain key-as-text usage and keyPrefix-derived values, while preserving strict sync behavior by default. (1.52.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1520---2026-04-13)
- Set to true to generate all six CLDR plural forms for every language, including the primary language, for a consistent set of keys across locales. (1.51.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1510---2026-03-25)
- Adds a plugin hook to observe every key extraction before deduplication. (1.48.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1480---2026-03-04)
- Adds an option to detect conflicting default values for the same key; `true` or `'warn'` logs, while `'error'` throws. (1.48.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1480---2026-03-04)
- Adds a command that wraps hardcoded strings with t(), injects useTranslation() hooks in React components, generates an i18n init file, and imports it into the project's entry point. (1.47.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1470---2026-03-01)
- Adds hideTranslated to show only untranslated keys in the detail status view. (1.43.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1430---2026-02-23)
- Adds support for YAML translation files. (1.42.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1420---2026-02-05)
- Namespaces can now be ignored during extraction, status, and sync operations. (1.41.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1410---2026-01-30)
- Adds support for rename-key to rename plural translation keys. (1.40.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1400---2026-01-28)
- Logger can now be passed via options. (1.38.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1381---2026-01-26)
- Allows progress and info output to be routed to a custom logger object. (1.38.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1380---2026-01-26)
- Adds a flag to spinner-based commands to silence spinner and non-essential output for CI or scripting. (1.38.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1380---2026-01-26)
- Introduces the fallbackNS option to prevent missing key warnings. (1.36.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1360---2026-01-14)
- Introduces the cdnType option for locize. (1.33.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1330---2025-12-18)
- Adds an option to skip extracting translation-like patterns from code comments; set it to false to ignore example or documentation strings in comments. Defaults to true. (1.31.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1310---2025-12-09)
- Exported this constant so user configs can extend the default linting recommendations without copying them manually. (1.30.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1304---2025-12-05)
- Exported this constant so user configs can extend the default linting recommendations without copying them manually. (1.30.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1304---2025-12-05)
- Adds a configuration option for glob patterns that exclude files from linting, alongside extract.ignore, for more granular control over hardcoded-string checks. (1.29.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1290---2025-12-02)
- The extract command adds --sync-all to sync primary defaults and clear synced keys in all other locales. (1.26.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1260---2025-11-26)
- Adds an accept-list for attributes in the linter. (1.25.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1250---2025-11-25)
- Adds an accept-list for tags in the linter. (1.25.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1250---2025-11-25)
- Adds a command to safely refactor translation keys across source files and translation JSON files, handling namespaces, plurals, and multiple locales atomically. (1.24.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1240---2025-11-12)
- Adds an option to preserve all context variants of keys using context parameters in translation files when removing unused keys, even if those variants are not explicitly found in source code. (1.23.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1230---2025-11-09)
- Plugin hooks can access file paths and other location metadata for each extracted translation key through the locations array property. (1.22.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1220---2025-11-06)
- Adds a global -c, --config <path> option to override automatic config detection and point the CLI at a specific i18next config file. (1.15.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1150---2025-10-27)
- The extractor supports defaultNS: false, generating a single language JSON with top-level keys instead of generating or wrapping keys under a namespace. (1.13.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1130---2025-10-24)
- The defaultValue function gains a value parameter. (1.12.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1120---2025-10-23)
- Exposes the TranslationResult type for working with the afterSync plugin or hook. (1.11.11) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#11111---2025-10-20)

### Performance

- Files without translation-related calls or components are no longer parsed and walked a second time for keys, reducing extraction time on large trees while preserving constants pre-scan behavior. (1.74.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1742)
- The extract command no longer scales quadratically with the number of keys; a 4-minute run on a ~11,500-key monorepo drops to seconds, with byte-identical output. (1.71.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1712)

### Behavior and default changes

- The default source glob now includes .mjs for init, detected configs without one, and migrate-config when the old config has no input; existing configs are unchanged. (1.79.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1791)
- With MF2, lint warns when pattern whitespace at the start or end differs from the primary language; the warning does not fail the run. (1.78.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1780)
- With ICU or MF2, extraction writes one key per message, avoids treating `$t()` as nesting, and uses format-appropriate placeholders in `<Trans>` children. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- With ICU or MF2, plural and select messages count as one key, so status no longer reports missing plural-suffix keys. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- More implicitly typed values expand to their finite set of keys, including object members, unions and intersections, generic object types, const-object or enum values, and array elements. (1.74.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1743)
- The default ignore for node_modules is dropped when an extract.input pattern mentions it, allowing dependency declarations or package sources to be resolved or extracted. (1.74.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1740)
- The skill no longer presumes Locize; it asks the developer whether to manage translations with Locize or keep files in the repository. (1.73.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1730)
- The agent prompt asks whether to use Locize or keep translation files in the repository, and only creates a Locize project or requests an API key if Locize is chosen. It creates config with init --yes instead of the wizard. (1.73.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1730)
- The help output now ends with a one-line hint for installing the i18next-localization Agent Skill. (1.72.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1724)
- After status, extract, and sync, the hint is now a single line naming the untranslated-key gap and the command to fill it; it appears only when secondary locales have untranslated keys. (1.72.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1723)
- status now warns when a fallback namespace listed in ignoreNamespaces has translations that cannot be found, rather than silently reporting keys as absent. (1.71.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1713)
- Resolves finite string-literal unions through iterated array element types, expanding template translation keys for supported array methods. (1.67.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1678)
- Instrumentation now leaves module-scope string candidates untouched and reports a warning pointing to the hook alternative; strings inside plain functions are still instrumented. (1.67.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1677)
- Concatenation issues are warnings and do not fail the run; the lint command exits non-zero only when there are errors. (1.67.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1670)
- Locize funnel/tip messages are suppressed when CI=true or stdout is not a TTY, and the once-per-24h cooldown applies even when translation files are newly created. (1.66.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1660)
- fallbackNS accepts an array of namespaces, looked up in order; this is supported by extract, status, and the TypeScript types generator. (1.65.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1650)
- Trailing wildcards now match any method on an object, and are also honored by the linter and rename-key. (1.64.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1640)
- Automatic translation is enabled by default for new Locize projects and only runs when the reference language is updated; translation happens asynchronously on the Locize side. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Maps the project-not-found sync error for projects without languages to guidance to update locize-cli or add languages in project settings. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Locize commands now resolve credentials from environment variables after CLI options and the locize config block, then forward them as explicit flags, avoiding stale ~/.locize settings redirecting operations. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- During the first sync, languages from configuration are created automatically; target languages need not be added in the UI, and any write-capable key works. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- When enabled, context variants from the primary locale are copied to every secondary locale as empty placeholders, while existing secondary values remain untouched. (1.56.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1560---2026-04-21)
- The translation report now includes context variants found in the primary translation file for base keys used with a dynamic context value. (1.56.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1560---2026-04-21)
- Prints a per-file diff of added, removed, and changed keys when CI fails because files would be updated, making failures actionable without reproducing them locally. (1.55.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1550---2026-04-20)
- Infers function return types from function bodies when no explicit annotation is present, including across files, so statically resolvable values can be extracted as keys. (1.55.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1550---2026-04-20)
- A warning is emitted when types.basePath is misconfigured and translation files fall outside the specified base directory. (1.53.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1530---2026-04-14)
- The default useTranslationNames now includes getT and useT, so keys from next-i18next v16 App Router hooks are extracted into the specified namespace instead of defaultNS. (1.51.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1516---2026-04-03)
- The status output distinguishes untranslated keys (present with an empty value) from absent keys (missing entirely); both still cause a non-zero exit. (1.50.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1503---2026-03-16)
- A warning is emitted when an explicitly listed non-native extension is not handled by a plugin, helping catch forgotten or misconfigured plugins. (1.50.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1501---2026-03-13)
- The extractor captures as const array literals and expands their values when used in .map() or .forEach() callbacks. (1.49.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1491---2026-03-05)
- Exported as const arrays and type aliases are shared across files, enabling resolution of imported constants and type aliases. (1.49.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1491---2026-03-05)
- The extractor resolves namespaces from const and identifier expressions without custom plugins. (1.49.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1490---2026-03-05)
- The extractor handles object props as namespaces. (1.47.12) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#14712---2026-03-04)
- Locize CLI calls now fall back to npx. (1.47.10) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#14710---2026-03-03)
- locize-migrate now internally always uses --download true. (1.47.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1475---2026-03-02)
- The interactive prompt was improved for the locize command. (1.47.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1473---2026-03-02)
- The rename-key command was further improved. (1.39.12) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#13912---2026-01-28)
- Translation files with the .json5 extension now try to preserve comments and formatting. (1.27.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1270---2025-11-27)
- The linter falls back to built-in recommended accept-lists for tags and attributes when none are configured. (1.25.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1251---2025-11-25)
- preservePatterns now supports namespace patterns, including preserving all keys in a namespace or matching specific keys within one; matching respects the configured nsSeparator. (1.21.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1210---2025-11-05)
- The extractor treats nullish coalescing expressions as the union of statically resolvable left- and right-side string values. (1.20.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1201---2025-11-03)
- The runLinter API now uses an emitter. (1.18.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1180---2025-10-30)
- Supports a functional value for per-package output paths. (1.17.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1170---2025-10-29)
- Extraction now parses simple template strings when reading defaultValue values. (1.14.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1140---2025-10-27)
- Only overwrites primary-language plural/context variants when the source provides an explicit default. (1.11.9) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1119---2025-10-20)

### Tooling

- Generated i18next.d.ts now selects the typed ICU or MF2 parseInterpolation value based on the installed i18next version; warnings and hints for existing files also reflect the supported value. (1.77.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1770)
- With ICU or MF2, writes format-appropriate placeholders, converts count ternaries into one plural message, and registers the matching plugin in the generated i18n init file. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- With ICU or MF2, parses translation values across locales and reports syntax errors, argument mismatches, and plural categories that do not fit the locale. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- With ICU or MF2, newly generated declarations set `parseInterpolation: false` for i18next 26.2.0+; `types` warns if an existing file lacks it. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- Extraction now uses typed component props and binds typed array members in iteration, so translation keys in map callbacks, loops, and destructured props are extracted. (1.74.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1747)
- Finite dynamic keys now resolve through renaming imports, including type aliases, enums, interfaces, as-const arrays, and helper functions. (1.74.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1740)
- React is no longer a runtime dependency; the CLI resolves React from the consuming project through react-i18next, avoiding a nested duplicate copy. (1.73.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1732)
- extract now warns when a <Trans> component contains a bare identifier JSX child and points users to the {{cat}} form with a values prop. (1.56.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1563---2026-04-22)
- Generated type files use a combined default interface declaration and a type-only import, making them compatible with TypeScript's verbatimModuleSyntax option without changing the interface's type identity. (1.54.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1540---2026-04-17)
- Plugins can return transformed JS/TS code for any file type, including .svelte and .vue, and the extractor parses it using TSX syntax. (1.50.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1500---2026-03-13)
- The extractor improves TS type-aware resolution for finite dynamic keys, including template unions, const maps, and helper returns. (1.49.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1494---2026-03-08), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1490---2026-03-05)
- Adds a linter plugin to i18next-cli. (1.44.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1440---2026-02-25)
- The linter's checkInterpolationParams was improved. (1.42.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1421---2026-02-06)
- Can move translation keys between namespaces, updating all relevant source and translation files. (1.39.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1390---2026-01-27)
- Linting now checks interpolation parameters. (1.37.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1370---2026-01-23)
- The extractor can now extract from new expressions. (1.35.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1350---2026-01-12)
- The extractor detects nested $t calls inside translation or defaultValue strings and extracts referenced keys, including plural and context variants. (1.32.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1320---2025-12-14)
- TypeScript and JavaScript support has been improved. (1.30.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1301---2025-12-05)
- The extractor detects the namespace from a TypeScript TFunction generic, such as TFunction<"my-custom-namespace">. (1.24.20) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12420---2025-11-20)
- Exported the type alias for custom plugins to type the onEnd hook's keys parameter without manually constructing Map<string, ExtractedKey>. (1.23.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1232---2025-11-10)
- The types generator adds a comment at the start of the types file noting that it is auto-generated. (1.22.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1221---2025-11-06)
- The extractor now statically extracts keys referenced via TypeScript enums, resolving only string-initialized enum members. (1.20.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1200---2025-11-03)
- Key extraction now detects translation keys stored in local variables, object properties, and simple string expressions. (1.19.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1190---2025-10-31)
- The extractor better supports custom translation hooks returning t or getFixedT. (1.16.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1160---2025-10-28)
- The linter is improved for spread operator usage. (1.12.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1121---2025-10-23)

### Fixes and other changes

- rename-key now renames calls with a string default value, and moving a key to another namespace keeps the default value. (1.80.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1804)
- Renaming flat keys now writes the new key where the next extract would put it and removes the old key regardless of how the file stores it. (1.80.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1803)
- No longer throws on plural keys whose base name is `constructor`, `toString`, or another such name, or is also an object. (1.80.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1802)
- Keys containing the key separator stay flat during sync, preserving translations; status, localize and rename-key also find their values. (1.80.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1802)
- Interpolation parsing now matches i18next behavior for unescaped placeholders and names outside the previous character set, avoiding false or missed interpolation issues. (1.80.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1800)
- Files with JSX are parsed with the same JSX fallback as .js files in extract, instrument, and lint; extract also includes them in its constants pre-scan. (1.79.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1790)
- With ICU or MF2, the `t()` interpolation check uses the same parser, avoiding false interpolation reports and catching misspelled arguments. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- Extracts `IcuTrans` and `IcuTransWithoutContext`, including when imported under another name, using `i18nKey` or `defaultTranslation` as the key. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- Extracts its `Trans`, `Plural`, `Select` and `SelectOrdinal` components using the message built by the macro. (1.76.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1760)
- Options passed through a variable are read like inline options during extraction, including plural keys, context, ns, and defaultValue; variables are resolved within their own file. (1.75.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1753)
- Declarations with the same name in different files now resolve to the module the file imports them from, preventing extraction from depending on file order. (1.75.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1752)
- Extraction now resolves imported references to an exported as const object, including t(LABELS.save) and Object.keys(LABELS). (1.75.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1751)
- Extraction now resolves values typed as keyof typeof MAP to the map's keys, enabling template keys such as label.save and label.cancel. (1.75.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1751)
- Extraction now resolves types and values accessed through namespace imports, including namespaces re-exported from a barrel. (1.75.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1751)
- Numeric keys now resolve in object types and indexed access types, enabling extraction from openapi-typescript response types. (1.75.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1750)
- Selector i18nKey values on <Trans t={t}> now route into the hook's namespaces like t() does, preventing duplicated namespaces during extraction. (1.74.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1747)
- Extraction now binds elements when iterating inline array literals, so translation keys using those elements are extracted. (1.74.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1746)
- Extraction resolves nested object type members, including through references, optional chaining, destructuring, and indexed access types, up to five levels below the declared type. (1.74.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1746)
- Values typed as arrays of a string union now resolve to the union's values, allowing extraction of every key in map and for-of usage without a type assertion. (1.74.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1745)
- Conditional namespace arguments now resolve to the namespaces in their branches, so extracted keys are filed in each branch’s primary namespace, including for <Trans t={t}>. (1.74.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1744)
- Dynamic keys declared in files without translation calls are resolved after all files have been scanned, removing file-order dependence. (1.74.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1743)
- The shorthand defaultValue option is no longer ignored. (1.74.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1743)
- The shorthand keyPrefix option now resolves like its long form instead of being lost. (1.74.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1743)
- Extraction no longer drops keys, plural forms, default values, key arrays, selectors, or option values when they are wrapped in parentheses. (1.74.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1741)
- The extractor now statically resolves non-string-literal default values from module-scope consts, object maps, or enums instead of dropping them; ambiguous expressions still fall back to the key. (1.73.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1733)
- Object literals in as const arrays are now captured, resolving destructured properties in for...of loops and forEach callbacks. (1.72.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1722)
- Dynamic keys built from for...of loop variables are now extracted because the loop variable is bound while the loop body is walked. (1.72.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1722)
- Destructuring a known as const object now resolves its property for dynamic keys. (1.72.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1722)
- The interactive instrument prompt now uses Inquirer’s select prompt type instead of the removed list type, preventing a crash. (1.72.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1721)
- status and extract now find a fallback namespace at its per-namespace path when it is missing from a merged file, supporting hybrid layouts. (1.71.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1713)
- A function output resolves the merged file without a namespace, matching what extract writes and allowing hybrid layouts. (1.71.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1713)
- `.reduce()` and `.reduceRight()` over an `as const` array now bind the element callback parameter, allowing extraction without a `(typeof ERRORS)[number]` cast. (1.71.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1711)
- When ns is a function parameter, it resolves to its string default or, without a default, the first member of its inline union type. (1.70.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1704)
- TFunction members are now found inside intersection types, including optional t properties and overload implementation signatures. (1.70.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1703)
- Namespace detection now resolves union, generic, and local type aliases for TFunction, and local const arrays for useTranslation, like inline arrays. (1.70.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1702)
- A local wrapper forwarding its first parameter as the key to a scoped translation function inherits that function's namespace and keyPrefix. (1.70.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1701)
- Parameters typed as ReturnType<typeof useTranslation<'ns', 'keyPrefix'>>['t'] are treated like TFunction<'ns', 'keyPrefix'> for namespace detection. (1.70.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1701)
- status and extract now honor TFunction namespace and key-prefix types on destructured parameters, including types supplied through a local interface or type alias. (1.70.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1700)
- Accepts FunctionBody nodes from @swc/core 1.16, restoring selector calls with block bodies, return-type inference from function bodies, and React component-boundary detection for useTranslation() and <Trans> injection. (1.69.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1692)
- Lint reports hardcoded strings at the line indicated by the AST node span, fixing incorrect line numbers and allowing line-based ignore directives to suppress the intended issues. (1.69.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1691)
- Key sorting is now transitive, making extract idempotent and preventing key order from flipping across extract/download cycles. (1.67.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1678)
- The generated import is inserted after the preceding import’s line, with a leading newline when that import ends at EOF without one. (1.67.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1677)
- Directories whose names match input globs no longer abort the run with EISDIR. (1.67.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1676)
- Corrects line and column locations for files containing multi-byte characters; the span-base correction also fixes locations in files with leading multi-byte comments for the linter and instrumenter. (1.67.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1675)
- Extraction now expands keys for finite string-literal unions that reach a key through interface- or object-typed function parameters, including destructured, renamed, defaulted, and member-accessed values. (1.67.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1674)
- Extraction now ignores <Trans> components without an i18nKey expression or non-whitespace children, preventing an empty-string translation key. (1.66.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1662)
- ConsoleLogger.error no longer swallows its optional second argument, so plugin-hook failures print the caught error instead of a bare message. (1.66.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1661)
- ConsoleLogger.warn no longer swallows its optional second argument, so plugin-hook failures print the caught error instead of a bare message. (1.66.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1661)
- Extraction now attributes keys found in fallback namespaces there, preserving them from removeUnusedKeys; non-empty values in the requesting namespace remain intentional overrides, and empty placeholders are cleaned up. (1.65.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1650)
- A scoped failure message now names the requested locale, making the reason for failure clear. (1.64.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1642)
- When `disablePlurals` is true, a key used with `count` is satisfied by either its plural variants or the bare key, matching the runtime resolution chain. (1.64.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1641)
- Plural categories reachable only for out-of-range values are treated as optional, so missing or empty variants no longer fail the check; categories reachable by typical counts remain required. (1.64.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1641)
- The command now pins @inlang/plugin-i18next@6.2.1, restoring Sherlock inline annotations, hovers, and message extraction for i18next projects. (1.63.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1631)
- The CJS build now uses automatic interop to unwrap default exports at runtime, fixing crashes in spinner-using commands with ESM-only dependencies. (1.62.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1620)
- Declared as a direct dependency at ^26.3.0, matching react-i18next's peer requirement so package managers that don't auto-install peers get a compatible copy. (1.58.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1583)
- Loaded lazily and defensively only when serializing <Trans> children, so incompatible versions no longer crash unrelated CLI commands and Trans serialization degrades gracefully with a warning. (1.58.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1583)
- instrument no longer breaks multi-line imports when injecting the useTranslation import. (1.58.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1582)
- The types command now accepts .yaml, .yml, and .json5 input files, avoiding SyntaxError when using these translation sources. (1.58.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1581)
- types --watch uses chokidar's awaitWriteFinish option, preventing mid-write triggers when another process rewrites translation files. (1.58.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1580)
- For multi-namespace useTranslation hooks, selector paths beginning with a secondary namespace are routed to that namespace's file; primary-prefixed paths and single-namespace hooks are unaffected. (1.56.11) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#15611---2026-05-07)
- For multi-namespace useTranslation hooks, selector paths beginning with a secondary namespace are routed to that namespace's file; primary-prefixed paths and single-namespace hooks are unaffected. (1.56.11) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#15611---2026-05-07)
- lint now sets type to hardcoded on hardcoded-string issues, so consumers can reliably distinguish them with issue.type === 'hardcoded'. (1.56.10) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#15610---2026-05-06)
- Propagates namespace and keyPrefix from useTranslationNames-listed calls stored on class fields and later destructured in methods, so translated keys are extracted with the correct namespace. (1.56.9) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1569---2026-04-29)
- With --sync-primary, <Trans> defaults now update for keys containing an underscore that are not plural or context variants. (1.56.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1568---2026-04-29)
- With --sync-all --trust-derived, locale-specific plural variants are preserved instead of being cleared when absent from the primary locale. (1.56.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1566---2026-04-23)
- Extraction now walks both branches of ternary and short-circuit logical selector bodies, preserving referenced keys instead of pruning them. (1.56.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1565---2026-04-22)
- The bare-identifier diagnostic now points only to the `{{x}}` + `values={{ x }}` fix, removing a misleading suggestion to inline the value. (1.56.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1565---2026-04-22)
- extract now resolves constant identifiers passed as the namespace or keyPrefix argument, using the same resolution logic as useTranslation. (1.56.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1563---2026-04-22)
- status now includes keys referenced only through nested $t(...) references in the primary translation file, including plural and context variants, so translation gaps in secondary locales are reported. (1.56.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1561---2026-04-22)
- When enabled, keys referenced through $t(...) in existing translation values are preserved, including plural and context variants; secondary locales receive the correct CLDR plural skeleton on first extract. (1.56.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1560---2026-04-21)
- Propagates defaultNs and keyPrefix from custom translation hooks to inner t() calls accessed via a member expression, preventing keys from falling back to the default namespace. (1.54.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1542---2026-04-18)
- Secondary locale translations are no longer cleared for explicit defaults when the code-provided default still matches the primary locale value. (1.54.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1541---2026-04-17)
- Selector API extraction now resolves dynamic bracket expressions and captures function parameter type annotations, preventing possible keys from being incorrectly treated as unused and removed. (1.53.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1531---2026-04-14)
- With --sync-all --trust-derived, secondary locale values are cleared only when syncing would actually update the primary locale. (1.52.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1521---2026-04-13)
- Fixes repeated runs producing different results for keys with derived default values, preventing the primary locale from being unexpectedly rewritten. (1.51.9) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1519---2026-04-13)
- Dynamic bracket expressions in the selector API are resolved into all possible keys, preventing valid keys from being treated as unused and removed during extraction. (1.51.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1518---2026-04-13)
- Fixes --sync-all not clearing secondary locale translations when mergeNamespaces is enabled. (1.51.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1517---2026-04-07)
- The extractor now uses the full enum type when a variable has both a type annotation and an initializer, extracting all enum values. (1.51.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1515---2026-03-30)
- Now correctly preserves HTML tag names when children contain interpolations or mixed content. (1.51.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1514---2026-03-27)
- Directories with file-like extensions are silently skipped instead of producing a misleading warning. (1.51.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1513---2026-03-26)
- With nsSeparator: false and multiple namespaces, default namespace keys are now kept under translation instead of being placed at the top level. (1.51.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1512---2026-03-26)
- Plural forms are now limited to the union of CLDR categories needed by configured locales, rather than always generating all six forms. (1.51.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1511---2026-03-26)
- defaultValues are now applied consistently to extra plural forms. (1.51.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1511---2026-03-26)
- Unrecognized custom locale codes now fall back to English plural rules instead of throwing a RangeError. (1.50.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1508---2026-03-25)
- With nsSeparator: false, implicit-namespace keys in a merged single-file layout are routed to the top level instead of being wrapped under defaultNS. (1.50.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1506---2026-03-25)
- When removeUnusedKeys: true, sort: false preserves the existing key order and appends new keys at the end. (1.50.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1506---2026-03-25)
- The extract and sync commands silence all non-essential output in quiet mode, including promotional messages. (1.50.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1505---2026-03-24)
- Namespaces containing spaces are no longer rejected by the natural-language heuristic when explicitly provided; the check applies only to namespaces derived by splitting a key string. (1.50.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1504---2026-03-22)
- The TypeScript signature now allows returning undefined to opt out of transformation, matching the intended pattern. (1.50.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1500---2026-03-13)
- Fixes inconsistent plural key ordering in JSON locale files produced by sync and extract --ci. (1.49.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1497---2026-03-12)
- Sync no longer clears locale-specific plural forms such as _many in secondary locales, preventing status from reporting missing translations. (1.49.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1496---2026-03-10)
- The extractor improves namespace resolution from const and identifier expressions. (1.49.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1494---2026-03-08)
- Fixes the disablePlurals flag being ignored when extracting languages. (1.49.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1493---2026-03-05)
- Imports in d.ts files now include file extensions. (1.49.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1492---2026-03-05)
- The extractor now resolves the namespace when ns is a const variable, matching the existing useTranslation(IDENTIFIER) behavior. (1.49.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1491---2026-03-05)
- Type aliases referenced by declare const and useState destructuring patterns now resolve after the alias is captured, fixing ordering-dependent failures. (1.49.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1491---2026-03-05)
- Indexed access types now resolve correctly through TsParenthesizedType wrappers emitted by SWC. (1.49.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1491---2026-03-05)
- The extractor resolves and safely handles constants across files. (1.48.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1481---2026-03-04)
- The extractor handles typed expressions. (1.47.11) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#14711---2026-03-03)
- The instrumenter was improved regarding the i18n init file. (1.47.9) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1479---2026-03-03)
- The instrumenter was improved regarding the Trans component. (1.47.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1478---2026-03-02)
- Fixes false positives when checkInterpolationParams encounters variable t() options. (1.47.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1477---2026-03-02)
- Prefixes the nesting conflict message. (1.47.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1476---2026-03-02)
- checkInterpolationParams now supports interpolation parameters using the {{param, format}} syntax. (1.47.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1471---2026-03-02)
- Fixed expanded plurals losing location information. (1.46.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1462---2026-02-27)
- Fixed extraction with keySeparator creating empty string segments. (1.46.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1462---2026-02-27)
- Extraction now uses the inline count property of the Trans component. (1.46.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1460---2026-02-25)
- Fixes Identifier handling in the getObjectPropValue utility. (1.42.12) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#14212---2026-02-21)
- Fixes insufficient evaluation of namespace and keyPrefix scope. (1.42.11) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#14211---2026-02-21)
- Interpolation lint reports the correct line number for each duplicate t() call. (1.42.10) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#14210---2026-02-19)
- Reverts the overly greedy multi-segment namespace glob behavior that matched unrelated locale files and could overwrite existing translations with empty objects. (1.42.9) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1429---2026-02-11)
- The linter checkInterpolationParams now ignores i18next variables. (1.42.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1428---2026-02-11)
- The extractor now respects ignoreNamespaces when removeUnusedKeys is true. (1.42.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1428---2026-02-11)
- Fixed handling of multi-segment namespaces when matching output paths and recovering namespace paths. (1.42.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1426---2026-02-09)
- Corrects the base offset for files with leading whitespace or comments because Module.span.start points to the first token, not byte 0. (1.42.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1425---2026-02-09)
- Span offsets in onVisitNode are now file-relative instead of accumulating across files, so spans stay within the source file length. (1.42.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1424---2026-02-09)
- The linter improves checkInterpolationParams handling when an object is used as a value. (1.42.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1423---2026-02-06)
- Fixes extractor serialization of <Trans> when the project and CLI use different React versions, such as React 18. (1.42.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1422---2026-02-06)
- The extractor now preserves locale-specific plural forms when using this flag. (1.41.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1414---2026-02-03)
- Fixes extraction behavior for translation function calls involving keyPrefix. (1.41.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1411---2026-01-31)
- Improves conflict detection when renaming a plural translation key. (1.40.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1401---2026-01-29)
- Fixed rename-key for Windows. (1.39.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1396---2026-01-27)
- Improves rename-key when moving from defaultNS. (1.39.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1395---2026-01-27), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1394---2026-01-27), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1393---2026-01-27)
- Enhances rename-key when moving from defaultNS. (1.39.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1392---2026-01-27)
- rename-key now updates namespace references in both key strings and t options. (1.39.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1391---2026-01-27)
- The linter no longer incorrectly treats translation keys as translation strings when checking for unused interpolation parameters. (1.38.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1382---2026-01-27)
- Key extraction for custom functions using useTranslationNames now correctly applies namespace and keyPrefix with destructured syntax. (1.37.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1371---2026-01-24)
- Fixes fallbackNS handling for merged namespaces. (1.36.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1361---2026-01-14)
- The download command now also handles cdnType. (1.34.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1341---2026-01-06)
- Extraction and parsing behavior now aligns with react-i18next by using its nodesToString. (1.34.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1340---2026-01-01)
- Improves whitespace normalization around preserved inline tags and nested components during extraction. (1.33.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1335---2025-12-19)
- Placeholder indexing for <Trans> is now stable for nested structures such as paragraphs and lists, and for TypeScript as assertions. (1.33.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1334---2025-12-19)
- The extractor normalizes placeholder indexes when TS as assertions appear inside child elements, preventing off-by-one numbering. (1.33.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1333---2025-12-18)
- Applies the configured default value to the primary language for keyPrefix-derived nested keys during extraction. (1.33.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1332---2025-12-18)
- The extractor normalizes child placeholder indexing for additional whitespace and formatting cases. (1.33.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1331---2025-12-18)
- The extractor now supports ConditionalExpression inside Trans JSX placeholders instead of skipping the file. (1.33.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1331---2025-12-18)
- Placeholder indexing is normalized when TypeScript as assertions appear inside JSX, preventing inconsistent placeholder numbers during <Trans> extraction. (1.32.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1320---2025-12-14)
- Honors false for <Trans> components, avoiding base plural forms when only context-specific plural variants are required. (1.31.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1310---2025-12-09)
- Translation keys are now correctly extracted from commented helper calls using single, double, or backtick quotes. (1.30.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1305---2025-12-09)
- When enabled, type generation correctly identifies top-level keys as namespaces in merged resource files and warns about invalid flat keys. (1.30.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1303---2025-12-05)
- Fixes TypeScript generation when defaultNS is false. (1.30.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1302---2025-12-05)
- The extractor logs a warning and skips files with syntax errors or unsupported AST nodes instead of terminating the extraction process. (1.30.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1301---2025-12-05)
- The generator now compiles and executes .ts, .mts, .cts, .js, .mjs, and .cjs input files to retrieve translation resources instead of failing with JSON parse errors. (1.30.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1300---2025-12-05)
- The extractor's JSX parser now ignores JSX comments. (1.29.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1294---2025-12-04)
- Fixed incorrect placeholder indexing when preserved HTML tags are mixed with indexed elements at the root level. (1.29.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1291---2025-12-02)
- Improved handling of object expressions inside indexed elements to prevent unnecessary index shifts. (1.29.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1291---2025-12-02)
- The extractor and linter now parse and process JSX in .js files, enabling reliable key extraction and hardcoded string detection for React codebases using them. (1.28.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1283---2025-12-02)
- The extractor now strips type assertions inside JSX curly braces and correctly extracts placeholders such as {{count}} and {{key}} from TSX/JSX. (1.28.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1281---2025-12-01)
- When extract.outputFormat is omitted, .json5 files are inferred from the filename. (1.27.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1271---2025-11-27)
- Restores correct JSX <Trans> child placeholder indexing and spacing handling during extraction. (1.27.0) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1270---2025-11-27)
- The jsx-parser was improved. (1.26.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1261---2025-11-26)
- Correctly computes numeric placeholders for nested JSX children in <Trans>, so extracted keys match react-i18next runtime behavior. (1.24.22) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12422---2025-11-24)
- The extractor now detects TypeScript TFunction generic namespaces robustly across AST variants. (1.24.21) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12421---2025-11-21)
- Trans now inherits keyPrefix from useTranslation when t is passed as a prop. (1.24.19) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12419---2025-11-19)
- Correctly handles flat (no-namespace) translation files when extract.defaultNS = false and extract.mergeNamespaces = true. (1.24.18) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12418---2025-11-19)
- Improves rename-key when the Selector API is used with bracket notation. (1.24.17) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12417---2025-11-19)
- Fixes a note in the generated i18next.d.ts file. (1.24.16) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12416---2025-11-19)
- Fixed rename-key failing when the Selector API is used. (1.24.15) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12415---2025-11-19)
- Correctly extracts keys from <Trans> when i18nKey uses the selector API (arrow function). (1.24.13) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12413---2025-11-17)
- The indentation option is now passed to types generation, affecting the formatting of generated types. (1.24.12) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12412---2025-11-17)
- Correctly generates types when mergeNamespaces is set to true. (1.24.11) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#12411---2025-11-17)
- A namespace prefix passed as an argument is no longer treated as part of the translation key, preventing unexpected nested namespace objects in generated JSON files. (1.24.9) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1249---2025-11-16)
- Trans component parsing was improved further. (1.24.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1247---2025-11-14), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1246---2025-11-14), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1245---2025-11-13)
- Location tracking now reports actual usage positions instead of end-of-file positions, providing accurate source metadata for plugins that track translation key usage. (1.24.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1244---2025-11-13)
- Fixed handling of default values containing colons, which were incorrectly identified as namespace-prefixed keys and could produce empty strings in translation files. (1.24.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1242---2025-11-12)
- Fixes the rename-key CLI command on Windows. (1.24.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1241---2025-11-12)
- Trans component parsing was improved, which may affect how the CLI handles Trans components. (1.23.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1248---2025-11-14), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1243---2025-11-12), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1240---2025-11-12), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1237---2025-11-12)
- Fixed JSX extraction. (1.23.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1236---2025-11-12)
- Improved Trans component parsing for spaces. (1.23.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1236---2025-11-12)
- Custom sort functions are now applied throughout the entire object hierarchy, ensuring consistent key ordering at all nesting levels in translation files. (1.23.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1235---2025-11-11)
- Fixes preservingContextVariants when using the shorthand property for context in options. (1.23.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1234---2025-11-11)
- Fixes preservingContextVariants with fully dynamic context in Trans. (1.23.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1233---2025-11-10)
- Trans component extraction now preserves self-closing HTML tag spacing, such as `<br />`, instead of normalizing it to `<br/>`, keeping extracted keys consistent with source formatting. (1.23.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1231---2025-11-10)
- The status report now calculates translation completeness according to each language's pluralization rules. (1.22.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1293---2025-12-03), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1222---2025-11-08)
- The extractor preserves existing primary-language translations for namespaced <Trans> keys without explicit defaultValue when using --sync-primary, treating generated defaults consistently with t() calls. (1.21.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1211---2025-11-05)
- The extractor retries parsing .ts files with TSX enabled, tolerating JSX/TSX syntax in them. (1.20.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1204---2025-11-04)
- The linter retries parsing .ts files with TSX enabled and emits a per-file error instead of crashing globally. (1.20.3) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1203---2025-11-04)
- Prevents variables from one file leaking into another, so unrelated variables in other files are not resolved as translation keys. (1.20.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1202---2025-11-03)
- Preserves flat JSON output during re-extraction when extract.defaultNS is false. (1.19.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1193---2025-11-02), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1192---2025-11-02)
- The extractor and linter select SWC parsing mode based on file extension, preventing parser crashes on TypeScript angle-bracket type assertions. (1.19.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1191---2025-10-31)
- The extractor emits the base key for single-category plural languages such as ja, zh, and ko. (1.17.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1172---2025-10-29)
- Avoids double-expanding plural keys, which could make locales show 0% translated. (1.17.2) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1172---2025-10-29)
- Fixes a regression for Windows introduced in v1.17.0. (1.17.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1171---2025-10-29)
- The linter now ignores self-closing tags when they are listed in ignoredTags. (1.13.1) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1131---2025-10-27)
- Properly honors extract.ignore patterns to stop infinite watch loops. (1.11.13) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#11114---2025-10-22), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#11113---2025-10-22)
- The JSX parser was further improved. (1.11.10) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#11112---2025-10-21), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#11110---2025-10-20)
- Detects shorthand object property count in t calls so plural keys are generated correctly. (1.11.9) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1119---2025-10-20)
- Child indexing now recognizes self-closing HTML tags and treats them as layout-only when appropriate, preventing preserved HTML and formatting whitespace from shifting component placeholder indexes. (1.11.8) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1118---2025-10-20)
- Fixed --sync-primary (--syncPrimaryWithDefaults) resetting plural variants to empty strings and removing existing plural translations. (1.11.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1117---2025-10-20)
- Improved Trans child indexing further. (1.11.7) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1117---2025-10-20)
- Child indexing now matches react-i18next, and layout-only whitespace is handled correctly. (1.11.6) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1116---2025-10-19)
- The extractor prevents scope leakage and resolves namespaces correctly for t()/getFixedT() when t is declared later in the same file, restoring idempotent extraction regardless of input file ordering. (1.11.5) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1115---2025-10-17)
- The extractor ignores formatting-only JSXText nodes when serializing <Trans> children, avoiding inflated component placeholder indexes and incorrect keys caused by indentation and newlines. (1.11.4) — [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1115---2025-10-17), [release notes](https://github.com/i18next/i18next-cli/blob/c77cae2bdb8efd9e3627f4818d3ffe8d8d97cd63/CHANGELOG.md#1114---2025-10-15)
