Requirements and Supported Browsers
Pipe officially supports the following browsers.
Embed Code v2.0
💻 On Desktop Devices:
- Recording client
- webcam recording: Chrome 66+, Firefox 76+, Edge 79+ and Safari 14.1+Beta on secure contexts (https, localhost, file://, etc.)
- screen + camera recording: Chrome 74+, Firefox 76+, Edge 79+ and Safari 14.1+Beta on secure contexts (https, localhost, file://, etc.)
📱 On Mobile Devices:
- Recording client:
- Chrome 66+ on secure contexts (https, localhost, file://, etc.) on Android
- Safari on iOS/iPadOS 14.5+Beta on secure contexts (https, localhost, file://, etc.)
- Legacy mobile recorder:
- Chrome on Android version 4.4 and up
- Safari on iOS 6 and up
Embed Code v1.0
💻 On Desktop Devices:
- Recording client
- webcam recording: Chrome 63+, Firefox 52+ and Edge 79+ on some secure contexts (https, localhost, 127.0.0.1 and ::1)
- screen recording: Chrome 72+, Firefox 66+ and Edge 79+ on some secure contexts (https, localhost, 127.0.0.1 and ::1)
📱 On Mobile Devices:
- Recording client:
- Not supported, use the 2.0 embed code instead
- Legacy mobile recorder:
- Chrome on Android version 4.4 and up
- Safari on iOS 6 and up
Secure Contexts
Many web APIs and features- including those used to access a device’s camera and microphone - are accessible only in a secure context. That’s why our recording client only works in secure contexts.
What Is a Secure Context?
A web page is considered to be in a secure context if:
- it is served over https: the page is loaded via
https://, ensuring data integrity and encryption. - it is a local resource: origins such as
http://localhost,http://127.0.0.1,file://, etc. are also deemed secure.
For a detailed explanation and list of secure contexts, refer to MDN’s article on Secure Contexts.
Testing on Insecure Contexts With Chrome
Chrome has a flag that lets you force specific origins to be treated as secure: chrome://flags/#unsafely-treat-insecure-origin-as-secure . This can be used in development.
Recording Client Behaviour Over Insecure Contexts
If the 2.0 recording client is embedded in a non-secure context, it will display the following message, blocking functionality:
Recording is only possible over secure contexts (https, localhost, file://, etc.)
Here’s how the recording client shows the message:

Permissions Policy
Permissions Policy is a web security feature (via HTTP header or <iframe> attribute) that lets website developers control which powerful browser features (like camera, microphone, geolocation, fullscreen) are available in their own pages or embedded content. It gives developers control over what third-party pages are allowed to do when they are embedded in their sites.
Chromium based browsers (Chrome, Opera, Edge, etc.) support Permissions Policy. For up to date browser compatibility information, check out the MDN page.
How it works:
- HTTP Header: the Permissions-Policy response header is sent with the server’s response, defining rules for the entire page and its iframes.
<iframe>Attribute: Theallowattribute on an<iframe>tag can grant specific permissions to that embedded frame.
If incorrectly configured, the browser console will display errors related to invalid policy values or policy violations. This section details the recommended values and common errors.
Cross Origin Iframes
Starting with Chrome 64, cross origin iframes block access to the camera and microphone by default.
To allow camera and microphone access in a cross origin iframe you need to add the allow="camera;microphone" attribute to your iframe:
<!--Allow camera and microphone access within the context of this iframe-->
<iframe src="https://cross.domain.com/fr.html" allow="camera;microphone"></iframe>
Permissions-Policy Header
Some websites or hosting providers will have their own Permissions-Policy header configured that’s preventing camera and microphone access in the page.
Here’s a restrictive header we found in a client’s website:
Permissions-Policy: geolocation=(),sync-xhr=(),microphone=(),camera=(),payment=()
The above header will block access to the camera, microphone and synchronous XHR (which was used in older versions of pipe.js).
To ensure camera and microphone access is allowed on the page, the above Permissions-Policy HTTP header need to be updated as follows:
Permissions-Policy: geolocation=(),sync-xhr=(),microphone=(self),camera=(self),payment=()
Or, if cross origin iframes are also involved:
- Update the
Permissions-Policyheader:Permissions-Policy: geolocation=(),sync-xhr=(),camera=(self "https://cross.origin.com"),microphone=(self "https://cross.origin.com"),payment=() - Add the
allow="camera;microphone"attribute to theframeas shown above.
For more possible Permissions-Policy header values check out these two third party articles:
Common Permissions Policy Errors and Their Causes
If the Permissions-Policy header is restrictive or incorrectly configured, you may encounter the following errors in the browser console:
Invalid Allowlist Item for Microphone or Camera
When faced with an Invalid allowlist item error, it means your Permissions-Policy header value is invalid. In our case, we did not surrond the domain in double quotes.
Error message shown in the Chrome console:
Error with Permissions-Policy header: Invalid allowlist item(*.addpipe.com) for feature microphone. Allowlist item must be *, self or quoted url.
Permissions Policy Violation: Camera or Microphone not allowed
When you see the following error messages shown in the browser console:
Permissions policy violation: microphone is not allowed in this document.
Permissions policy violation: camera is not allowed in this document.
It means:
- Access to the camera and/or microphone is denied by the
Permissions-Policyheader OR - You’re trying to acess the camera and microphone in a cross origin iframe.
Solutions:
- Change your
Permissions-Policyto allowcameraand/ormicrophoneaccess on the page (e.g.Permissions-Policy: camera=(self), microphone=(self)) - Add the
allow="camera;microphone"attribute to theframeas shown above.
Permissions Policy Violation: Synchronous XHR is Disabled
Older versions of pipe.js used synchronous XHR to load the required resources. This has been changed with the pipe.js released on May 26 2025. You can still get the error if you are using an older version.
Pipe log messages:
Synchronous XHR (sync-xhr) is denied by page Permissions-Policy or browser settings.
Error message shown in the browser console:
[Violation] Permissions policy violation: Synchronous requests are disabled by permissions policy.
Cause:
- The
sync-xhrfeature is denied by thePermissions-Policyheader. - An older version of
pipe.jsattempts to make a synchronous XMLHttpRequest and the request is now allowed by thePermissions-Policyheader above.
Solutions:
- Change your
Permissions-Policyto allowsync-xhron the page (e.g.Permissions-Policy: sync-xhr=(self)) - Switch to the latest version of
pipe.js
Error with Permissions-Policy header: Unrecognized origin
When you see the following error message shown in the browser console:
Error with Permissions-Policy header: Unrecognized origin: 'website-bucket.s3.eu-west-1.amazonaws.com'.
It means you have not specified the full origin, the value needs to start with https://.