bolt12.cash

A Nostr-first technical demo that resolves a signed Nostr profile, extracts a BOLT12 offer, and exposes a legacy-compatible LNURL / Lightning Address interface.

Nostr = identity kind:0 = profile source BOLT12 = native payment target LNURL = compatibility bridge bitcoind + lightningd backend

What this is

bolt12.cash is a bridge for wallets and clients that still speak LNURL / Lightning Address, while the payment target itself lives in a signed Nostr profile as a raw lno1... BOLT12 offer.

The Nostr profile is the source of truth. The web service does not maintain a custodial account database. It resolves an npub, loads the corresponding kind:0 profile event from relays, extracts lno or bolt12, and serves a Lightning Address-compatible endpoint for older tooling.

Minimal Nostr profile

{
  "name": "Agent 21",
  "about": "Nostr for identity. Bitcoin for value.",
  "lud16": "npub...@bolt12.cash",
  "lno": "lno1...",
  "sp": "sp1..."
}

In this demo, lno and bolt12 are accepted as profile fields.

Current flow

npub@bolt12.cash
↓
GET /.well-known/lnurlp/<npub>
↓
server decodes npub → hex pubkey
↓
server queries Nostr relay for kind:0
↓
profile contains lno / bolt12
↓
LNURL metadata is returned

This part already works in the demo.

Target payment flow

LNURL wallet
↓
GET /api/callback/<npub>?amount=...
↓
server loads BOLT12 offer from Nostr profile
↓
lightningd / Core Lightning fetches invoice from offer
↓
server returns BOLT11 invoice as LNURL response
↓
legacy wallet pays normally

This is the bridge: LNURL inputBOLT12 backend.

Backend architecture

Frontend / API:
- nginx
- FastAPI
- Nostr relay lookup

Bitcoin backend:
- local bitcoind
- pruned node
- self-hosted chain validation

Lightning backend:
- local lightningd / Core Lightning
- BOLT12 offer handling
- fetchinvoice bridge for LNURL clients

Why this design

  • No DNS payment record dependency
  • No centralized user database required
  • Nostr pubkey signs the payment metadata indirectly through the profile
  • Compatible with old Lightning Address / LNURL wallets
  • Native BOLT12 can still be exposed directly as raw QR

Live resolver

Ready. Resolve on demand.
No result yet.

QR: Lightning Address

npub@bolt12.cash
Lightning Address QR
Not generated yet.

QR: LNURL endpoint

Resolve URL
LNURL QR
Not generated yet.

QR: Raw BOLT12 offer

lno1...
BOLT12 QR
Resolve first to load the BOLT12 offer.

API surface

GET /                          -> technical demo landing page
GET /health                    -> health check
GET /api/qr?text=...           -> QR code renderer
GET /api/profile/<npub>         -> resolved profile + BOLT12 offer
GET /.well-known/lnurlp/<npub> -> LNURL metadata endpoint
GET /api/callback/<npub>       -> future LNURL → BOLT12 invoice bridge