Intent to Ship: ICU 77 (supporting Unicode 16)

72 views
Skip to first unread message

Chromestatus

unread,
Sep 18, 2025, 5:40:53 AM (3 days ago) Sep 18
to blin...@chromium.org, foo...@chromium.org, ko...@chromium.org
Contact emails
foo...@chromium.org, ko...@chromium.org

Explainer
None

Specification
https://tc39.es/ecma402

Design docs

https://unicode-org.github.io/icu/download/77.html
https://cldr.unicode.org/downloads/cldr-46
https://www.unicode.org/versions/Unicode16.0.0

Summary
ICU is not a feature itself, but the third-party library we use for general Unicode support. We are using the Blink launch process because there is web compat risk and security considerations. The upgrade is from ICU 74.2 to ICU 77.1, the current latest release. ICU 77 contains CLDR 46 and other changes to support Unicode 16. The web-exposed changes are mainly the Intl and RegExp APIs, IDNA rules for URLs, and text segmentation. Intl and RegExp (V8): Lots of small changes. The change of Italian number formatting is the riskiest and has a dedicated flag, see compat risk section. IDNA: Generally more things are allowed, and this upgrade improves our overall test results in WPT. Text segmentation: The most interesting change is better Japanese line breaking when using `word-break: auto-phrase`, related to https://chromestatus.com/feature/5133892532568064. All test changes are explained in https://docs.google.com/document/d/1lrfJJmWvLXYPYSYlxE3mXTgDZI9U1bw2FrJYrDorgqE/edit?usp=sharing

Blink component
Blink>JavaScript>Internationalization

Web Feature ID
intl

TAG review
None

TAG review status
Not applicable

Risks


Interoperability and Compatibility
ICU upgrades have non-trivial web compat risk and have broken sites in the past. These steps have been taken to reduce the risk of this upgrade: - Asked Mozilla about regressions they got when upgrading - Added webexposed tests for common locales: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/webexposed/resources/intl-locales.js - Explained all test changes we see in Chromium and V8: https://docs.google.com/document/d/1lrfJJmWvLXYPYSYlxE3mXTgDZI9U1bw2FrJYrDorgqE/edit?usp=sharing The biggest risk is probably the change for Italian number formatting, which has generated bugs and discussion for both Firefox and iOS: https://bugzilla.mozilla.org/show_bug.cgi?id=1940923 https://stackoverflow.com/q/79621903 A flag was added for this in V8, to be used as a Finch kill switch for this specific behavior.

