npm / react-intl
react-intl
What changed in react-intl 8 to 12, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
8 breaking1 security5 new APIs and options3 performance5 behavior and defaults6 tooling30 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initreact-intl 126 changes
Breaking changes 1
Simplifies typed helper calls and generated contracts; this is a breaking change.
New APIs and options 2
Adds opt-in support for branded message text.
Exports a shared text message formatter type for use by developers.
Fixes and other changes 3
The eslint-plugin-formatjs now generates lint-compatible empty message contracts.
Default message helpers now use empty ICU contracts, fixing their type behavior for messages without ICU arguments.
Fixes migration of existing message catalogs so they migrate cleanly.
react-intl 111 changes
Fixes and other changes 1
$t now aligns with the formatMessage overloads, improving its type behavior.
react-intl 1040 changes
Breaking changes 2
TypeScript peer dependencies were removed, changing the package's peer dependency requirements.
Major version bump; migration instructions are available in the upgrade guide.
Security 1
Verbatim text is restricted to domain sources.
New APIs and options 2
Adds duration components and bindings to react-intl.
A headless editor package is published, with a headless translation workflow.
Performance 3
Skipped message diagnostics run faster in formatjs_cli.
Catalog parsing is parallelized, improving CLI processing performance.
File processing is parallelized, improving CLI processing performance.
Behavior and default changes 4
formatjs_intl accepts inline named values.
CLDR was upgraded to 48.2.0, updating the locale data used for internationalization.
Applies defaults to Date methods in @formatjs/intl-datetimeformat.
The timezone database was updated to 2026c, which may affect timezone data used by date-time formatting.
Tooling 6
The CLI can extract Python format_message calls.
formatjs_cli can now extract messages from Python.
The FormatJS ESLint plugin allows conditional ICU element blocklists.
eslint-plugin-formatjs detects glued placeholders.
An Rsbuild adapter was added to @formatjs/unplugin.
formatjs_cli now supports id interpolation hash algorithms.
Fixes and other changes 22
Message extraction now handles tagged template literals.
Message IDs are preserved for empty descriptions.
The plugin supports transparent expression wrappers.
Message recognition is aligned across tools.
The Python runtime fallback is aligned.
The CLI library uses native extraction.
The FormatJS CLI now extracts messages that contain only an id.
Missing id errors now include context, helping identify which message caused the error.
The ICU message parser now preserves plural context in tags.
Structural variables are deduplicated in the ICU message format parser.
Weekday counts 4, 5, and 6 in e/c skeletons now map to long, narrow, and short, respectively.
The hour12 option is now honored when timeStyle is used.
Adjacent syntax characters are coalesced when escaping in the ICU message parser.
FormatJS CLI extraction now parses JSX in JavaScript inputs.
The numberingSystem option is now honored by @formatjs/intl-relativetimeformat.
Supports React 18 and React 18+ consumers, including the React 18 peer range.
Unicode whitespace is normalized when generating ids.
formatjs_cli supports loader-utils id templates.
Fixes decoding of the JSX bull entity.
The native extract binding is exposed by @formatjs/cli-lib.
Transform hook filters are exposed by @formatjs/unplugin.
Sets the displayName for FormattedListParts.
react-intl 811 changes
Breaking changes 5
formatTime and FormattedTimeParts use global time Formats for format config overrides instead of date Formats.
react-intl is converted to ESM, affecting how projects load and bundle the package.
Support for React 18 and below is dropped; projects using react-intl must use a later React version.
Rich text is wrapped with Fragment instead of clone, changing how rich-text output is produced.
@types/react is moved to a peer dependency, affecting dependency installation and package compatibility.
New APIs and options 1
react-intl adds support for RSC.
Behavior and default changes 1
Improves Unicode 17.0 Format/Extend transparency in the segmenter.
Fixes and other changes 4
react-intl is modernized for React 19.
Fixes Vitest DOM tests failing in a Bazel sandbox.
Fixes the JSON ESM import in @formatjs/utils.
FormattedDate and FormattedTime receive strict typing for format overrides.