)]}'
{"id": 5172548013916160, "name": "HTML-in-canvas", "summary": "HTML-in-canvas enables customizing the rendering of html using canvas with new primitives to manage canvas layout, drawing capabilities, rendering events for DOM-to-canvas synchronization, and geometry update capabilities for canvas-to-DOM synchronization.", "markdown_fields": [], "blink_components": ["Blink>Canvas"], "star_count": 79, "search_tags": [], "created": {"by": "aaronhk@chromium.org", "when": "2024-06-26 18:07:01.756076"}, "updated": {"by": "pdr@chromium.org", "when": "2026-09-30 18:58:39.313756"}, "category": "Graphics", "category_int": 14, "feature_notes": null, "web_feature": "canvas", "is_official_web_feature": true, "webdx_usecounter_enum": null, "enterprise_feature_categories": [], "enterprise_product_category": 0, "is_releasenotes_content_reviewed": false, "is_releasenotes_publish_ready": false, "stages": [{"id": 5130699865849856, "created": "2024-06-26 18:07:01.938768", "feature_id": 5172548013916160, "stage_type": 110, "display_name": null, "intent_stage": 7, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5198160027975680, "created": "2024-06-26 18:07:02.009000", "feature_id": 5172548013916160, "stage_type": 120, "display_name": null, "intent_stage": 1, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/d/msgid/blink-dev/a473b17f-def6-4bb7-85ee-344947c5ecabn%40chromium.org", "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 6245113687965696, "created": "2024-06-26 18:07:02.144056", "feature_id": 5172548013916160, "stage_type": 130, "display_name": null, "intent_stage": 2, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": 138, "android_first": 138, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5073963263983616, "created": "2024-06-26 18:07:02.193599", "feature_id": 5172548013916160, "stage_type": 140, "display_name": null, "intent_stage": 4, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5139585079443456, "created": "2024-06-26 18:07:02.266014", "feature_id": 5172548013916160, "stage_type": 150, "display_name": "html-in-canvas", "intent_stage": 3, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/g/blink-dev/c/t_nGEmJ_v4s", "announcement_url": null, "experiment_goals": "API shape", "experiment_risks": null, "origin_trial_id": "3478467762190286849", "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": "HTMLInCanvas", "ot_description": "HTML-in-canvas enables customizing the rendering of html using canvas with three new primitives: an attribute to opt-in canvas elements (layoutsubtree), methods to draw child elements (2d: drawElementImage, webgl: texElementImage2D, webgpu: copyElementImageToTexture), and a paint event which fires to handle updates.", "ot_display_name": "html-in-canvas", "ot_documentation_url": "https://github.com/WICG/html-in-canvas", "ot_emails": ["nattestad@google.com"], "ot_feedback_submission_url": "https://github.com/WICG/html-in-canvas/issues", "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": "pdr@google.com", "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": 5866, "ot_webfeature_use_counter": "kHTMLInCanvas", "extensions": [{"id": 5076318757715968, "created": "2026-06-10 16:55:47.451982", "feature_id": 5172548013916160, "stage_type": 151, "display_name": null, "intent_stage": 11, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/d/msgid/blink-dev/6a2997ea.8b46cef5.209277.04ee.GAE%40google.com", "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": "pdr@chromium.org", "ot_requester_email": "pdr@chromium.org", "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": "We have received substantial feedback, have made significant changes (WebGL/WebGPU APIs, privacy), and would like to continue collecting feedback.\n\nDraft spec: https://github.com/whatwg/html/pull/11588\nTAG review: https://github.com/w3ctag/design-reviews/issues/1204\nSignals requests: https://github.com/mozilla/standards-positions/issues/1076, https://github.com/WebKit/standards-positions/issues/630\nOutreach for feedback from the spec community: https://github.com/whatwg/html/issues/10650\nWPT tests: https://wpt.fyi/results/html/canvas/element/manual/draw-element-image", "ot_stage_id": 5139585079443456, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": 154, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5192871467679744, "created": "2026-09-07 19:49:42.413089", "feature_id": 5172548013916160, "stage_type": 151, "display_name": null, "intent_stage": 11, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/d/msgid/blink-dev/6a9f2b61.81999fdc.3b7fb5.016d.GAE%40google.com", "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": true, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": "foolip@chromium.org", "ot_requester_email": "foolip@chromium.org", "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": "We have feedback from other browser vendors and are working to align implementation and spec(s) with that feedback.\n\nSee https://github.com/WICG/html-in-canvas/pull/154 for recent changes.\n\nAddressing this feedback requires some breaking changes, and we've prepared some docs for OT participants to adapt. By extending the trial, we'd like to enable OT participants to keep experimenting with the feature and give feedback on the new API shape.", "ot_stage_id": 5139585079443456, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": 160, "android_last": null, "ios_last": null, "webview_last": null}], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": 148, "android_first": 148, "ios_first": null, "webview_first": 148, "desktop_last": 150, "android_last": 150, "ios_last": null, "webview_last": 150, "ot_setup_status": 6}, {"id": 5231047164952576, "created": "2026-04-06 23:03:19.517134", "feature_id": 5172548013916160, "stage_type": 150, "display_name": null, "intent_stage": 3, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": null, "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": null, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}, {"id": 5086580804157440, "created": "2024-06-26 18:07:02.739684", "feature_id": 5172548013916160, "stage_type": 160, "display_name": null, "intent_stage": 5, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/d/msgid/blink-dev/6abd0a2e.082f26cb.5221b.0060.GAE%40google.com", "announcement_url": null, "experiment_goals": null, "experiment_risks": null, "origin_trial_id": null, "origin_trial_feedback_url": null, "ot_action_requested": false, "ot_approval_buganizer_component": null, "ot_approval_buganizer_custom_field_id": null, "ot_approval_criteria_url": null, "ot_approval_group_email": null, "ot_chromium_trial_name": null, "ot_description": null, "ot_display_name": null, "ot_documentation_url": null, "ot_emails": [], "ot_feedback_submission_url": null, "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": null, "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": null, "extensions": [], "experiment_extension_reason": null, "ot_stage_id": null, "finch_url": null, "rollout_milestone": null, "rollout_platforms": [], "rollout_details": null, "rollout_impact": 2, "rollout_stage_plan": null, "enterprise_policies": [], "desktop_first": 157, "android_first": 157, "ios_first": null, "webview_first": 157, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}], "accurate_as_of": "2026-09-29 23:58:11.875353", "creator_email": "aaronhk@chromium.org", "updater_email": "pdr@chromium.org", "owner_emails": ["chrishtr@chromium.org", "schenney@chromium.org", "pdr@chromium.org", "szager@chromium.org", "foolip@chromium.org"], "editor_emails": ["vmpstr@chromium.org"], "cc_emails": ["nattestad@google.com", "nmarkoborodova@google.com"], "spec_mentor_emails": [], "unlisted": false, "deleted": false, "editors": ["vmpstr@chromium.org"], "cc_recipients": ["nattestad@google.com", "nmarkoborodova@google.com"], "spec_mentors": [], "creator": "aaronhk@chromium.org", "feature_type": "New or changed feature", "feature_type_int": 0, "intent_stage": "None", "intent_stage_int": 0, "active_stage_id": 5086580804157440, "bug_url": "https://crbug.com/500967896", "launch_bug_url": null, "new_crbug_url": "https://bugs.chromium.org/p/chromium/issues/entry?components=Blink>Canvas&blocking=500967896&cc=chrishtr@chromium.org,schenney@chromium.org,pdr@chromium.org,szager@chromium.org,foolip@chromium.org", "screenshot_links": [], "first_enterprise_notification_milestone": null, "enterprise_impact": 1, "breaking_change": false, "confidential": false, "shipping_year": 2026, "flag_name": "chrome://flags/#canvas-draw-element", "finch_name": "CanvasDrawElement", "non_finch_justification": null, "ongoing_constraints": null, "rollout_plan": 0, "rollout_plan_displayname": "Will ship enabled for all users", "motivation": "High-performance web applications rely on <canvas> for control over rendering that goes beyond standard HTML/CSS. However, by using <canvas>, they lose all the rich, built-in features of the web platform, including:\n* Advanced formatting, such as styled multi-line text.\n* Interactivity, such as copy&paste, forms, and text selection.\n* Accessibility.\nThis forces a bad trade-off: developers must either re-implement these fundamental browser features in JS, or simply not provide them, resulting in a sub-par, inaccessible user experience.", "devtrial_instructions": "https://github.com/WICG/html-in-canvas?tab=readme-ov-file#developer-trial-dev-trial-information", "activation_risks": null, "measurement": "CanvasHtml WebFeature counter: https://chromestatus.com/metrics/webfeature/timeline/popularity/445", "availability_expectation": "It is difficult to put an exact timeline on support in other browsers given the complexity of the feature, but the feature is expected to be implemented in all engines and not be a chromium-specific feature.", "adoption_expectation": "As this is a new platform primitive, the feature would immediately be considered best-practice once it reaches Web Platform baseline, and there is strong developer interest to use this immediately (https://github.com/whatwg/html/issues/10650#issuecomment-3324124682).", "adoption_plan": "The plan is to continue to actively engage with other implementors to support this feature in all browsers. We have documentation lined up to support this feature.", "initial_public_proposal_url": "https://logs.csswg.org/irc.w3.org/css/2024-06-12/#e1628190", "explainer_links": ["https://github.com/WICG/html-in-canvas"], "requires_embedder_support": false, "spec_link": "https://github.com/whatwg/html/pull/11588", "api_spec": false, "automation_spec": false, "interop_compat_risks": "This API exposes a small amount of new information which carries an interop risk, such as the pixels of gradients and form controls.", "all_platforms": true, "all_platforms_descr": "There are no platform restrictions. This is a new canvas/html feature and works on all platforms where those are supported, which is every platform.", "non_oss_deps": null, "anticipated_spec_changes": "All open comments have a proposed resolution and we don't expect substantive changes.", "security_risks": "The feature reveals no new security information by only painting content that is safe to read back. This is described in a new \"read-back allowed rendering\" section of the explainer and accompanying spec: https://github.com/WICG/html-in-canvas#read-back-allowed-rendering.", "ergonomics_risks": null, "wpt": true, "wpt_descr": "https://wpt.fyi/results/html/canvas/element/manual/draw-element-image?label=experimental&label=master&aligned", "webview_risks": null, "devrel_emails": ["devrel-chromestatus-all@google.com"], "debuggability": "Content under canvas can be debugged like regular DOM content via devtools.", "doc_links": [], "sample_links": ["https://github.com/WICG/html-in-canvas#demos"], "prefixed": null, "tags": [], "tag_review": "https://github.com/w3ctag/design-reviews/issues/1204", "tag_review_status": "Pending", "tag_review_status_int": 1, "security_review_status": "Pending", "security_review_status_int": 1, "privacy_review_status": "Pending", "privacy_review_status_int": 1, "security_continuity_id": null, "security_launch_issue_id": null, "updated_display": null, "resources": {"samples": ["https://github.com/WICG/html-in-canvas#demos"], "docs": []}, "comments": null, "ff_views": 5, "safari_views": 3, "web_dev_views": 2, "browsers": {"chrome": {"bug": "https://crbug.com/500967896", "blink_components": ["Blink>Canvas"], "devrel": ["devrel-chromestatus-all@google.com"], "owners": ["chrishtr@chromium.org", "schenney@chromium.org", "pdr@chromium.org", "szager@chromium.org", "foolip@chromium.org"], "origintrial": false, "prefixed": null, "flag": false, "status": {"text": "In development", "val": 3, "milestone_str": "In development"}, "announced": false, "desktop": 157, "android": 157, "webview": 157, "ios": null}, "ff": {"view": {"url": "https://github.com/mozilla/standards-positions/issues/1076", "notes": "", "text": "No signal", "val": 5}}, "safari": {"view": {"url": "https://github.com/WebKit/standards-positions/issues/630", "notes": "WebKit has begun early implementation work in https://github.com/WebKit/WebKit/pull/70542.", "text": "Positive", "val": 3}}, "webdev": {"view": {"text": "Positive", "val": 2, "url": "https://github.com/whatwg/html/issues/10650#issuecomment-3324124682", "notes": "We have positive signals from users of the Dev Trial and Origin Trials: https://github.com/whatwg/html/issues/10650#issuecomment-3324124682"}}, "other": {"view": {"text": null, "val": null, "url": null, "notes": null}}}, "standards": {"spec": "https://github.com/whatwg/html/pull/11588", "maturity": {"text": "Specification currently under development in a Working Group", "short_text": "Working draft", "val": 4}}, "is_released": false, "is_enterprise_feature": false, "experiment_timeline": null, "ai_test_eval_report": null, "ai_test_eval_run_status": null, "ai_test_eval_status_timestamp": null}