LGTM1. Let's make sure we get a Web Feature ID to track it with.

On Wednesday, September 9, 2026 at 1:48:12 PM UTC-7 Florin Malita wrote:

> On Wed, Sep 9, 2026 at 6:49 AM Yoav Weiss (@Shopify) <
> [email protected]> wrote:
>
>> Can you ask for a review on the "adoption" checkbox?
>>
> Done, thanks!
>
> On Monday, September 7, 2026 at 2:57:49 PM UTC+2 Florin Malita wrote:
>>
>>> Contact emails
>>>
>>> [email protected], [email protected], [email protected], 
>>> [email protected]
>>>
>>> Explainer
>>>
>>>
>>> https://github.com/fserb/canvas2D/blob/master/spec/enhanced-textmetrics.md
>>>
>>>
>>> https://github.com/Igalia/explainers/blob/main/canvas-formatted-text/text-metrics-additions.md
>>>
>>> https://github.com/whatwg/html/issues/10677
>>>
>>> Specification
>>>
>>> https://github.com/whatwg/html/pull/11000
>>>
>>> Summary
>>>
>>> Expand the TextMetrics Canvas API to support selection rectangles, 
>>> bounding box queries, and glyph cluster-based operations.
>>>
>>> This new functionality should enable complex text editing applications 
>>> with accurate selection, caret positioning, and hit testing. Additionally, 
>>> cluster-based rendering facilitates sophisticated text effects such as 
>>> independent character animations and styling.
>>>
>>> Blink component
>>>
>>> Blink>Canvas 
>>> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ECanvas%22>
>>>
>>> Web Feature ID
>>>
>>> Missing feature
>>>
>>> Motivation
>>>
>>> The existing TextMetrics API provides measurements for atomic text, but 
>>> offers no facilities to break down that information to a more granular 
>>> level.
>>>
>>> Sophisticated text applications (editors in particular) require such 
>>> granular information in order to support accurate selection, caret 
>>> positioning and hit testing at a grapheme level. Currently they are 
>>> resorting to various inaccurate approximations to work around API 
>>> limitations.
>>>
>>> Another complex use case involves rendering fragments of pre-shaped text 
>>> with different attributes - e.g. different colors or different transforms. 
>>> This is of particular interest to animation frameworks which allow 
>>> characters to be animated independently. Such functionality is not directly 
>>> supported in existing APIs, and implementers must again resort to 
>>> approximate workarounds.
>>>
>>> The enhanced TextMetrics proposal aims to address the current API 
>>> shortcomings and to offer first class support for the above use cases.
>>>
>>> Initial public proposal
>>>
>>> https://github.com/whatwg/html/pull/11000
>>>
>>> TAG review
>>>
>>> https://github.com/w3ctag/design-reviews/issues/1095
>>>
>>> TAG review status
>>>
>>> Issues open
>>>
>>> The TAG review was closed as unsatisfied. The TAG raised concerns 
>>> regarding canvas accessibility defaults and suggested waiting for 
>>> HTML-in-Canvas or using DOM element wrappers. We evaluated these 
>>> alternatives in the explainer, but concluded that they are technically 
>>> infeasible for the intended user base (low-level shaping and framework 
>>> engines like Flutter Web). We agreed to disagree with the TAG on the scope 
>>> of low-level Canvas primitives.
>>>
>>> Origin Trial Name
>>>
>>> Enhanced Canvas TextMetrics
>>>
>>> Goals for experimentation
>>>
>>> Partners have implemented prototypes based on the available runtime 
>>> feature, with positive feedback. They are now interested in expanding the 
>>> scope, and testing the API with real users.
>>>
>>> This experiment will provide valuable validation in real-world use 
>>> scenarios, and should help us gauge the proposed API's fitness, ergonomics, 
>>> and performance.
>>>
>>> Chromium Trial Name
>>>
>>> ExtendedTextMetrics
>>>
>>> Origin Trial documentation link
>>>
>>>
>>> https://github.com/Igalia/explainers/blob/main/canvas-formatted-text/text-metrics-additions.md
>>>
>>> WebFeature UseCounter name
>>>
>>> kExtendedTextMetrics
>>>
>>> Risks
>>>
>>>
>>> Interoperability and Compatibility
>>>
>>> Interoperability Risk:
>>>
>>> The primary interoperability risk is that other browser engines (Gecko 
>>> and WebKit) have not yet committed to implementing this specific API 
>>> surface. WebKit has expressed interest in exploring alternative, 
>>> higher-level text shaping and line formatting abstractions. This risk is 
>>> mitigated by several factors:
>>>
>>>
>>>    - 
>>>    
>>>    Strictly Additive & Feature Detectable: The feature consists 
>>>    entirely of new methods on TextMetrics (getSelectionRects(), 
>>>    getActualBoundingBox(), getTextClusters(), getIndexFromOffset()) and 
>>>    CanvasRenderingContext2D (fillTextCluster(), strokeTextCluster()). 
>>> Existing 
>>>    Canvas behavior is completely unaffected. Developers can trivially 
>>>    feature-detect support (e.g., 'getTextClusters' in 
>>> TextMetrics.prototype) 
>>>    and maintain existing DOM-based fallbacks on non-supporting browsers. 
>>>    - 
>>>    
>>>    Standard String Semantics: All index and range inputs/outputs 
>>>    (start, end, and hit-test results) are explicitly specified as 0-based 
>>>    UTF-16 code units, aligning with ECMAScript string operations, DOM 
>>>    Range/Selection, and Intl.Segmenter.
>>>    - 
>>>    
>>>    Future Extensibility: If cross-engine consensus converges on 
>>>    higher-level formatting abstractions (e.g., multi-style TextLine or 
>>>    ShapedText) in the future, these low-level cluster and selection 
>>> primitives 
>>>    can cleanly coexist as foundational shaping utilities without creating 
>>>    backwards-incompatible syntax collisions.
>>>    
>>>
>>> Compatibility Risk: None.
>>>
>>> The changes are entirely additive and introduce no breaking changes to 
>>> existing Canvas 2D measurement or rendering behavior.
>>>
>>> Gecko: No signal (
>>> https://github.com/mozilla/standards-positions/issues/1144)
>>>
>>> WebKit: Negative (
>>> https://github.com/WebKit/standards-positions/issues/436)
>>>
>>> WebKit supports the general problem space (enabling canvas text shaping, 
>>> cluster rendering, and selection) but has expressed reservations regarding 
>>> the specific API design in this proposal (see WHATWG issue #10677). 
>>> Specifically, WebKit prefers exploring an alternative, line-level 
>>> abstraction (e.g., TextLine) to handle multi-style text and BiDi 
>>> interleaving, rather than extending TextMetrics.
>>>
>>> Web developers: Positive
>>>
>>> There is strong demand from canvas-heavy frameworks and applications 
>>> that implement custom text layout and text editing. Canvas text rendering 
>>> currently suffers from significant performance and memory overhead because 
>>> applications are forced to synchronize offscreen DOM elements just to 
>>> measure selection rectangles, bounding boxes, and caret positions. Key 
>>> validation from the ~8-month Origin Trial:
>>>
>>>    - 
>>>    
>>>    Flutter Web: Integrated and validated the API in their production 
>>>    engine (WebParagraph) throughout the Origin Trial. They rely on 
>>>    getTextClusters() and getSelectionRects() to drive their web text layout 
>>>    and hit-testing, and are strongly advocating for shipping this 
>>> capability. 
>>>    - 
>>>    
>>>    Canvas Tooling & Creative Coding: Successfully demonstrated in 
>>>    complex single-line typography scenarios, such as interactive 
>>>    text-on-a-path editors and per-glyph animations, without requiring 
>>>    DOM-based synchronization.
>>>    
>>>
>>> Other signals:
>>>
>>> Ergonomics
>>>
>>> None.
>>>
>>> Activation
>>>
>>> None.
>>>
>>> Security
>>>
>>> There is always a fingerprinting concern with HTML canvas. The new 
>>> features expose no novel fingerprinting surface (text metrics are already a 
>>> fingerprinting concern).
>>>
>>> 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 information provided
>>>
>>>
>>> Debuggability
>>>
>>> DevTools supports querying the APIs by default.
>>>
>>> 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 
>>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>
>>> ?
>>>
>>> Yes
>>>
>>> html/canvas/[element|offscreen]/text... 
>>> 2d.text.measure.index-from-offset* 2d.text.measure.selection-rects* 
>>> 2d.text.measure.text-clusters* 
>>> https://wpt.fyi/results/html/canvas/element/text?label=master&label=experimental&aligned&q=tentative
>>>  
>>> https://wpt.fyi/results/html/canvas/offscreen/text?label=master&label=experimental&aligned&q=tentative
>>>
>>> Flag name on about://flags
>>>
>>> Experimental Web Platform Features
>>>
>>> Finch feature name
>>>
>>> ExtendedTextMetrics
>>>
>>> Rollout plan
>>>
>>> Will ship enabled for all users
>>>
>>> Requires code in //chrome?
>>>
>>> False
>>>
>>> Tracking bug
>>>
>>> https://issues.chromium.org/issues/341213359
>>>
>>> Measurement
>>>
>>> Usage is tracked via the Blink UseCounter 
>>> WebFeature::kExtendedTextMetrics (ID: 5729).
>>>
>>> Estimated milestones
>>>
>>> Shipping on desktop
>>>
>>> 156
>>>
>>> Origin trial desktop first
>>>
>>> 144
>>>
>>> Origin trial desktop last
>>>
>>> 149
>>>
>>> Origin trial extension 1 end milestone
>>>
>>> 152
>>>
>>> DevTrial on desktop
>>>
>>> 141
>>>
>>> Shipping on Android
>>>
>>> 156
>>>
>>> Origin trial Android first
>>>
>>> 144
>>>
>>> Origin trial Android last
>>>
>>> 149
>>>
>>> DevTrial on Android
>>>
>>> 141
>>>
>>> Shipping on WebView
>>>
>>> 156
>>>
>>>
>>> Anticipated spec changes
>>>
>>> There are stalled discussions in WHATWG regarding the long-term 
>>> evolution of Canvas text styling and line layout:
>>>
>>>    - 
>>>    
>>>    https://github.com/whatwg/html/pull/11000
>>>    - 
>>>    
>>>    https://github.com/whatwg/html/issues/10677
>>>    
>>>
>>> Potential Future Evolution & Compatibility Assessment:
>>>
>>>    1. 
>>>    
>>>    Higher-Level Line Abstractions: WebKit has expressed interest in 
>>>    eventually standardizing a higher-level, multi-style line abstraction 
>>>    (e.g., a TextLine or dedicated shaping object). If the web standards 
>>>    community converges on such an API in the future, we anticipate it will 
>>> be strictly 
>>>    additive, introducing new interfaces rather than altering or 
>>>    removing the TextMetrics methods being shipped here.
>>>    2. 
>>>    
>>>    Low-Level Coexistence: The cluster inspection (getTextClusters), 
>>>    range selection (getSelectionRects, getActualBoundingBox), and 
>>>    hit-testing (getIndexFromOffset) primitives shipped in this release 
>>>    serve as foundational, single-style shaping queries. They can cleanly 
>>>    coexist alongside any future line-formatting abstractions.
>>>    
>>> Conclusion on Compat Risk:
>>> We do not anticipate any non-backward-compatible changes to the proposed 
>>> API surface. If future standards work introduces an alternative design 
>>> favored by developers, the current API will either remain as a low-level 
>>> building block or follow the standard deprecation process if ever 
>>> superseded.
>>>
>>>
>>> Link to entry on the Chrome Platform Status
>>>
>>> https://chromestatus.com/feature/5075532483657728?gate=5118769432887296
>>>
>>> Links to previous Intent discussions
>>>
>>> Intent to Prototype: 
>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CADgYMVdqo4PBs4OkGqVncRizs8vtX4YtFLDcK%2BRxdYo_wnaRJQ%40mail.gmail.com
>>>
>>> Ready for Trial: 
>>> https://groups.google.com/a/chromium.org/g/blink-dev/c/OLCCI0ExvIk
>>>
>>> Intent to Experiment: 
>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CADgYMVfC-Naw8pFVaUUPMSfW-u3kC7SMdDeHJgwU5YmSHOOeeA%40mail.gmail.com
>>>
>>> Intent to Extend Experiment 1: 
>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CADgYMVfjd5mbDkm16_Xf4fxfnrEeiAXLhjiBCXWik0GaNJGE2Q%40mail.gmail.com
>>>
>>>
>>> This intent message was generated by Chrome Platform Status 
>>> <https://chromestatus.com/>.
>>>
>>>
>>>
>>> -- 
>> 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 [email protected].
>> To view this discussion visit 
>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/02084c06-53d9-4257-b947-1367d706c41cn%40chromium.org
>>  
>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/02084c06-53d9-4257-b947-1367d706c41cn%40chromium.org?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
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 [email protected].
To view this discussion visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/2ac50569-b01b-443c-b173-52e099deeaa5n%40chromium.org.

Reply via email to