Skip to content
Ownfold
Esc
navigateopen⌘Jpreview

ADR 0007: Browser lock coordination

Coordinate logical vault locking across tabs with versioned secret-free BroadcastChannel messages and a secure idle default.

Status: accepted for v0.3.

An unlocked VaultClient removes its in-memory root-key handle after fifteen minutes without user activity by default. Pointer and keyboard activity reset the timer. Returning to a visible document first checks elapsed time, so timer throttling in a background tab cannot silently extend an expired session. Applications may configure the interval or explicitly set it to zero.

Tabs for the same vault coordinate through a vault-scoped BroadcastChannel. Version 1 messages can request a lock, announce device revocation, announce removal of shared local state, or announce rotation start and completion. Messages contain only the vault ID, source instance ID, timestamp, event type, and a device or rotation ID when required. They never contain root keys, private keys, Recovery Kits, passwords, record identifiers, or plaintext. Unknown and malformed messages are ignored.

Lock messages destroy each receiving client’s in-memory root-key handle. Revocation and local-state removal also clear the shared IndexedDB record and transition tabs to unavailable-on-device. Rotation start locks peer tabs and blocks record access until atomic cutover; completion makes them reload the new vault metadata and device envelope before unlocking. dispose() destroys the local root-key handle, closes the channel, removes activity listeners, and cancels timers.

This lock is a same-origin application control. A malicious script can suppress events, create its own client, or use an available non-extractable device key. It is not OS user-presence authentication and must not be described as protection from XSS or a compromised application.

Last updated on August 4, 2026

Was this page helpful?