Lightning Wallet Connect
This project includes web components for connecting to Lightning Wallets and enabling WebLN. Websites only need to implement a single interface to connect with multiple wallets (WebLN), and users can connect from both desktop and mobile devices. These components work with pure HTML and all Javascript libraries frameworks such as React, Angular, Vue, Solid.js, etc.
🚀 Quick Start
npm install @getalby/lightning-wallet-connect
or
yarn add @getalby/lightning-wallet-connect
or for use without any build tools:
<script src="https://cdn.jsdelivr.net/npm/@getalby/lightning-wallet-connect@1.0.5/dist/index.browser.js"></script>
📽️ Demo
https://user-images.githubusercontent.com/33993199/234830578-0baf25f9-0179-4244-941c-0c558c613a7a.mov
🤙 Usage
Lightning wallet connect exposes the following web components for allowing user to connect their desired Lightning wallet:
<lwc-button/>
- launches the LWC Modal on click
- Optional Arguments:
icon-only
- display the button as an icon without "Connect wallet"disabled
- mark the button as disabled. NOTE: in react disabled={false} will not work - attribute must be omitted
<lwc-modal/>
- render the modal on its own<lwc-connector-list/>
- render the list of connectors on their own- more components coming soon
Lightning wallet connect exposes the following events:
lwc:connected
window event which fires when a wallet is connected and window.webln is ready to uselwc:connecting
window event which fires when LWC is connecting to a walletlwc:disconnected
window event which fires when user has disconnected from their walletlwc:modalopened
window event which fires when Lightning Wallet Connect modal is openedlwc:modalclosed
window event which fires when Lightning Wallet Connect modal is closed
Current wallets supported:
Pure HTML
Example codepen: https://codepen.io/rolznz/pen/ZEmXGLd
<html>
<body>
<lwc-button></lwc-button>
<script src="https://cdn.jsdelivr.net/npm/@getalby/lightning-wallet-connect@1.0.5/dist/index.browser.js"></script>
<script>
window.addEventListener('lwc:connected', async () => {
const invoice =
await window.webln.sendPayment(invoice);
confetti();
});
</script>
</body>
</html>
React
Example replit: https://replit.com/@rolznz/make-me-an-image-lwc-version
import '@getalby/lightning-wallet-connect';
const [lwcConnected, setLwcConnected] = React.useState(false);
React.useEffect(() => {
const onConnected = () => setLwcConnected(true);
window.addEventListener('lwc:connected', onConnected);
return () => {
window.removeEventListener('lwc:connected', onConnected);
};
}, []);
const invoice =
return lwcConnected ? <>
<button onClick={() => window.webln.sendPayment(invoice)}/>
</> : <lwc-button/>;
Demos
Open demos
🛠️ Development
Install
Run yarn install && (cd dev/vite && yarn install)
Run Vite
Run yarn dev
Other dev options
Open dev
Production Build
yarn build
Build (Watch mode - no pure html support)
yarn dev:build
Build (Watch mode - with pure html support)
yarn dev:build:browser
Testing
yarn test
Need help?
We are happy to help, please contact us or create an issue.
🔥 Lit
This project is powered by Lit.
See Get started on the Lit site for more information.
License
MIT