# Browser Compatibility Matrix (Recon USB/BLE)

Last updated: 2026-03-23

## Tested Browsers

| Browser | Version Tested | Web Serial (USB) | Web Bluetooth (BLE) | Validation source | Validated workflow | Expected unsupported / partial API conditions |
| --- | --- | --- | --- | --- | --- | --- |
| Google Chrome (Desktop) | 121+ | ✅ | ✅ | Engine-baseline automation via Playwright `chromium-engine` on each smoke run. | `/` load, compatibility banner rendering, USB+BLE enabled state, USB-only gating, BLE-only gating, unsupported fallback navigation to `/compatibility`, duplicate-id regression coverage. | No browser-specific exceptions expected beyond normal hardware permissions prompts. |
| Microsoft Edge (Desktop) | 121+ | ✅ | ✅ | Branded browser automation via Playwright `edge-channel` when `PLAYWRIGHT_ENABLE_EDGE_CHANNEL=1`; otherwise manual verification from the release checklist. | Same as Chrome for the supported USB+BLE workflow, plus release-checklist confirmation when the Edge channel is unavailable. | No browser-specific API gaps expected; confirm any branded permission-prompt differences manually when channel automation is unavailable. |
| Brave (Desktop) | 1.62+ | ✅ | ✅* | Manual verification from the release checklist. | `/` load, banner state, USB-only and BLE-only gating, unsupported fallback navigation to `/compatibility`. | BLE may require browser flags, origin trial settings, or permission tweaks even when Chromium baseline passes. |
| Firefox (Desktop) | 123+ | ❌ | ❌ | Engine-baseline automation via Playwright `firefox-engine` on each smoke run. | `/` load, unsupported banner state, disabled Recon actions, fallback navigation to `/compatibility`. | Web Serial and Web Bluetooth remain unavailable, so Recon hardware actions stay disabled. |
| Safari (macOS) | 17+ | ❌ | ⚠️ partial | Engine-baseline automation via Playwright `webkit-engine`, plus manual verification from the release checklist for native Safari. | `/` load, unsupported/partial BLE banner handling, disabled Recon actions when BLE lacks required methods, fallback navigation to `/compatibility`. | Treat missing `getCharacteristic`, `stopNotifications`, or `writeValueWithResponse` as unsupported for Recon; Web Serial is unavailable. |
| iOS Safari | 17+ | ❌ | ❌ | Engine-baseline fallback automation via Playwright `mobile-webkit`, plus manual verification from the release checklist on touch devices. | `/` load, unsupported banner state, disabled Add Recon actions, disabled USB/BLE toggle, fallback navigation to `/compatibility` via touch-friendly flow. | Web Serial is unavailable and BLE is treated as unsupported for Recon/iOS fallback coverage. |

## Feature Expectations by Capability

- **Both USB + BLE supported**
  - Add Recon buttons enabled.
  - USB/BLE toggle enabled.
  - Recon connection type can be switched without page reload.
- **USB-only supported**
  - Add Recon buttons enabled.
  - Toggle disabled (locked to USB).
- **BLE-only supported**
  - Add Recon buttons enabled.
  - Toggle disabled (locked to BLE).
- **Neither supported or BLE missing required Recon methods**
  - Add Recon buttons disabled.
  - Toggle disabled.
  - Compatibility warning shown with fallback link.

## Fallback Workflow

If your browser does not support the required APIs or exposes only partial BLE support for Recon:

1. Use **Add Devices** to enter deployment data manually.
2. Use a supported Chromium browser for Recon hardware downloads.
3. Return to the same account/session to finish report generation.

## Operational validation notes

- Engine-baseline automation lives in `tests/smoke/compatibility-smoke.spec.ts` and runs through `playwright.smoke.config.ts`.
- Branded-browser automation is currently limited to Microsoft Edge via the `msedge` channel.
- Native Safari and iOS Safari still require release-checklist confirmation because Playwright WebKit is only an engine baseline, not the branded Apple browser runtime.
- Manual verification steps are standardized in `public/docs/browser-compatibility-release-checklist.md`.

## Canonical Source of Truth

This document is the authoritative compatibility matrix for minimum supported browser versions.
`package.json` `browserslist.production` must match the **Version Tested** minimums for:
- Google Chrome (Desktop)
- Microsoft Edge (Desktop)
- Firefox (Desktop)
- Safari (macOS)

CI validation is enforced by `scripts/check-browser-compatibility-sync.js`, which runs from both:
- root `npm run verify:frontend`
- backend `npm --prefix backend run verify`
