Every design choice traces back to one constraint: it has to work with nothing but static files and public relays.
+ Every design choice traces back to one constraint: it has to work with nothing but static files and a public network.
Static-first
The whole client — crypto, UI, worker — ships as files. Host it anywhere: Pages, IPFS, a folder on a CDN. No backend to run or pay for.
-
Relay-redundant storage
-
Encrypted capsules are published to multiple Nostr relays with quorum reads and readback verification, so no single relay is a single point of failure.
+
No single point of failure
+
Encrypted capsules are published to multiple independent relays with quorum reads and readback verification, so losing any one of them doesn't lock anyone out.
Generated by default, never weak
@@ -80,15 +160,15 @@
Argon2id + AES-256-GCM
-
Memory-hard key derivation, authenticated encryption, canonical JSON serialization, and fixed padding buckets so ciphertext size doesn't leak contents.
+
Memory-hard key derivation, authenticated encryption, canonical serialization, and fixed padding buckets so ciphertext size doesn't leak contents.
Rollback-resistant
A local generation high-water mark and monotonic timestamps mean a stale or malicious relay can't quietly roll a logged-in device back to an older capsule.
-
NIP-07-compatible signing
-
Once unlocked, BitLogin exposes a window.nostr provider — the same shape browser extensions use. Existing Nostr apps work with zero code changes.
+
Works with existing Nostr apps
+
Once unlocked, BitLogin quietly plugs into the same window.nostr interface browser extensions use — apps built for those work with zero code changes.