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.

Reply via email to