Gecko: Shipped/Shipping (https://bugzilla.mozilla.org/show_bug.cgi?id=1954425)

WebKit: N/A For Safari, ICU is part of the OS. It looks like iOS 18.5 upgraded to ICU 76, which includes most of the changes.

Web developers: No signals

Other signals:

Security
There are some changes to IDNA in https://unicode-org.github.io/icu/download/76.html: "The handling of UseSTD3ASCIIRules was simplified. Some existing characters changed from disallowed (when that was only for compatibility with long-obsolete IDNA2003) to valid." All IDNA-related changes are explained here: https://docs.google.com/document/d/1lrfJJmWvLXYPYSYlxE3mXTgDZI9U1bw2FrJYrDorgqE/edit?usp=sharing

WebView application risks

Does this intent deprecate or change behavior of existing APIs, such that it has potentially high risk for Android WebView-based applications? No special risk for WebView, but note that this cannot be put behind a flag due to the size of the dependency. A flag was added for the change deemed the riskiest, Italian number formatting.



Debuggability
None

Will this feature be supported on all six Blink platforms (Windows, Mac, Linux, ChromeOS, Android, and Android WebView)?
Yes

Is this feature fully tested by web-platform-tests?
NoICU isn't tested primarily through WPT, but a few tests are affected: https://docs.google.com/document/d/1lrfJJmWvLXYPYSYlxE3mXTgDZI9U1bw2FrJYrDorgqE/edit?tab=t.0#bookmark=id.lm58eue6rpml ICU has a large impact on Test262 results which can be seen here: https://chromium-review.googlesource.com/c/v8/v8/+/6586986

Flag name on about://flags
None

Finch feature name
None

Non-finch justification
We cannot ship two copies of ICU and switch with a flag as ICU is a very large library. Instead we have carefully analyzed test changes and added a flag for the risky change that we could identify in V8: https://chromium-review.googlesource.com/c/v8/v8/+/6944304 That flag can be controlled with Finch.

Rollout plan
Will ship enabled for all users

Requires code in //chrome?
False

Tracking bug
https://crbug.com/421834885

Sample links

https://mathiasbynens.github.io/caniunicode

Estimated milestones
Shipping on desktop142
Shipping on Android142
Shipping on WebView142


Anticipated spec changes

Open questions about a feature may be a source of future web compat or interop issues. Please list open issues (e.g. links to known github issues in the project for the feature specification) whose resolution may introduce web compat/interop risk (e.g., changing to naming or structure of the API in a non-backward-compatible way). None

Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/5143313833000960?gate=5082343567785984

This intent message was generated by Chrome Platform Status.

Philip Jägenstedt

unread,
Sep 18, 2025, 5:55:08 AM (3 days ago) Sep 18
to Chromestatus, blin...@chromium.org, ko...@chromium.org
Some additional context. Upgrading ICU can break sites and it cannot be done with a flag because of the size of the library (two copies would be needed). To mitigate the risk, we'd like to use the Blink launch process going forward. Where we can identify a risk ahead of time, we can add a targeted flag for that, as we've done for Italian number formatting here.

Mike Taylor

unread,
Sep 18, 2025, 8:52:04 AM (2 days ago) Sep 18
to Philip Jägenstedt, blin...@chromium.org, ko...@chromium.org

On 9/18/25 5:54 a.m., Philip Jägenstedt wrote:

Some additional context. Upgrading ICU can break sites and it cannot be done with a flag because of the size of the library (two copies would be needed). To mitigate the risk, we'd like to use the Blink launch process going forward. Where we can identify a risk ahead of time, we can add a targeted flag for that, as we've done for Italian number formatting here.

On Thu, Sep 18, 2025 at 11:40 AM Chromestatus <ad...@cr-status.appspotmail.com> wrote:
Contact emails
foo...@chromium.org, ko...@chromium.org

Explainer
None

Specification
https://tc39.es/ecma402

Design docs

https://unicode-org.github.io/icu/download/77.html
https://cldr.unicode.org/downloads/cldr-46
https://www.unicode.org/versions/Unicode16.0.0

Summary
ICU is not a feature itself, but the third-party library we use for general Unicode support. We are using the Blink launch process because there is web compat risk and security considerations. The upgrade is from ICU 74.2 to ICU 77.1, the current latest release. ICU 77 contains CLDR 46 and other changes to support Unicode 16. The web-exposed changes are mainly the Intl and RegExp APIs, IDNA rules for URLs, and text segmentation. Intl and RegExp (V8): Lots of small changes. The change of Italian number formatting is the riskiest and has a dedicated flag, see compat risk section. IDNA: Generally more things are allowed, and this upgrade improves our overall test results in WPT. Text segmentation: The most interesting change is better Japanese line breaking when using `word-break: auto-phrase`, related to https://chromestatus.com/feature/5133892532568064. All test changes are explained in https://docs.google.com/document/d/1lrfJJmWvLXYPYSYlxE3mXTgDZI9U1bw2FrJYrDorgqE/edit?usp=sharing
This doc mentions changes to "added comma in en-GB in a date format" - where's the best place to see what that change looks like? This kind of change sounds pretty similar to https://issues.chromium.org/issues/40256057 (or go/omg-1414292-pm if you can read it (apologies to non-googlers)), and the type of things to easily break regular expressions.
--
You received this message because you are subscribed to the Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.
To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAARdPYe82rZ8OMa%3DSju64AwoF7cQtL%3DhkwiwJWX_%3D3Sr_kSStA%40mail.gmail.com.

Philip Jägenstedt

unread,
Sep 18, 2025, 9:29:32 AM (2 days ago) Sep 18
to Mike Taylor, blin...@chromium.org, ko...@chromium.org
On Thu, Sep 18, 2025 at 2:51 PM Mike Taylor <mike...@chromium.org> wrote:

On 9/18/25 5:54 a.m., Philip Jägenstedt wrote:

Some additional context. Upgrading ICU can break sites and it cannot be done with a flag because of the size of the library (two copies would be needed). To mitigate the risk, we'd like to use the Blink launch process going forward. Where we can identify a risk ahead of time, we can add a targeted flag for that, as we've done for Italian number formatting here.

On Thu, Sep 18, 2025 at 11:40 AM Chromestatus <ad...@cr-status.appspotmail.com> wrote:
Contact emails
foo...@chromium.org, ko...@chromium.org

Explainer
None

Specification
https://tc39.es/ecma402

Design docs

https://unicode-org.github.io/icu/download/77.html
https://cldr.unicode.org/downloads/cldr-46
https://www.unicode.org/versions/Unicode16.0.0

Summary
ICU is not a feature itself, but the third-party library we use for general Unicode support. We are using the Blink launch process because there is web compat risk and security considerations. The upgrade is from ICU 74.2 to ICU 77.1, the current latest release. ICU 77 contains CLDR 46 and other changes to support Unicode 16. The web-exposed changes are mainly the Intl and RegExp APIs, IDNA rules for URLs, and text segmentation. Intl and RegExp (V8): Lots of small changes. The change of Italian number formatting is the riskiest and has a dedicated flag, see compat risk section. IDNA: Generally more things are allowed, and this upgrade improves our overall test results in WPT. Text segmentation: The most interesting change is better Japanese line breaking when using `word-break: auto-phrase`, related to https://chromestatus.com/feature/5133892532568064. All test changes are explained in https://docs.google.com/document/d/1lrfJJmWvLXYPYSYlxE3mXTgDZI9U1bw2FrJYrDorgqE/edit?usp=sharing
This doc mentions changes to "added comma in en-GB in a date format" - where's the best place to see what that change looks like? This kind of change sounds pretty similar to https://issues.chromium.org/issues/40256057 (or go/omg-1414292-pm if you can read it (apologies to non-googlers)), and the type of things to easily break regular expressions

It shows up in two places in test changes in https://chromium-review.googlesource.com/c/chromium/src/+/6578333.

The first is base/i18n/time_formatting_unittest.cc with these are the changes:

"Saturday 30 April 2011 at 15:42:07" → "Saturday, 30 April 2011 at 15:42:07
"Saturday 30 April 2011" → "Saturday, 30 April 2011"

The other is third_party/blink/web_tests/webexposed/intl-date-time-format-expected.txt with this change:

"Wednesday 14 June 2023 at 14:50:00 British Summer Time" → "Wednesday, 14 June 2023 at 14:50:00 British Summer Time"

I agree that this carries some risk. On the "probably fine" part of the ledger we have:
  • It aligns more with en-US where there is a comma for the "full" format, as well as some of the shorter ones
  • Firefox shipped it and didn't get any regression reports about this. I can't spot anything in my own search either.
https://issues.chromium.org/issues/40256057 is precisely the reason why nobody has updated ICU for a long time and why it's important to have enough checks in place to make such breakage much less likely.

Putting a change like this behind a flag is a bit fraught because we're writing some new code to emulate what older versions of ICU did, and can't be 100% confident that it's correct for all combinations. I will dig up the CLDR change behind this and see if it's controllable by ICU inputs, as was luckily the case for the Italian number formatting change.

Best regards,
Philip

Philip Jägenstedt

unread,
Sep 18, 2025, 9:36:15 AM (2 days ago) Sep 18
to Chromestatus, blin...@chromium.org, ko...@chromium.org
Oops, the CLDR version is 47, not 46. I'll update the chromestatus entry.

On Thu, Sep 18, 2025 at 11:40 AM Chromestatus <ad...@cr-status.appspotmail.com> wrote:
Reply all
Reply to author
Forward
0 new messages