I built OpenReceive and I'd love feedback from people running Lightning in production.
What it isFree, MIT-licensed Lightning checkout that runs inside your own app or store. The customer pays an invoice, your server sees it land in your wallet, and the order is marked paid. No account, no middleman, no fees.
Receive-onlyIt connects through Nostr Wallet Connect (NIP-47) and only uses get_info, make_invoice and list_transactions. It can't send payments, it refuses spend-enabled connections by default, and it never sees your seed. If your server is hacked, an attacker can create invoices and read incoming payments, but can't move funds. For full self-custody, run your own NWC service, like Alby Hub on your node.
How it worksYou tell it who can pay, the price (looked up server-side) and what to do once paid. It adds one table to your database, settles each payment exactly once, and runs your "paid" code inside that transaction. The browser only sees the invoice.
const service = await createOpenReceive(); // reads NWC_URI
const host = createHost({
db,
amountFor: async (ref) => priceOfOrder(ref), // server-side price
onPaid: async ({ reference, query }) =>
query("UPDATE orders SET state = 'paid' WHERE id = ?", [reference]),
});
app.use(openReceiveExpress({ service, host, authorize }));
Where it runsNode, Python, PHP and Rails libraries; React, Vue, Svelte, Angular or plain web component UIs; plugins for WooCommerce, EDD, PrestaShop, Odoo, Medusa, Vendure, Paymenter, FOSSBilling and BTCPay Server.
LimitsLightning only, sats only (no fiat), still beta (0.4.x). Custody depends on your wallet: a hosted NWC wallet means someone else holds the funds.
openreceive.org ·
GitHubI'd especially like to hear about- NWC wallets that misbehave with receive-only connections
- Settlement edge cases, like late payments on expired invoices or duplicate notifications
- Stacks you'd want next