lightning-uma

v2026.09.24

UMA (Universal Money Address): Lightspark's spec extending Lightning Address with non-USD currencies, KYC compliance, sender attestation, multi-currency exchange via Lightning routing. USE WHEN: integrating with UMA-enabled providers (mostly enterprise), building cross-currency LN payment flows.

GitHub
Install command
npx skhub add claude-dev-suite/lightning-uma
Markdown
SKILL.md

UMA (Universal Money Address)

UMA is Lightspark's open-spec extension to Lightning Address that supports:

  • Multi-currency invoices (USD, EUR, ARS, NGN, ...).
  • Sender / receiver attestation (KYC compliance).
  • Travel Rule data exchange (FATF compliance).
  • Currency conversion via Lightning's routing.

Format: same as Lightning Address — user@domain.com — but the backend implements UMA on top of LNURL-pay.

Spec: https://uma.me/, repo uma-universal-money-address/protocol.

Why UMA

Lightning Address solves "human-friendly identifier", but doesn't help with:

  • "I want to send 50 USD to user@bank.com" — wallet needs to know USD value mapping.
  • Compliance (banks need sender info).
  • Cross-currency conversion.

UMA addresses these for regulated financial institutions.

Resolution

Standard Lightning Address path:

GET https://domain.com/.well-known/lnurlp/user

But response includes UMA-specific fields:

{
  "tag": "payRequest",
  "currencies": [
    { "code": "USD", "decimals": 2, "minSendable": 1, "maxSendable": 100000 },
    { "code": "EUR", ... },
    { "code": "BTC", ... }
  ],
  "compliance": {
    "kycStatus": "VERIFIED",
    "utxoCallback": "https://...",
    ...
  },
  ...
}

Travel Rule data

For payments above thresholds:

  • Sender info: name, address, account number.
  • Receiver info: similar.
  • Data exchanged via signed payload during invoice request.

Currency conversion

UMA-enabled receiver might accept "100 USD" → produces a BOLT11 invoice for the BTC equivalent at current rate. Exchange happens at receive time.

Multi-hop currency: sender → bank → exchange → receiver bank, all via Lightning routing.

Implementations

  • Lightspark — primary, customers include Coinbase, Kraken-some jurisdictions, hodl, etc.
  • UMA SDK — TypeScript / Go / Python / Kotlin reference impls.

Comparison

FeatureLightning AddressUMA
Multi-currencynoyes
Sender infononeKYC-attested
Compliance / Travel Rulenoyes
Adoptionwide (hobbyists + services)narrow (regulated providers)
Privacyserver seesserver + counterparty institution sees

Use cases

  • Cross-border remittances between regulated providers.
  • Payment from a regulated wallet (e.g., Coinbase) to a UMA address.
  • Compliance-required Lightning payments at exchanges.

Privacy trade-off

UMA explicitly trades user privacy for regulatory compatibility. Not intended for general-purpose Lightning use; reserved for regulated flows. Self-custodial Lightning users typically use plain Lightning Address or BOLT12.

Common confusions

  • UMA != AMP. AMP = Atomic Multipath. UMA = Universal Money Address.
  • UMA is server-side; it doesn't change BOLT11/BOLT12 wire format.
  • UMA addresses look identical to Lightning Addresses — distinguishable only by the currencies/compliance fields in the LNURL-pay JSON.

See also

Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/bitcoin/lightning/uma

Default branch

main

Latest commit

9496306

Tree SHA

fe4e2f1