// nsealr · v0 · stateless · pre-production

Sign Nostr
events offline.

A non-profit, open-source program for reproducible Nostr signing devices. Companion software, five signer solutions, and open hardware references — auditable instead of proprietary.

approval_digest signing_disabled v0 spec non-profit · open-source
# verify a request — companion
$ nsealr verify --request req.json
✓ approval_digest ok
! sign-event disabled in dev firmware
nSealr seal mascot holding a sealed Nostr envelope

// system

One companion. Five signer solutions.

The companion prepares requests, moves them over QR, file, stdio, serial, USB, or card transports, and verifies every successful response. The signer keeps or protects the private key and signs only through an explicit policy boundary.

Companion surfaces:

  • nsealr CLI
  • npm SDK
  • browser extension
  • local app
  • local service
  • NIP-46 bridge

Read product shape →

nSealr signer architecture Nostr clients send signing requests to the companion, which routes them to one of five signer solutions: Raspberry/Pi stateless QR vault, ESP32 QR vault, ESP32 USB signer, smartcard, or custom persistent-secret hardware wallet. Nostr Client Companion Verifier Raspberry QR Vault ESP32 QR Vault ESP32 USB / NIP-46 Smartcard APDU Custom Wallet

// families

Pick the boundary that matches your trust model.

The five signer solutions: Raspberry/Pi Stateless QR Vault · ESP32 Stateless QR Vault · ESP32 USB/NIP-46 Signer · JavaCard/NFC Smartcard Signer · Custom Nostr Hardware Wallet With Persistent Secret.

// status

Current maturity is explicit.

Per-family contracts, gates, and smoke evidence — sourced from the signer feature matrix in nSealr/specs.

// security

No production security claim yet.

nSealr is pre-production research and implementation work. The project documents trust boundaries, test evidence, and known limits before presenting any device as ready for real keys.

Per-family maturity, capability matrix, and contract IDs are in the signer pages; the threat model and trust boundaries get their own deep-dive in /docs/security/.

Read the trust model →