I also see that WebKit has engaged with an alternate API shape proposal <https://github.com/WebKit/explainers/pull/137> that likely needs consideration.
On Wed, Sep 23, 2026 at 8:06 AM Rick Byers <[email protected]> wrote: > Update from API owners: If it doesn't cause too much of a delay, we'd like > to ship things alongside HTML-in-canvas (instead of ahead of it) in order > to help mitigate the TAG concerns. Florin is OOO but I confirmed with him > that he thought that was a good idea. So let's circle back in a week or two > and hopefully we'll know more about HTML-in-canvas timelines then. > > Rick > > On Mon, Sep 14, 2026 at 2:17 PM Alex Russell <[email protected]> > wrote: > >> 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/CAFUtAY_N0pZd%3DHeYo%3DR%3DPPyf1Mu-eYYB5naVB9K9%2BCOsGXfnGg%40mail.gmail.com > <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFUtAY_N0pZd%3DHeYo%3DR%3DPPyf1Mu-eYYB5naVB9K9%2BCOsGXfnGg%40mail.gmail.com?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/CAOMQ%2Bw_yh%2BAg4cPFxOd0VLmKxjLBJeyVdMcwVaWpodJ-Pjf7zw%40mail.gmail.com.
