WalletConnect built the standard for mobile wallet connectivity. Then came the dashboards, the API keys, the monthly bills, and the single point of failure. WalletCast gives you the same seamless experience — built on open protocols, without asking anyone's permission.

Forget creating developer accounts or waiting for approvals. Install the SDK, generate a QR, and you're connected. Zero friction.
No payment tiers, no per-user fees, no credit cards. Public and open infrastructure, the way it should have always been.
You don't depend on our servers. WalletCast uses P2P and Nostr routing. If we disappear tomorrow, your dApp keeps working perfectly.
Compatible with standard provider interfaces (EIP-1193). Switching from your current solution takes a couple lines of code.
Dapp creates an ephemeral keypair and renders a QR code with wallet-specific deep links.
User scans the QR — their wallet opens the connector page in its in-app browser.
The connector detects window.ethereum and bridges all RPC calls over encrypted Nostr messages.
Dapp receives signed transactions and wallet events in real-time. No relay signup. No tracking.
Everything you need to integrate WalletCast into your dapp.
WalletCast.connect() automatically restores saved sessions, detects injected wallets, and shows a QR modal if no injected wallet is found.
High-level API that handles everything: session restore, injected wallet detection, and QR modal.
| Option | Type | Default | Description |
|---|---|---|---|
rpcUrl | string | — | Public RPC for read methods |
chainId | number | — | Detected from wallet if omitted |
connectorUrl | string | 'https://walletcast.net/' | Connector page URL |
nostrRelays | string[] | defaults | Nostr relay URLs |
preferInjected | boolean | true | Check injected wallet first |
theme | 'dark' | 'light' | 'system' | 'dark' | QR modal theme |
walletId | WalletId | — | Skip picker, show specific wallet QR |
| Field | Type | Description |
|---|---|---|
provider | EIP1193Provider | Use for all RPC calls |
type | 'injected' | 'walletcast' | Connection method used |
accounts | string[] | Connected wallet accounts |
chainId | string | Hex chain ID (e.g. "0x1") |
disconnect | () => Promise<void> | Disconnect and clear session |
Lower-level API for custom UI. Generates deep links but doesn't show any modal.
Check for an injected EIP-1193 provider without triggering connection.
| ID | Wallet | Deep Link | Universal Link |
|---|---|---|---|
metamask | MetaMask | metamask://dapp/... | metamask.app.link/dapp/... |
trust | Trust Wallet | trust://open_url?... | link.trustwallet.com/... |
coinbase | Coinbase Wallet | cbwallet://dapp?... | go.cb-w.com/dapp?... |
phantom | Phantom | phantom://browse/... | phantom.app/ul/browse/... |
okx | OKX Wallet | okx://wallet/dapp/... | — |
Sessions are automatically managed by WalletCast.connect(). Saved to localStorage with 24-hour TTL. Restored silently on page reload via ping/pong. Cleared on disconnect() or when the connector sends a disconnect message.
Connecting a mobile wallet to a desktop dapp should not require a centralized relay service, an API key, or trust in any third party. WalletCast replaces the entire WalletConnect infrastructure with encrypted Nostr messages — an open protocol anyone can relay.
| Feature | WalletConnect | WalletCast |
|---|---|---|
| Centralized relay | Required | None |
| Project ID / signup | Required | None |
| Message privacy | Relay can observe | E2E encrypted |
| Self-hostable relay | Complex | Any Nostr relay |
| Connector size | ~200KB+ SDK | ~55KB single file |
| Protocol | Proprietary | Nostr (open) |
| Vendor lock-in | Yes | None |
The connector is a single self-contained HTML file (~55KB). Deploy it anywhere and pass your URL:
Secure wallet bridge
Powered by WalletCast