)]}'
{"id": 5152834368700416, "name": "HTML install element", "summary": "Chrome can now trigger a request for the browser to install a web app, given a manifest URL and optional manifest ID. The `<install>` element enables cross-origin web app installation without JavaScript and provides a better developer experience than handling `beforeinstallprompt` events. The element is launching in parallel with [Web Install API](https://chromeenterprise.google/resources/release-notes/?ver=158&featId=5183481574850560), specifically the `navigator.install()` method, the imperative entry point to the same installation capability. \n\nAdmins can control this feature in either of two ways:\n1. With enterprise policy, [WebAppInstallByUserEnabled](https://chromeenterprise.google/policies/#WebAppInstallByUserEnabled), admins can disable user web app installs in general, including installs initiated via `navigator.install()` and <install>.  \n2. With permissions policy, [web-app-installation](https://www.w3.org/TR/permissions-policy/), admins can allow or disallow use of this feature on origins that the enterprise controls (for example, internal sites or iframes).", "markdown_fields": ["summary"], "blink_components": ["Blink>AppManifest"], "star_count": 106, "search_tags": ["webinstall", "webappinstallation", "webinstallapi", "installelement"], "created": {"by": "liahiscock@microsoft.com", "when": "2025-12-09 00:12:00.386133"}, "updated": {"by": "elmirakalali@google.com", "when": "2026-11-04 18:29:44.608763"}, "category": "Capabilities (Fugu)", "category_int": 21, "feature_notes": null, "web_feature": "install", "is_official_web_feature": true, "webdx_usecounter_enum": null, "enterprise_feature_categories": ["3"], "enterprise_product_category": 0, "is_releasenotes_content_reviewed": true, "is_releasenotes_publish_ready": true, "stages": [{"id": 6233492482555904, "created": "2025-12-09 00:12:00.964348", "feature_id": 5152834368700416, "stage_type": 110, "display_name": null, "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": 5067501539033088, "created": "2025-12-09 00:12:01.012335", "feature_id": 5152834368700416, "stage_type": 120, "display_name": null, "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": 5133526058008576, "created": "2025-12-09 00:12:01.153402", "feature_id": 5152834368700416, "stage_type": 130, "display_name": null, "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": 5181968457269248, "created": "2025-12-09 00:12:01.227290", "feature_id": 5152834368700416, "stage_type": 140, "display_name": null, "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": 5106031959080960, "created": "2025-12-09 00:12:01.289326", "feature_id": 5152834368700416, "stage_type": 150, "display_name": "HTML Install Element", "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/g/blink-dev/c/N1AjeFmVF4U/m/YrAdZgaIAAAJ", "announcement_url": null, "experiment_goals": "1 - Gather developer feedback on the ergonomics and usability (e.g. styling options) of the element.\n\n2 - Compare data (including developer feedback) on the element-based install, with the imperative Web Install API (navigator.install), to inform future direction.\n\nAs part of navigator.install, 2 new UKMs and 2 UMAs were added. We've updated these so we can differentiate between the two entry points for direct comparison. See experimentation goals for navigator.install - https://chromestatus.com/feature/5183481574850560", "experiment_risks": "No anticipated risks", "origin_trial_id": "506092008125759489", "origin_trial_feedback_url": "https://docs.google.com/document/d/1B21htNQFmhEhhIpnIU7z_jOeH9wEF1Hz9XSKlMWW3a0/edit?pli=1&tab=t.0", "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": "InstallElement", "ot_description": "Allows websites to declaratively install other websites as web apps, via an install_url and optional manifest_id attributes of the HTML element.\n", "ot_display_name": "HTML Install Element", "ot_documentation_url": "https://github.com/MicrosoftEdge/Demos/blob/main/pwa-install-element/README.md", "ot_emails": ["liahiscock@microsoft.com", "limzh@microsoft.com"], "ot_feedback_submission_url": "https://github.com/WICG/install-element/issues/new?template=install-element-ot-feedback.md", "ot_has_third_party_support": false, "ot_is_critical_trial": false, "ot_is_deprecation_trial": false, "ot_owner_email": "dmurph@google.com", "ot_requester_email": null, "ot_require_approvals": false, "ot_use_counter_bucket_number": null, "ot_webfeature_use_counter": "WebDXFeature::kDRAFT_InstallElement", "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": 148, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": 153, "android_last": null, "ios_last": null, "webview_last": null, "ot_setup_status": 6}, {"id": 5171252245430272, "created": "2025-12-09 00:12:01.424681", "feature_id": 5152834368700416, "stage_type": 160, "display_name": null, "pm_emails": [], "tl_emails": [], "ux_emails": [], "te_emails": [], "intent_thread_url": "https://groups.google.com/a/chromium.org/g/blink-dev/c/nrQTNUDm3QI", "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": 158, "android_first": null, "ios_first": null, "webview_first": null, "desktop_last": null, "android_last": null, "ios_last": null, "webview_last": null}], "accurate_as_of": "2026-11-02 18:19:03.481809", "creator_email": "liahiscock@microsoft.com", "updater_email": "elmirakalali@google.com", "owner_emails": ["liahiscock@microsoft.com", "kristinlee@microsoft.com"], "editor_emails": ["ropaveza@microsoft.com", "luigonza@microsoft.com"], "cc_emails": [], "spec_mentor_emails": [], "unlisted": false, "deleted": false, "editors": ["ropaveza@microsoft.com", "luigonza@microsoft.com"], "cc_recipients": [], "spec_mentors": [], "creator": "liahiscock@microsoft.com", "feature_type": "New or changed feature", "feature_type_int": 0, "intent_stage": "None", "intent_stage_int": 0, "active_stage_id": 5171252245430272, "bug_url": "https://issues.chromium.org/issues/454827186", "launch_bug_url": "https://launch.corp.google.com/launch/4495880", "new_crbug_url": "https://bugs.chromium.org/p/chromium/issues/entry?components=Blink>AppManifest&blocking=454827186&cc=liahiscock@microsoft.com,kristinlee@microsoft.com", "screenshot_links": [], "first_enterprise_notification_milestone": 144, "enterprise_impact": 2, "breaking_change": false, "confidential": false, "shipping_year": 2026, "flag_name": "web-app-install-element", "finch_name": "InstallElement", "non_finch_justification": null, "ongoing_constraints": "None", "rollout_plan": 0, "rollout_plan_displayname": "Will ship enabled for all users", "motivation": "The web currently lacks the ability for a site to offer installation of a web app identified by a cross-origin manifest. Limited support exists for eligible same-origin web apps via ambient installation affordances and the beforeinstallprompt event. However, the existent browser-provided entry points are difficult for developers to use and users to discover.\n\nThis capability lets developers distribute web apps across the web without proprietary protocols or platform-specific stores. It brings web app distribution closer to the reach developers expect from other application models while preserving browser-controlled safeguards and explicit user choice.", "devtrial_instructions": "https://github.com/MicrosoftEdge/Demos/blob/main/pwa-install-element/README.md", "activation_risks": "No activation risks. It should be relatively easy for developers to take advantage of this feature immediately, as-is. The element was designed with ergonomics in mind, and we have multiple places with instructions for developers (two test sites, and the explainer itself)", "measurement": "We have a JavaScript use counter that tracks how often the element is found in pages (regardless of whether it can be activated). We also have chromium UMAs and UKMs.", "availability_expectation": "Feature is available only in Chromium browsers for the foreseeable future.", "adoption_expectation": "Feature is used by specific partner(s) to provide functionality within 12 months of launch in Chrome.", "adoption_plan": "We are in communication with partners. We plan to post an update on developer.chrome.com and blogs.windows.com, and add AI guidance for Web Install to github.com/GoogleChrome/modern-web-guidance.", "initial_public_proposal_url": "https://aka.ms/installelement", "explainer_links": ["https://aka.ms/installelement"], "requires_embedder_support": false, "spec_link": "https://wicg.github.io/install-element", "api_spec": true, "automation_spec": false, "interop_compat_risks": "These are additive entry points to web app installation, a capability browsers already provide through browser-controlled UI. The primary interoperability risk is uneven cross-browser availability rather than conflicting behavior for existing content: other engines have not committed to these entry points, and WebKit opposes site-initiated web app installation.\n\nWebKit opposes these entry points because it considers installation a user decision whose flow should begin in browser UI. We acknowledge this substantive difference in approach. However, origin-trial partners, public developer reports, and standards discussions consistently identified existing web app installation as difficult for users to discover and cumbersome for developers to offer. Developers expressed strong support for a direct and predictable installation path while retaining browser-controlled confirmation UI and existing installability requirements.\n\nOur designs preserve browser control over installation through required user activation, explicit consent in browser-controlled UI, and the user agent\u2019s ability to suppress the flow. The <install> element further provides user-agent-controlled rendering. Detailed abuse, privacy, and security protections are described in our explainer and our TAG review request. Given those safeguards and the demonstrated developer and user need, we believe shipping in Chromium is appropriate while standards discussions continue.", "all_platforms": null, "all_platforms_descr": "Windows, Mac, Linux, and ChromeOS will be shipped first. Android will be supported later, due to significant technical deviation in the web app ecosystem -\nhttps://issues.chromium.org/issues/424497410. As of now, no plan to support Android WebView.", "non_oss_deps": "No.", "anticipated_spec_changes": "N/A", "security_risks": "The element proposal came out of security concerns with imperative APIs, specifically that an API to trigger the PWA installation flow cannot provide a strong enough signal of user intent to install an app, thereby increasing the risk of abuse and annoyance to users.\n\n<install> inherits from a base capability element, which has many security protections, such as (1) restrictions on element styling/sizing (eg. it cannot be fully transparent, and it has a minimum and maximum size), (2) preventing activation if out of view, or recently attached to the tree, and (3) preventing clipping/occlusion/distortion.\n\nSee explainer's security section - https://github.com/WICG/install-element/blob/main/explainer-manifest-url.md#accessibility-localization-privacy-and-security-considerations", "ergonomics_risks": "This could be used in conjunction with the navigator.getInstalledRelatedApps API, which tells a developer if any related web apps are installed for their site, before rendering the install element.\n\nThere is overlap between this install element and the BeforeInstallPrompt event. This element is more ergonomic, and we think developers will prefer its declarative format. See this thread - https://github.com/MicrosoftEdge/MSEdgeExplainers/issues/1055", "wpt": null, "wpt_descr": "The element's base styling/activation restrictions are tested - https://wpt.fyi/results/html/semantics/permission-element/install.\n\nHowever, web app installs are currently not supported by automated tests, as they require user interaction to confirm the installation. Manual web app testing instructions can be published.", "webview_risks": "N/A", "devrel_emails": ["devrel-chromestatus-all@google.com"], "debuggability": "Existing DevTools support for HTML elements applies. The base capability element also reports customized DevTools Issues when the browser cannot safely allow activation. In addition, Web Install failures for eligible same-origin manifests are reported in the Issues panel using bounded failure categories, such as manifest fetch or parse failure, invalid start_url, and missing required fields. Cross-origin and internal failure details are not reported. See Debuggability doc - \nhttps://docs.google.com/document/d/1rGvLhD4SR8Y9M1wVmqgyesPNkbZGU7HOqlttjEFJ5Vo/edit?tab=t.i3gxb63o1ngb", "doc_links": ["https://docs.google.com/document/d/1rGvLhD4SR8Y9M1wVmqgyesPNkbZGU7HOqlttjEFJ5Vo/edit?tab=t.tmx19oox759l#heading=h.j3tt49hqiuck"], "sample_links": ["https://microsoftedge.github.io/Demos/pwa-install-element", "https://kbhlee2121.github.io/pwa/web-install-manifest-url/only-elements.html"], "prefixed": null, "tags": ["webinstall", "webappinstallation", "webinstallapi", "installelement"], "tag_review": "https://github.com/w3ctag/design-reviews/issues/1245", "tag_review_status": "Issues open", "tag_review_status_int": 2, "security_review_status": "Issues addressed", "security_review_status_int": 3, "privacy_review_status": "Issues addressed", "privacy_review_status_int": 3, "security_continuity_id": null, "security_launch_issue_id": null, "updated_display": null, "resources": {"samples": ["https://microsoftedge.github.io/Demos/pwa-install-element", "https://kbhlee2121.github.io/pwa/web-install-manifest-url/only-elements.html"], "docs": ["https://docs.google.com/document/d/1rGvLhD4SR8Y9M1wVmqgyesPNkbZGU7HOqlttjEFJ5Vo/edit?tab=t.tmx19oox759l#heading=h.j3tt49hqiuck"]}, "comments": null, "ff_views": 5, "safari_views": 5, "web_dev_views": 2, "browsers": {"chrome": {"bug": "https://issues.chromium.org/issues/454827186", "blink_components": ["Blink>AppManifest"], "devrel": ["devrel-chromestatus-all@google.com"], "owners": ["liahiscock@microsoft.com", "kristinlee@microsoft.com"], "origintrial": false, "prefixed": null, "flag": false, "status": {"text": "Proposed", "val": 2, "milestone_str": "Proposed"}, "announced": true, "desktop": 158, "android": null, "webview": null, "ios": null}, "ff": {"view": {"url": "https://github.com/mozilla/standards-positions/issues/1179", "notes": null, "text": "No signal", "val": 5}}, "safari": {"view": {"url": "https://github.com/WebKit/standards-positions/issues/463", "notes": null, "text": "Oppose", "val": 7}}, "webdev": {"view": {"text": "Positive", "val": 2, "url": "https://github.com/w3ctag/ethical-web-principles/issues/120#issuecomment-2285348765", "notes": "https://github.com/w3ctag/ethical-web-principles/issues/120#issuecomment-2285431557"}}, "other": {"view": {"text": null, "val": null, "url": null, "notes": "pwastore.io - https://www.reddit.com/r/PWA/comments/1o1excp/comment/niit2jh/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button"}}}, "standards": {"spec": "https://wicg.github.io/install-element", "maturity": {"text": "Specification being incubated in a Community Group", "short_text": "Incubation", "val": 3}}, "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}