HTML (Legacy / CDN) ​
Use XRPL Wallet Kit on pages that cannot use a bundler - a classic CMS site, a legacy app, or any plain HTML page. The IIFE bundle works with plain browser JavaScript and does not require a framework.
Load the IIFE Bundle ​
<!-- From CDN (pinned to the current stable release) -->
<script src="https://cdn.jsdelivr.net/npm/@xrpl-wallet-kit/browser@latest/dist/xrpl-wallet-kit.iife.min.js"></script>Or self-host the file — copy it from node_modules/@xrpl-wallet-kit/browser/dist/ to your server:
<script src="/assets/xrpl-wallet-kit.iife.min.js"></script>The bundle exposes a global XRPLWalletKit object:
<script>
var { createWalletKit, WalletManager, WalletModal, WalletButton } = XRPLWalletKit;
</script>Bundle size
The IIFE bundle is large because it includes all adapters and polyfills. For production sites, prefer the modular install with a bundler.
Quick Start ​
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>My XRPL dApp</title>
</head>
<body>
<!-- The connect button renders itself here -->
<button id="connect-btn"></button>
<script src="https://cdn.jsdelivr.net/npm/@xrpl-wallet-kit/browser@latest/dist/xrpl-wallet-kit.iife.min.js"></script>
<script>
var kit = XRPLWalletKit.createWalletKit({
wallets: 'all',
walletConnectProjectId: 'YOUR_WC_PROJECT_ID',
connectButton: '#connect-btn',
});
kit.manager.recoverSession();
</script>
</body>
</html>Manual Setup (more control) ​
<button id="connect-btn"></button>
<div id="status"></div>
<script src="/assets/xrpl-wallet-kit.iife.min.js"></script>
<script>
var WalletKit = XRPLWalletKit;
var manager = new WalletKit.WalletManager({
adapters: [
WalletKit.createGemWalletAdapter(),
WalletKit.createWalletConnectAdapter({
projectId: 'YOUR_WC_PROJECT_ID'
}),
],
network: {
id: 'mainnet',
networkType: 'MAINNET',
url: 'wss://xrplcluster.com',
nativeAsset: 'XRP',
nativeAssetDecimals: 6,
}
});
var modal = new WalletKit.WalletModal({ manager: manager });
var button = new WalletKit.WalletButton({
manager: manager,
modal: modal,
target: document.getElementById('connect-btn'),
});
manager.on('connected', function (event) {
document.getElementById('status').textContent =
'Connected: ' + event.account.address;
});
manager.on('disconnected', function () {
document.getElementById('status').textContent = 'Disconnected';
});
manager.recoverSession();
</script>Example: Existing Legacy Page ​
Call the same global API from your existing page script and keep the wallet UI mounted in a normal DOM node.
<script src="/assets/xrpl-wallet-kit.iife.min.js"></script>
<script>
var WalletKit = window.XRPLWalletKit;
var manager = new WalletKit.WalletManager({
adapters: [ WalletKit.createGemWalletAdapter() ],
network: {
id: 'mainnet',
networkType: 'MAINNET',
url: 'wss://xrplcluster.com',
nativeAsset: 'XRP',
nativeAssetDecimals: 6,
}
});
var modal = new WalletKit.WalletModal({ manager: manager });
new WalletKit.WalletButton({
manager: manager,
modal: modal,
target: '#connect-btn', // CSS selector string or HTMLElement both work
});
manager.on('connected', function (event) {
document.getElementById('wallet-address').textContent = event.account.address;
document.getElementById('wallet-address').hidden = false;
document.getElementById('connect-section').hidden = true;
document.getElementById('app-section').hidden = false;
});
manager.on('disconnected', function () {
document.getElementById('app-section').hidden = true;
document.getElementById('connect-section').hidden = false;
});
manager.recoverSession();
</script>Signing a Transaction ​
document.getElementById('pay-btn').addEventListener('click', async function () {
try {
var result = await manager.signAndSubmit({
txJson: {
TransactionType: 'Payment',
Account: manager.getAccount().address,
Destination: 'rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe',
Amount: '1000000',
Fee: '12',
Sequence: 1,
}
});
alert('Transaction submitted: ' + result.hash);
} catch (err) {
alert('Error: ' + err.message);
}
});Inline wallet picker ​
<div id="wallet-picker"></div>
<script>
var inline = new XRPLWalletKit.WalletInline({
manager: manager,
walletConnectUiMode: "group"
});
inline.on("connect", function (session) {
console.log("Connected:", session.account.address);
});
inline.mount("#wallet-picker");
</script>The inline picker uses normal document flow and does not create a backdrop or lock page scrolling.
Available Global Exports ​
The XRPLWalletKit global exposes:
// Factory (recommended)
XRPLWalletKit.createWalletKit(options)
XRPLWalletKit.createWalletClient(options)
// Core classes
XRPLWalletKit.WalletManager
XRPLWalletKit.WalletModal
XRPLWalletKit.WalletInline
XRPLWalletKit.WalletButton
XRPLWalletKit.WalletToast
// Adapter factories
XRPLWalletKit.createXamanAdapter(options)
XRPLWalletKit.createGemWalletAdapter()
XRPLWalletKit.createWalletConnectAdapter(options)
XRPLWalletKit.createCrossmarkAdapter()
XRPLWalletKit.createLedgerAdapter()
XRPLWalletKit.createDropfiAdapter()
XRPLWalletKit.createXrplSnapAdapter()
XRPLWalletKit.createOtsuAdapter()TypeScript in a <script type="module"> ​
If your HTML page uses <script type="module"> you can also import ESM directly from a CDN like esm.sh:
<script type="module">
import { createWalletKit } from "https://esm.sh/@xrpl-wallet-kit/client@latest";
const { manager } = createWalletKit({
adapters: [XRPLWalletKit.createGemWalletAdapter()],
network: "mainnet",
});
</script>INFO
ESM imports from esm.sh do not require a bundler, but they do need a browser that supports <script type="module">. For maximum compatibility with older browsers, use the IIFE bundle instead.
See Also ​
- Quick Start — modern bundler setup
- Vanilla TypeScript guide — Vite / webpack setup
- IIFE bundle reference — full API for
createWalletKit