The ICU4X Technical Committee is happy to announce ICU4X 2.3, an update to our modular, portable, and secure i18n library.
ICU4X is Unicode's modern, lightweight, portable, and secure i18n library. Built from the ground up, its binary size and memory usage footprint is 50-90% smaller than ICU4C. It is memory-safe, written in Rust with interfaces into C++, JavaScript, Dart, TypeScript, Kotlin — with other languages in the timeline. Mozilla Firefox, Google Chrome, Google Pixel Watch, core Android, numerous Flutter apps, and more clients are already using ICU4X.
Important changes in ICU4X 2.3 include:
- [Preview] New Rule-Based Segmenters (icu_segmenter):
- This release introduces a redesigned segmentation engine based on PRI #555, which improves correctness and enables ICU4X to implement the latest Unicode release. Look for new_neo constructors on the Grapheme, Word, Sentence, and Line segmenters.
- The hand-written state tables have also been fully updated to Unicode 17. Look for new_17 constructors on the Line segmenter. (Note: Unicode 17 is already the default behavior for Grapheme, Word, and Sentence segmenters.)
- 💬 We want your feedback! Please help evaluate how these new segmentation engines hold up in real-life workloads and provide feedback around performance and correctness on GitHub.
- Stable Dart Release:
- The Dart icu4x package is released as stable on pub.dev for the first time, making it easier to integrate with Flutter apps.
- [Preview] Locale Display Names (icu_locale::names):
- New home: Moved single display name formatting from icu_experimental into icu_locale::names.
- Full support for language identifiers: Renders localized display names for language identifiers, regions, scripts, and variants (including FFI support across C++, Dart, JavaScript, and Kotlin).
- Data Slicing: Data loading is now split into Tiny, Light, and Heavy depth slices, allowing applications to include only what they need to minimize data footprint.
- 💬 We want your feedback! As locale display names move closer to stabilization, we welcome feedback on the API surface and data model on GitHub.
- Date & Time Formatting & Date Range Formatter (icu_datetime):
- [Preview] Date Range Formatting: Added experimental support for date range formatting, enabling the ability to format strings like “Dec 22 – 23, 2026”.
- Flexible Day Periods: Implemented flexible day periods (such as "in the morning" or "at night").
- Formatting & Pattern Fixes: Added support for numbering system overrides in datetime patterns, preserved zero minutes in 24-hour optional minute formatting, and improved calendar resolution for locale-implied regions.
- [Experimental] Currency Formatting:
- Major API Redesign: Overhauled currency formatting in icu_experimental to support generic value representations.
- Dedicated Constructors & Options: Introduced dedicated options for symbol, narrow symbol, currency name, compact variants, ISO codes, and accounting usage.
- [Preview] UnicodeSet Parser (icu_properties):
- New home: Moved UTS#35 UnicodeSet parsing from icu_experimental into icu_properties.
- New syntax & properties: Added support for East Asian Width set syntax and updated property constants to align with official Unicode 17 property names.
Check out our quickstart tutorial, interactive demo, or C++, TypeScript, and Dart documentation.
As before, the Rust crate is available at crates.io, with documentation at docs.rs.
Please post any questions via GitHub Discussions.
.png)