Introducing the HTML element | Blog | Chrome for Developers
HTML element | Blog | Chrome for Developers">
Skip to main content
English
Deutsch
Español – América Latina
Français
Indonesia
Italiano
Nederlands
Polski
Português – Brasil
Tiếng Việt
Türkçe
Русский
עברית
العربيّة
فارسی
हिंदी
বাংলা
ภาษาไทย
中文 – 简体
中文 – 繁體
日本語
한국어
Sign in
Blog
Chrome for Developers
Blog
Introducing the HTML element
Stay organized with collections
Save and categorize content based on your preferences.
Mari Viana
Minh Le
Published: June 29, 2026
Following the launch of the<br>element in Chrome 144, the next functional<br>control in the Capability Elements suite is the HTML element.<br>Available from Chrome 151, this element marks the next phase of the transition<br>from generic permission requests to targeted and functional controls for<br>accessing camera and microphone streams. By moving away from script-triggered<br>prompts toward a declarative and user-activated experience,<br>reduces boilerplate code, improves security, and provides a seamless recovery<br>path for users who have previously denied access, effectively solving the<br>long-standing permission hole.
From permission management to capability control
The element is the next specialized control to launch in the<br>Capability Elements suite, following the successful introduction of<br>. This transition from the original and generic<br>proposal—part of the PEPC initiative—lets the browser handle the unique<br>complexities and behaviors of different hardware capabilities more effectively.<br>While the early proposal focused primarily on managing permission states, such<br>as allow versus deny, Capability Elements function as data mediators.
The element provides a location object to your site, and<br>manages the entire flow for camera and microphone access. It<br>captures user intent, manages the browser prompt, and delivers the MediaStream<br>object to the application. This shift eliminates the need for separate<br>getUserMedia() calls, simplifies implementation, and ensures the browser has a<br>trusted signal of the user's intent.
Validation of the concept
Real-world data from the initial Origin Trial demonstrated that the in-context<br>and user-initiated permission controls significantly improve user success rates.
Cisco observed that users who initially denied permissions were only about<br>10% likely to successfully grant permissions using legacy prompts, but<br>that rate jumped to more than 65% with the new element.
Zoom reported a 46.9% decrease in camera or microphone capture<br>errors, such as system-level blockers, by using the element to guide users<br>through recovery;
Google Meet saw a 17% decrease in "mic not working" feedback and a<br>131% increase in successful permission recovery for users who had<br>initially denied access.
Why use the element?
Building on the patterns established by , the<br>element addresses the core challenges of requesting powerful capabilities. Media<br>requests rely on imperative JavaScript calls that often trigger out-of-context<br>prompts. If you accidentally block your site, reversing that decision requires<br>navigating deep into browser settings, a "permission hole" that often leads to<br>abandoned features.
The element solves these issues by providing the following:
Clear intent and timing: Because the prompt only appears after a<br>physical tap on a browser-controlled element, it provides a trusted signal<br>of intent. This lets the browser bypass automated quiet blocks that often<br>cause typical script-triggered requests to fail.
Simplified recovery: If access was previously denied, tapping the<br>element triggers a specialized recovery flow that lets you re-enable your<br>camera or microphone instantly on the page, without navigating complex<br>browser settings.
Direct stream access: As a data mediator, the element exposes the media<br>stream directly. This reduces the boilerplate code required to manage<br>callbacks and error states in your application.
Feature<br>getUserMedia() JS API<br>HTML Element
Triggering event for permission prompt<br>Imperative script execution (getUserMedia)<br>User clicks on the browser-controlled element
Browser role<br>Decides prompt based on state and heuristics<br>Acts as a data mediator (manages consent and stream delivery)
Site responsibility<br>Manually call the JavaScript API, handle callbacks, and manage errors<br>Listen to the stream event and access the stream property
Core goal<br>Basic camera and microphone access<br>Stream access, permission management, and recovery with reduced friction
Implementation
Integrating the element requires significantly less boilerplate than the legacy<br>JavaScript API. Following the declarative pattern established by the<br>element, you can add the tag to your HTML and<br>configure hardware requirements with the setConstraints() method.
Note: This document assumes support for the element. For a<br>fallback pattern, see the Custom fallback pattern<br>section later in this document.
Enable camera and microphone
const el =...