# What changed in react-intl

> 58 changes in react-intl 8 to 12 from its official release notes, upgrade guides and advisories: 8 breaking, 1 security, 5 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/react-intl/

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

## react-intl 12

### Breaking changes

- Simplifies typed helper calls and generated contracts; this is a breaking change. (12.0.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4012.0.0)

### New APIs and options

- Adds opt-in support for branded message text. (12.1.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4012.1.0)
- Exports a shared text message formatter type for use by developers. (12.0.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4012.0.0)

### Fixes and other changes

- The eslint-plugin-formatjs now generates lint-compatible empty message contracts. (12.1.1) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4012.1.1)
- Default message helpers now use empty ICU contracts, fixing their type behavior for messages without ICU arguments. (12.0.2) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4012.0.2)
- Fixes migration of existing message catalogs so they migrate cleanly. (12.0.1) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4012.0.1)

## react-intl 11

### Fixes and other changes

- $t now aligns with the formatMessage overloads, improving its type behavior. (11.0.1) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4011.0.1)

## react-intl 10

### Breaking changes

- TypeScript peer dependencies were removed, changing the package's peer dependency requirements. (10.1.1) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.1)
- Major version bump; migration instructions are available in the upgrade guide. (10.0.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.0.0)

### Security

- Verbatim text is restricted to domain sources. (10.2.1) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.2.1)

### New APIs and options

- Adds duration components and bindings to react-intl. (10.2.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.2.0)
- A headless editor package is published, with a headless translation workflow. (10.1.27) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.27)

### Performance

- Skipped message diagnostics run faster in formatjs_cli. (10.1.12) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.12)
- Catalog parsing is parallelized, improving CLI processing performance. (10.1.10) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.10)
- File processing is parallelized, improving CLI processing performance. (10.1.10) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.10)

### Behavior and default changes

- formatjs_intl accepts inline named values. (10.1.22) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.22)
- CLDR was upgraded to 48.2.0, updating the locale data used for internationalization. (10.1.19) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.19)
- Applies defaults to Date methods in @formatjs/intl-datetimeformat. (10.1.18) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.18)
- The timezone database was updated to 2026c, which may affect timezone data used by date-time formatting. (10.1.16) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.16)

### Tooling

- The CLI can extract Python format_message calls. (10.1.26) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.26)
- formatjs_cli can now extract messages from Python. (10.1.24) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.24)
- The FormatJS ESLint plugin allows conditional ICU element blocklists. (10.1.23) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.23)
- eslint-plugin-formatjs detects glued placeholders. (10.1.22) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.22)
- An Rsbuild adapter was added to @formatjs/unplugin. (10.1.15) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.15)
- formatjs_cli now supports id interpolation hash algorithms. (10.1.12) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.12)

### Fixes and other changes

- Message extraction now handles tagged template literals. (10.1.27) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.27)
- Message IDs are preserved for empty descriptions. (10.1.27) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.27)
- The plugin supports transparent expression wrappers. (10.1.26) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.26)
- Message recognition is aligned across tools. (10.1.26) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.26)
- The Python runtime fallback is aligned. (10.1.26) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.26)
- The CLI library uses native extraction. (10.1.23) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.23)
- The FormatJS CLI now extracts messages that contain only an id. (10.1.20) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.20)
- Missing id errors now include context, helping identify which message caused the error. (10.1.19) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.19)
- The ICU message parser now preserves plural context in tags. (10.1.19) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.19)
- Structural variables are deduplicated in the ICU message format parser. (10.1.17) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.17)
- Weekday counts 4, 5, and 6 in e/c skeletons now map to long, narrow, and short, respectively. (10.1.16) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.16)
- The hour12 option is now honored when timeStyle is used. (10.1.15) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.15)
- Adjacent syntax characters are coalesced when escaping in the ICU message parser. (10.1.15) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.15)
- FormatJS CLI extraction now parses JSX in JavaScript inputs. (10.1.15) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.15)
- The numberingSystem option is now honored by @formatjs/intl-relativetimeformat. (10.1.15) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.15)
- Supports React 18 and React 18+ consumers, including the React 18 peer range. (10.1.14) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.14)
- Unicode whitespace is normalized when generating ids. (10.1.13) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.13)
- formatjs_cli supports loader-utils id templates. (10.1.13) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.13)
- Fixes decoding of the JSX bull entity. (10.1.10) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.10)
- The native extract binding is exposed by @formatjs/cli-lib. (10.1.10) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.10)
- Transform hook filters are exposed by @formatjs/unplugin. (10.1.10) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.10)
- Sets the displayName for FormattedListParts. (10.1.8) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%4010.1.8)

## react-intl 8

### Breaking changes

- formatTime and FormattedTimeParts use global time Formats for format config overrides instead of date Formats. (8.0.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.0.0)
- react-intl is converted to ESM, affecting how projects load and bundle the package. (8.0.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.0.0)
- Support for React 18 and below is dropped; projects using react-intl must use a later React version. (8.0.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.0.0)
- Rich text is wrapped with Fragment instead of clone, changing how rich-text output is produced. (8.0.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.0.0)
- @types/react is moved to a peer dependency, affecting dependency installation and package compatibility. (8.0.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.0.0)

### New APIs and options

- react-intl adds support for RSC. (8.2.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.2.0)

### Behavior and default changes

- Improves Unicode 17.0 Format/Extend transparency in the segmenter. (8.1.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.1.0)

### Fixes and other changes

- react-intl is modernized for React 19. (8.2.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.2.0)
- Fixes Vitest DOM tests failing in a Bazel sandbox. (8.2.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.2.0)
- Fixes the JSON ESM import in @formatjs/utils. (8.0.6) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.0.6)
- FormattedDate and FormattedTime receive strict typing for format overrides. (8.0.0) — [release notes](https://github.com/formatjs/formatjs/releases/tag/react-intl%408.0.0)
