OpenReceive for Vendure

Accept Bitcoin & Stablecoin Payments With Vendure

Add Bitcoin Lightning to a Vendure store with @openreceive/vendure, a plugin and payment method handler for your Vendure server. Vendure keeps orders; OpenReceive settles the payment in your own wallet.

Plugin

Copy agent directions — Paste into Claude Code, Codex or Cursor to add OpenReceive to your Vendure app.

Why OpenReceive

Try the checkout your customers will see

Vendure shoppers see this same checkout at the storefront's payment step; here it runs in the openreceive.org demo shop. The live demo needs JavaScript: open the OpenReceive home page.

Five steps, some code

Requires Vendure ≥ 3.3, Node ≥ 22.12, PostgreSQL, MySQL or MariaDB.

1. Get a receive-only NWC code — get one here. It can issue invoices and watch for payment, and it can never spend from your wallet.

2. Get an LSC code for swaps (optional) — from a swap provider, only if customers should be able to pay in USDT, USDC, ETH or SOL.

3. Install and register the plugin

npm install @openreceive/vendure, add OpenReceivePlugin to vendure-config, then restart the server and the worker

4. Add the codes and the payment method — Put NWC_URI, and LSC_URI_PRIMARY if you want swaps, in the Vendure server's .env, never in the storefront, and restart the server and the worker. Then create a payment method with the handler OpenReceive under Settings → Payment methods, or run the plugin's enable script.

5. Add the checkout to the storefront — The React <Checkout> on the storefront's payment step, talking to the routes the plugin mounts on Vendure's server. The Vendure quickstart has the code for Vendure's Next.js starter.

Full Vendure quickstart · Plugin source

How it runs

Tested on
Vendure 3.8.0 on Node 22 with its worker, and Vendure's Next.js starter
Databases
PostgreSQL, MySQL or MariaDB, Vendure's own database (PostgreSQL tested)
Secrets
NWC_URI, and LSC_URI_PRIMARY for swaps, in the Vendure server's environment or .env file, never in the storefront
Refunds
Refund a settled Lightning payment from your own wallet: the wallet code is receive-only, and a refund made in the Vendure dashboard stays pending. A buyer reclaims a swap deposit that never converted from the same checkout.
Mobile apps
No app SDK. Payers pay on the store's web checkout, and an app that opens it follows the same app store rules as any web checkout.

Practical questions

Which currencies can customers pay with?
Bitcoin over Lightning, always. With a swap provider configured, also USDT on Tron, Solana or Ethereum, USDC on Solana or Ethereum, ETH and SOL, each converted into the same Lightning payment. Automated swaps guide
Where does the Bitcoin go?
Into the wallet behind the receive-only NWC code. OpenReceive never holds funds: the invoice is minted in your wallet and the sats land there. Once it settles, the plugin adds a settled Vendure payment, with the payment hash as its transaction id, and Vendure places the order. Vendure quickstart
What wallet do I need?
Any wallet that issues receive-only NWC (Nostr Wallet Connect) codes, hosted or self-run. The code must be able to create invoices and read their status, and must not be able to spend. Get a receive-only NWC code
What does it cost?
OpenReceive is open source and free. Fees charged by your wallet provider, by a swap provider or by Lightning routing belong to those services and are outside OpenReceive's scope.
What do I need to deploy?
Vendure 3.3 or later on Node 22.12 or later with PostgreSQL, MySQL or MariaDB, the server and its worker running with Vendure's DefaultSchedulerPlugin, the codes in the server's .env, and a storefront that renders the checkout. Vendure quickstart

Add OpenReceive to Vendure

Copy agent directions · Full quickstart · Plugin source · API reference · Guides