# Microsoft Edge

> Edge is a Chromium browser, so WhiskerJS treats it like Chrome: every Chromium API is read and nothing is excluded.

Source: https://whiskerjs.com/browsers/edge/ (last updated 2026-10-26)

> **In plain words:**
>
> Microsoft Edge on Windows, macOS and Linux is built on Chromium, the same open-source engine as Chrome. To WhiskerJS it is a Chromium browser: it reads the same signals as in Chrome and leaves nothing out. Edge differs from Chrome mainly in the brand names it reports and in details of its own build, which show up in a few components.

## At a glance

- Browser class: `chromium` (the user agent has a `Chrome/<number>` token).
- Excluded components: none.
- Chromium-only components that are `ok`: `device_memory`, `heap_limit`, `ua_client_hints`, `ua_versions`, `keyboard_layout`.
- Skipped on purpose on desktop: `audio_latency`.
- Lab sample: none.

## What works

All of the [Chrome desktop](https://whiskerjs.com/browsers/chrome-desktop/) list applies:

- the graphics group (canvas and WebGL with the double render, WebGL parameters, the unmasked renderer and vendor, and WebGPU where Edge offers it);
- [`device_memory`](https://whiskerjs.com/signals/device-memory/), [`heap_limit`](https://whiskerjs.com/signals/heap-limit/) and [`keyboard_layout`](https://whiskerjs.com/signals/keyboard-layout/);
- [`ua_client_hints`](https://whiskerjs.com/signals/ua-client-hints/): the brands are whatever Edge reports, without versions and with the GREASE brand removed; [`ua_versions`](https://whiskerjs.com/signals/ua-versions/) adds the full versions outside the ids;
- fonts, font preferences, offline audio, Math, codecs, locale, storage presence, permission states and the display preference queries.

WhiskerJS has no Edge-specific code. It reads the same APIs in the same way; any difference from Chrome comes from what Edge itself returns.

## What is unavailable or blocked

- [`audio_latency`](https://whiskerjs.com/signals/audio-latency/): `unavailable` / `skipped` on desktop, to avoid a console autoplay warning.
- [`apple_pay`](https://whiskerjs.com/signals/apple-pay/) and [`private_click`](https://whiskerjs.com/signals/private-click/): the plain value `none`.
- `ua_client_hints` and `ua_versions` end with `he=blocked` when a Permissions Policy refuses the detailed hints.
- `keyboard_layout` is `blocked` in cross-origin iframes.
- [`webgpu`](https://whiskerjs.com/signals/webgpu/): depends on the Edge version, the operating system and the GPU.

## What WhiskerJS excludes and why

Nothing. The `chromium` row of the exclusion table is empty. If an extension or setting adds noise to canvas or WebGL readback, the [double render](https://whiskerjs.com/glossary/#double-render) reports `noisy` with ruleId `render_mismatch` for that run. The [known-answer probes](https://whiskerjs.com/signals/noise-profile/) also catch noise that is the same on both reads (`noisy` / `seeded_noise`, for `canvas`, `webgl_image` and `audio`). From Chromium 146, [`device_memory`](https://whiskerjs.com/signals/device-memory/) carries the tag `;c146`.

## Edge and Chrome on the same device

Both are class `chromium`, so `browser_class` is the same. Expect differences in:

- [`ua_client_hints`](https://whiskerjs.com/signals/ua-client-hints/): the brand list;
- [`vendor_flavors`](https://whiskerjs.com/signals/vendor-flavors/), [`plugins`](https://whiskerjs.com/signals/plugins/) and [`media_codecs`](https://whiskerjs.com/signals/media-codecs/), where the builds differ;
- [`fonts`](https://whiskerjs.com/signals/fonts/) and graphics, usually not, because they follow the operating system and GPU.

The structuredId shows this directly: the `browser` group differs while `gpu`, `fonts` and `device` often match. See [Comparing two results](https://whiskerjs.com/docs/identifiers/#comparing-two-results).

## Integrity flags to expect

The same as in Chrome: [`automation_webdriver`](https://whiskerjs.com/docs/integrity/#automation_webdriver) under WebDriver control, [`headless_user_agent`](https://whiskerjs.com/docs/integrity/#headless_user_agent) and [`headless_markers`](https://whiskerjs.com/docs/integrity/#headless_markers) for headless builds, [`software_renderer`](https://whiskerjs.com/docs/integrity/#software_renderer) with hardware acceleration off or on remote desktops, the lie checks ([`native_tampering`](https://whiskerjs.com/docs/integrity/#native_tampering), [`prototype_lie`](https://whiskerjs.com/docs/integrity/#prototype_lie)) with extensions that override functions, [`ua_ch_mismatch`](https://whiskerjs.com/docs/integrity/#ua_ch_mismatch) with user-agent switchers, and [`vm_renderer`](https://whiskerjs.com/docs/integrity/#vm_renderer) on virtual desktops. Headless Edge is classed `chromium` since signalsVersion 9, like headless Chrome.

## Early lab observations

There is no lab data for Edge yet. The early, small sample at signalsVersion 1 covered Mac Chrome, Mac Safari, iPhone Chrome and iPhone Safari only.

## Testing it yourself

Open the [live demo](https://whiskerjs.com/demo/) in Edge and in Chrome on the same machine and compare the structuredId groups. The [lab mode](https://whiskerjs.com/demo/#lab) copies one line per run. Nothing is sent anywhere.

## Support table for Microsoft Edge

Expected status of every component in this browser at signalsVersion 9, from [the support matrix](https://whiskerjs.com/browsers/support-matrix/) (updated 2026-10-26). Basis "code" means expected from the library code and documentation, not yet measured; "lab" means seen in the early lab sample.

| Component | Status | Basis | Note |
| --- | --- | --- | --- |
| [`apple_pay`](https://whiskerjs.com/signals/apple-pay/) | none | code | No ApplePaySession: reports the plain value none. |
| [`audio`](https://whiskerjs.com/signals/audio/) | ok | code | noisy / seeded_noise if the audio known-answer probe sees noise. |
| [`audio_latency`](https://whiskerjs.com/signals/audio-latency/) | unavailable | code | Skipped (unavailable / skipped): creating an AudioContext here would print a console warning. |
| [`browser_class`](https://whiskerjs.com/signals/browser-class/) | ok | code | Class chromium. |
| [`canvas`](https://whiskerjs.com/signals/canvas/) | ok | code | noisy / render_mismatch or seeded_noise if an extension or setting adds noise to readback. |
| [`canvas_readback`](https://whiskerjs.com/signals/canvas-readback/) | ok | code |   |
| [`color_depth`](https://whiskerjs.com/signals/color-depth/) | ok | code |   |
| [`color_gamut`](https://whiskerjs.com/signals/color-gamut/) | ok | code |   |
| [`content_blockers`](https://whiskerjs.com/signals/content-blockers/) | ok | code | none, or the bait names a content blocker hid. |
| [`cpu_architecture`](https://whiskerjs.com/signals/cpu-architecture/) | ok | code |   |
| [`device_memory`](https://whiskerjs.com/signals/device-memory/) | ok | code | From Chromium 146 the value carries the tag ;c146 (new buckets). |
| [`dynamic_range`](https://whiskerjs.com/signals/dynamic-range/) | ok | code |   |
| [`font_preferences`](https://whiskerjs.com/signals/font-preferences/) | ok | code |   |
| [`fonts`](https://whiskerjs.com/signals/fonts/) | ok | code |   |
| [`fonts_canvas`](https://whiskerjs.com/signals/fonts-canvas/) | ok | code |   |
| [`forced_colors`](https://whiskerjs.com/signals/forced-colors/) | ok | code |   |
| [`hardware_concurrency`](https://whiskerjs.com/signals/hardware-concurrency/) | ok | code | Read 16 times; noisy / read_varies if the reads disagree. Some browsers cap or round the value. |
| [`heap_limit`](https://whiskerjs.com/signals/heap-limit/) | ok | code |   |
| [`intl_locale`](https://whiskerjs.com/signals/intl-locale/) | ok | code |   |
| [`keyboard_layout`](https://whiskerjs.com/signals/keyboard-layout/) | ok | code | navigator.keyboard.getLayoutMap() is a Chromium desktop API; blocked in cross-origin iframes. |
| [`languages`](https://whiskerjs.com/signals/languages/) | ok | code |   |
| [`math`](https://whiskerjs.com/signals/math/) | ok | code |   |
| [`media_codecs`](https://whiskerjs.com/signals/media-codecs/) | ok | code |   |
| [`noise_profile`](https://whiskerjs.com/signals/noise-profile/) | ok | code | canvas=exact,webgl=exact,audio=exact on a stock browser; webgl=na without WebGL. |
| [`pdf_viewer`](https://whiskerjs.com/signals/pdf-viewer/) | ok | code |   |
| [`permissions`](https://whiskerjs.com/signals/permissions/) | ok | code |   |
| [`pixel_ratio`](https://whiskerjs.com/signals/pixel-ratio/) | ok | code |   |
| [`platform`](https://whiskerjs.com/signals/platform/) | ok | code |   |
| [`plugins`](https://whiskerjs.com/signals/plugins/) | ok | code |   |
| [`prefers_contrast`](https://whiskerjs.com/signals/prefers-contrast/) | ok | code |   |
| [`private_click`](https://whiskerjs.com/signals/private-click/) | none | code | No attributionSourceId on anchors: reports the plain value none. |
| [`reduced_motion`](https://whiskerjs.com/signals/reduced-motion/) | ok | code |   |
| [`screen_frame`](https://whiskerjs.com/signals/screen-frame/) | ok | code |   |
| [`screen_resolution`](https://whiskerjs.com/signals/screen-resolution/) | ok | code |   |
| [`speech_voices`](https://whiskerjs.com/signals/speech-voices/) | ok | code | Digest of the voice list, or none; some browsers fill the list late. |
| [`storage`](https://whiskerjs.com/signals/storage/) | ok | code |   |
| [`time_zone`](https://whiskerjs.com/signals/time-zone/) | ok | code |   |
| [`touch_support`](https://whiskerjs.com/signals/touch-support/) | ok | code |   |
| [`ua_client_hints`](https://whiskerjs.com/signals/ua-client-hints/) | ok | code | he=blocked when a Permissions Policy refuses the detailed hints. |
| [`ua_versions`](https://whiskerjs.com/signals/ua-versions/) | ok | code |   |
| [`vendor`](https://whiskerjs.com/signals/vendor/) | ok | code |   |
| [`vendor_flavors`](https://whiskerjs.com/signals/vendor-flavors/) | ok | code |   |
| [`webgl_image`](https://whiskerjs.com/signals/webgl-image/) | ok | code | noisy / render_mismatch or seeded_noise if an extension or setting adds noise to readback. |
| [`webgl_params`](https://whiskerjs.com/signals/webgl-params/) | ok | code | Where WebGL 1 is available; unavailable / no_context without it. |
| [`webgl_renderer`](https://whiskerjs.com/signals/webgl-renderer/) | ok | code |   |
| [`webgl_vendor`](https://whiskerjs.com/signals/webgl-vendor/) | ok | code |   |
| [`webgpu`](https://whiskerjs.com/signals/webgpu/) | varies | code | Depends on browser version, operating system and GPU; needs a secure context. unavailable / no_api without navigator.gpu, no_context without an adapter. |

## Questions and answers

### Does WhiskerJS tell Edge and Chrome apart?

It does not label them separately: both are class chromium. Components such as ua_client_hints carry the brand names each browser reports, so Edge and Chrome on the same device usually differ there, and that difference reaches the browser group of the structuredId.

### Is anything excluded in Edge?

No. The chromium row of the exclusion table is empty.

### What about Edge on iPhone?

Edge on iOS runs on WebKit like every iOS browser and is classed safari. See the Safari and every iOS browser page.

## Related pages

- [Chrome (desktop)](https://whiskerjs.com/browsers/chrome-desktop/): The same engine and behaviour.
- [Safari and every iOS browser](https://whiskerjs.com/browsers/safari-ios/): Edge on iPhone and iPad.
- [ua_client_hints](https://whiskerjs.com/signals/ua-client-hints/): Brand names without versions.
- [browser_class](https://whiskerjs.com/signals/browser-class/): How the class is chosen.
- [Browser support matrix](https://whiskerjs.com/browsers/support-matrix/): All browsers side by side.
