Adds support for browsers with no push service. The zip below is built by CI from this tag.
Install
- Download the zip and extract it
chrome://extensions→ Developer mode → Load unpacked → pick the folder- Click the extension icon and follow the setup guide
What changed since v0.2.0
Browsers built on ungoogled-chromium now work. Helium, Thorium and similar strip out Google's FCM, and Chrome's Push API is FCM — so pushManager.subscribe() can never succeed there. Previously the extension detected that and told you to switch browsers.
Those browsers now get a second transport: the extension holds a WebSocket open to the relay and codes are written down it. Setup is identical, and nothing extra is stored — holding the socket is the registration. The code passes through a Durable Object's memory and is never written to storage, so the "we never store codes" property is unchanged.
Measured at 216ms from the phone posting a code to it arriving in the browser.
It is second-best, not equivalent. Push wakes a suspended service worker by design; a socket cannot. If the worker is evicted and a code arrives before the one-minute heartbeat re-establishes the connection, that code is lost. Chrome, Edge, Brave and Vivaldi use push and have no such window.
Adds the alarms permission, which is what re-establishes the connection after the worker is evicted — the only thing that survives eviction.
Known limitations
Unchanged from v0.2.0: creating the iPhone automation is manual and cannot be automated by anyone; iOS forces a notification each time it runs; codes reach the relay over TLS but are not end-to-end encrypted, and are never written to disk or logged. Locked-phone reliability is still unmeasured — see docs/SPIKES.md.