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.
