Runs on load

Browser Feature Detector

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.

Running checks…

Every check runs locally against your own browser. Nothing is sent anywhere.

Real, live checks

Every row calls the actual API or CSS.supports() rule — nothing here is guessed from your User-Agent.

🎨

Modern CSS included

Grid, Flexbox, :has(), container queries and prefers-color-scheme are tested alongside JavaScript APIs.

📋

Copy-ready report

Export the full pass/fail list as plain text for a bug report or support ticket.

How to use the browser feature detector

No input is needed — the checks run automatically and describe the browser you are using right now.

  1. Load the pageEvery check runs immediately, grouped into categories like Graphics, Storage and CSS.
  2. Read the pass/fail gridA green check means the feature is present in this browser; a red cross means it is not.
  3. Copy the report if neededClick Copy report as text to paste the full results into a bug report or ticket.

Why feature detection beats browser sniffing

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.

JavaScript APIs

Presence checks like 'serviceWorker' in navigator or typeof WebAssembly === 'object' confirm the interface exists before you rely on it.

CSS.supports()

The same function browsers use internally to decide whether to apply a style rule, called here for Grid, Flexbox, :has() and more.

Image format decoding

WebP and AVIF support is tested by actually trying to decode a tiny embedded image, the most reliable method available in script.

What a pass does not guarantee

A passing check means the capability exists, not that a permission prompt has been accepted or that every edge case behaves identically.

Browser feature detector FAQ

Common questions about accuracy and scope.

Does this check every browser or just mine?

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.

Why does a check sometimes pass but the feature still not work for me?

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.

How is WebP and AVIF support tested?

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.

What does the :has() and container query check actually test?

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.

Is any of this sent anywhere?

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.