coderef

Feature policyLimited availability

The Feature-Policy response header sets whether a policy-controlled feature, such as an API, may be used in a document. Not to be confused with permissions policy.

Not yet supported in all major browsers — check the table and provide a fallback.

Discouraged: Feature policy is superseded by permissions policy. Use instead: Permissions policy

Browser support

DesktopChrome
1–73Not supported
74+Supportedsince Apr 23, 2019
Current: 155
Edge
12–18Not supported
79+Supportedsince Jan 15, 2020
Current: 154
Firefox
✕Not supportedup to 157
Current: 157
Safari
✕Not supportedup to 27
Current: 27
MobileChrome Android
18–73Not supported
74+Supportedsince Apr 24, 2019
Current: 155
Firefox Android
✕Not supportedup to 157
Current: 157
Safari iOS
✕Not supportedup to 27
Current: 27

How to use

Not supported in Firefox, Safari, Firefox Android, Safari iOS. Use feature detection below and provide a fallback (or a polyfill) for those browsers.

Example

Full syntax and examples are on MDN: featurePolicy.

Feature detection

JS · check before using
if ("FeaturePolicy" in globalThis) {
  // FeaturePolicy is available
} else {
  // load a polyfill or use a fallback
}

Sub-features

Support for each part of the feature (45). The overall table above shows when the whole feature works.

Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
Document.featurePolicy7479✕✕74✕✕
FeaturePolicy7479✕✕74✕✕
FeaturePolicy.allowedFeatures7479✕✕74✕✕
FeaturePolicy.allowsFeature7479✕✕74✕✕
FeaturePolicy.features7479✕✕74✕✕
FeaturePolicy.getAllowlistForFeature7479✕✕74✕✕
HTMLIFrameElement.featurePolicy7479✕✕74✕✕
http.headers.Feature-Policy6079✕✕60✕✕
http.headers.Feature-Policy.accelerometer6679✕✕66✕✕
http.headers.Feature-Policy.ambient-light-sensor✕✕✕✕✕✕✕
http.headers.Feature-Policy.attribution-reporting117117✕✕117✕✕
http.headers.Feature-Policy.autoplay6479✕✕64✕✕
http.headers.Feature-Policy.bluetooth104104✕✕104✕✕
http.headers.Feature-Policy.browsing-topics115115✕✕115✕✕
http.headers.Feature-Policy.camera6479✕✕64✕✕
http.headers.Feature-Policy.compute-pressure125125✕✕✕✕✕
http.headers.Feature-Policy.cross-origin-isolated8787✕✕87✕✕
http.headers.Feature-Policy.deferred-fetch135135✕✕135✕✕
http.headers.Feature-Policy.deferred-fetch-minimal135135✕✕135✕✕
http.headers.Feature-Policy.display-capture9494✕✕94✕✕
Show 25 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
http.headers.Feature-Policy.document-domain✕✕✕✕✕✕✕
http.headers.Feature-Policy.encrypted-media6479✕✕64✕✕
http.headers.Feature-Policy.fullscreen6279✕✕62✕✕
http.headers.Feature-Policy.geolocation6479✕✕64✕✕
http.headers.Feature-Policy.gyroscope6679✕✕66✕✕
http.headers.Feature-Policy.hid8989✕✕✕✕✕
http.headers.Feature-Policy.identity-credentials-get110110✕✕110✕✕
http.headers.Feature-Policy.idle-detection9494✕✕94✕✕
http.headers.Feature-Policy.local-fonts103103✕✕✕✕✕
http.headers.Feature-Policy.magnetometer✕✕✕✕✕✕✕
http.headers.Feature-Policy.microphone6479✕✕64✕✕
http.headers.Feature-Policy.midi6479✕✕64✕✕
http.headers.Feature-Policy.otp-credentials9393✕✕84✕✕
http.headers.Feature-Policy.payment6079✕✕60✕✕
http.headers.Feature-Policy.picture-in-picture6979✕✕105✕✕
http.headers.Feature-Policy.publickey-credentials-create8484✕✕84✕✕
http.headers.Feature-Policy.publickey-credentials-get8484✕✕84✕✕
http.headers.Feature-Policy.screen-wake-lock8484✕✕84✕✕
http.headers.Feature-Policy.serial8989✕✕89✕✕
http.headers.Feature-Policy.storage-access113113✕✕113✕✕
http.headers.Feature-Policy.usb6079✕✕60✕✕
http.headers.Feature-Policy.web-share8686✕✕86✕✕
http.headers.Feature-Policy.wildcards108108✕✕108✕✕
http.headers.Feature-Policy.window-management100100✕✕100✕✕
http.headers.Feature-Policy.xr-spatial-tracking7979✕✕79✕✕