Real, live checks
Every row calls the actual API or CSS.supports() rule — nothing here is guessed from your User-Agent.
A full battery of feature-detection checks runs the moment this page loads, against your own browser only, covering JavaScript APIs, storage, media and modern CSS.
Every check runs locally against your own browser. Nothing is sent anywhere.
Every row calls the actual API or CSS.supports() rule — nothing here is guessed from your User-Agent.
Grid, Flexbox, :has(), container queries and prefers-color-scheme are tested alongside JavaScript APIs.
Export the full pass/fail list as plain text for a bug report or support ticket.
No input is needed — the checks run automatically and describe the browser you are using right now.
Checking a User-Agent string to guess what a browser can do is fragile: strings get spoofed, new versions ship new capabilities, and browser forks share the same name but not the same feature set. Feature detection instead asks the browser directly — does this API exist, does this CSS rule parse, does this image decode — which stays accurate even for browsers that did not exist when the check was written.
Presence checks like 'serviceWorker' in navigator or typeof WebAssembly === 'object' confirm the interface exists before you rely on it.
The same function browsers use internally to decide whether to apply a style rule, called here for Grid, Flexbox, :has() and more.
WebP and AVIF support is tested by actually trying to decode a tiny embedded image, the most reliable method available in script.
A passing check means the capability exists, not that a permission prompt has been accepted or that every edge case behaves identically.
Common questions about accuracy and scope.
Only yours. Every check here runs against the browser you are using right now, live, in JavaScript and CSS. There is no way for a website to reliably test a browser it is not currently running in.
Feature detection confirms the API or CSS property exists and responds, not that every corner case works flawlessly, and not that a permission (like Geolocation or Notifications) has actually been granted. A pass means the capability is present to ask; it does not mean permission was given.
By trying to decode a tiny, known-valid image encoded directly in the page as a data URI. If the browser's onload event fires, it decoded the image and supports the format; if onerror fires instead, it does not.
It calls CSS.supports() with the exact selector or property syntax, which is the same mechanism browsers use internally to decide whether to apply a rule. Older browsers either return false or throw, which this tool treats as unsupported.
No. Every check runs locally and results stay on the page unless you explicitly click Copy report as text, which only copies to your own clipboard.