Compatibility
A living, machine-probed WebAuthn/passkey support matrix rendered from the real, dated SoroPass matrix-pipeline snapshot — never hand-written.
Sourced, machine-probed, dated, and diffable — re-verified automatically, never hand-waved. This page renders the real exported snapshot from the matrix pipeline; nothing on it is typed by hand.
The matrix is generated by apps/matrix from MDN BCD ingest merged with a virtual-authenticator CI run, then exported to dated JSON snapshots. Every cell carries its real source, tier, and last-verified date, and unknowns render as ? instead of a fabricated green. Open the raw JSON to verify that nothing here is invented.
Freshness
Each published snapshot is stamped with provenance so you can see exactly how current it is:
- Built — the date the snapshot was generated.
- Relative age — how long ago that was (e.g. "today", "3 days ago").
- BCD — the MDN browser-compat-data version that was ingested.
- CI run — the date of the virtual-authenticator CI run that fed the snapshot.
- Cells — the total number of feature × platform cells.
- Coverage — the count of features times the number of platforms.
The eight platforms tracked in each snapshot are:
| Platform | Browser | OS |
|---|---|---|
| Chrome | Chrome | desktop |
| Chrome Android | Chrome | Android |
| Edge | Edge | Windows |
| Safari macOS | Safari | macOS |
| Safari iOS | Safari | iOS |
| Firefox | Firefox | desktop |
| Firefox Android | Firefox | Android |
| Samsung | Samsung Internet | Android |
Provenance
Every cell is tagged with where it came from. A snapshot's cells break down by source, and the source mix is shown as live counts. The three source-badge styles are:
- ci — probed by the virtual-authenticator CI (also covers live feature-detection probes).
- bcd — MDN browser-compat-data.
- curated — cross-referenced from sources such as
passkeys.devandcaniuse.
The page links the actual snapshot file produced by apps/matrix from MDN BCD merged with the virtual-authenticator CI run. Open it — every glyph in the grid comes straight from the snapshot's cells[] array, and unknowns render ? instead of a fake green.
How to read a cell
| Glyph | Meaning |
|---|---|
| ✓ | supported |
| ◐ | partial |
| ✕ | unsupported |
| ? | unknown |
Each cell also carries a source badge:
| Badge | Source |
|---|---|
| ci | virtual-authenticator CI |
| bcd | MDN BCD |
| curated | cross-referenced |
Clicking a cell reveals its detail: the feature and platform, the status, the source, the version it has been supported since, its tier, the last-verified date, any notes, and a link to the upstream source.
Support grid
The support grid is a table of every tracked feature (rows) against the eight platforms (columns). Each intersection renders a status glyph plus its source badge, drawn directly from the snapshot's cells[]. Key features — including es256_alg (the ES256 algorithm SoroPass requires) and hybrid_transport — are highlighted.
Interactive matrix preview
The real component runs in mock mode on the demo. Open the demo →
CI grid — combinatorial proof
The CI grid is the combinatorial proof behind the support grid. It records the result of sweeping {transport × residentKey × UV} combinations on the CI runner, reporting for each combination whether the credential was created, asserted, verified, and which alg was negotiated. Each row is a real create → get round-trip checked with p256.verify.
| Column | Meaning |
|---|---|
| transport × residentKey × UV | the combination under test |
| created | credential creation succeeded |
| asserted | assertion (get) succeeded |
| verified | signature verified with p256.verify |
| alg | the COSE algorithm negotiated |
Limitations (a trust signal, not a footnote): platforms that are not available on the CI runner are cross-referenced from BCD rather than machine-verified for that run. Firefox / WebKit virtual authenticators remain out of scope; the CI sweep covers internal + usb transports with a deterministic low-S signer, so it does not reproduce Apple's ~50% high-S distribution.
No CI snapshot in an export yet? Run pnpm matrix:ci.
Rebuilding the snapshot
If the page cannot load /matrix/index.json, regenerate and re-export the snapshot:
pnpm --filter @soropass/matrix matrix:build
DOCS_PUBLIC_DIR=apps/site/public pnpm --filter @soropass/matrix docs:exportKitError taxonomy
The SDK's frozen 10-code error model — typed KitError throws, an exhaustive type guard, and the mapping from codes to styled UI copy.
How it works
How a passkey signs a Stellar transaction and a smart account verifies it on-chain — ES256-only, always low-S, no seed phrase or trusted backend.