# nsigner Browser Extension — NIP-07 frontend over nsigner > **Project:** subtree of `n_signer` at `browser-extension/` (may spin out later). > > **Status:** Planning. This document describes a WebExtension that exposes [NIP-07](https://github.com/nostr-protocol/nips/blob/master/07.md) `window.nostr` and forwards calls to a running `nsigner` instance. > > **Authoritative signer behavior:** [`../README.md`](../README.md) ## 1. What this is A Chrome/Firefox/Brave WebExtension (Manifest V3) that: 1. injects a standard NIP-07-compatible `window.nostr` surface 2. forwards each call to `nsigner` over native-messaging, TLS, or relay fallback transport 3. applies per-origin permission policy and per-origin role pinning The extension is not a wallet and holds no private keys. ## 2. Important compatibility note with multi-purpose roles `nsigner` role entries now carry explicit purpose/curve metadata (see [`../README.md`](../README.md)). For browser NIP-07 operations, the extension must request only roles whose purpose resolves to `nostr`. If a role is configured for another purpose (e.g. bitcoin/ssh/age), extension UI must hide or reject it for NIP-07 signing/encryption calls instead of forwarding an invalid request. ## 3. Architecture (unchanged high level) - page -> content script -> service worker - service worker -> chosen transport -> `nsigner` - policy and user prompts in extension UI ## 4. NIP-07 surface mapping Standard NIP-07 calls map to `nsigner` request verbs: - `getPublicKey` - `signEvent` - `nip04.encrypt` / `nip04.decrypt` - `nip44.encrypt` / `nip44.decrypt` The extension attaches role selector options when needed, but role choices must remain purpose-compatible with Nostr operations. ## 5. Transport options 1. Native messaging bridge (primary) 2. TLS to local/nearby `nsigner` 3. Relay-based fallback ## 6. Permission model Per-origin policy remains the control point: - allow/deny by verb/kind/origin - origin-level role pinning - explicit prompts for sensitive operations ## 7. Security constraints - no private key/mnemonic persistence in extension storage - no plaintext decrypt cache - strong defaults for decrypt operations - role purpose compatibility checks before forwarding signer requests ## 8. Implementation phases (extension-specific) 1. native helper 2. MVP extension with native path 3. role-aware UI 4. TLS transport 5. management/audit UX 6. relay fallback transport 7. browser polish and release ## 9. Repo location Planned extension subtree remains: - `browser-extension/extension/` - `browser-extension/native-bridge/` - `browser-extension/install/` - `browser-extension/tests/` ## 10. Open questions - extension coexistence with other NIP-07 providers - multi-profile signer selection UX - mobile constraints without native messaging - hardware-token pending-confirmation UX in popup