One login. Every BitLogin site.

One password.
Every door it opens.

Create a BitLogin account on any site that supports it, and the same login name and password sign you into every other one. No new account to make, no extension to install, no separate signer app to keep paired and running.

What actually happens at sign-in

No account database to breach, no password-reset email to intercept — just math, run locally, every time.

Everyday login
Login name + password
Locally derived
Password-locked locator key
Public network
Encrypted capsule lookup
Result
Your portable identity, unlocked

Two independent ways in, one identity

Forgetting a password and losing a device are different emergencies. BitLogin keeps them cryptographically separate.

Password path

Login name + password deterministically derive a private "locator" key and an encryption key. That key finds and decrypts a small credential capsule on open relays — no lookup table, no account server, no email.

Recovery phrase

A 12-word phrase derives a completely independent recovery identity. A cracked password cannot sign, replace, or delete the recovery capsule. Recovery availability still depends on relays retaining your capsule and on your own recovery export — quorum and retention are best-effort, not guarantees.

One everyday identity

Both paths unlock the exact same everyday keypair — your real, canonical, portable identity. Change your password as often as you like; the identity underneath never moves.

Not a browser extension. Not a remote signer.

Both of those are good tools for the people already running them. BitLogin exists for everyone else.

A browser extension (NIP-07)

Lives in one browser

Sign in on your phone, at work, or in a private window, and you're locked out — the keys never left that one browser profile.

A remote signer (NIP-46)

Needs another device online

Every sign-in bounces through a separate signing app or "bunker" that you have to keep running, paired, and reachable.

BitLogin

Just a login name and password

The two things you already remember. Nothing to install, nothing else to keep online, works the same on any device or browser.

Why this is different

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 static files. Serve the complete reviewed bundle from your app's own origin. No backend to run or pay for.

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. An account still lives only as long as some relay retains its capsule — keep the recovery export.

Generated by default, never weak

A downloadable encrypted capsule can be attacked offline forever, so BitLogin always generates a high-entropy passphrase. Human-chosen passwords are disabled because composition rules cannot make them safe against unrestricted offline guessing.

Argon2id + AES-256-GCM

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.

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.

Wallets that follow you

The Connection Vault stores wallet connections (NWC) as independently encrypted records on your account. Connect a wallet to an app once; on a new device it's one tap, not another paste. Apps ask with requestNwcConnection(), you approve, and you remove the stored copy any time (revoking spending authority happens at your wallet) — and the budget your wallet enforces stays the real limit.

Drop it into any static page

One script tag, one custom element. No build step, no framework required.

<script type="module" src="/vendor/bitlogin/bitlogin.js"></script>
<bitlogin-auth vault-relays="wss://relay.example,wss://relay2.example"></bitlogin-auth>

Read the full integration guide →