A familiar face.
Everywhere.
Give users a NIP-07 provider without installing an extension.
Get the public key
const pubkey = await window.nostr.getPublicKey();
// Lowercase 32-byte hex public key.Sign an event
const event = await window.nostr.signEvent({
kind: 1,
created_at: Math.floor(Date.now() / 1000),
tags: [],
content: "hello, open internet ☀️"
});
// Publish the signed event to your chosen relays.The user sees the event content, kind, and tags before approving with their passkey. Signing does not publish the event.
Private messages
const ciphertext = await window.nostr.nip44.encrypt(pubkey, "hello!");
const plaintext = await window.nostr.nip44.decrypt(pubkey, ciphertext);
// Legacy NIP-04 encrypt/decrypt is also available.
// Prefer NIP-44 for new implementations.One global identity
The root mnemonic derives the Nostr key at the standard NIP-06 path m/44\'/1237\'/0\'/0/0. This identity is shared across origins, so sites can recognize the same user.
A name that feels like you
Users can claim name@bivvy.me in the wallet after completing a small proof of work. The same name supports NIP-05 verification and Lightning payments. Names are public and unique; registration needs an unlocked wallet and a fresh passkey approval.
Existing extensions
The one-line script leaves an existing window.nostr untouched. Use bivvy.nostr to explicitly target Bivvy when another provider is present.
See the NIP-07 specification and NIP-06 derivation standard.