Build
Wallets: the user should not have to install anything
The user installs nothing: embedded wallets, Wallet Standard and gas paid by the app.
The most expensive mistake in a demo: requiring an extension install and four signatures.
| Option | When | How |
|---|---|---|
| Embedded wallet — Privy, Dynamic, Turnkey, Crossmint, Phantom Embedded | A product for people who have no wallet | Login with email, Google or passkey; the wallet creates itself. Privy and Phantom have native Solana support |
Wallet Standard — @solana/kit-plugin-wallet + @solana/react |
A product for people who already live in crypto (Phantom, Solflare, Backpack) | It is what create-solana-dapp ships. Do not use @solana/wallet-adapter-* for new projects |
| Hybrid | Most products | Embedded by default, external as an option |
Pay the gas for the user. A transaction costs 5,000 lamports in base fee per signature, charged even if it fails — a fraction of a cent: let the app pay it and the user never sees "you need SOL".
- With Privy:
feePayerpointing at a wallet in your backend; the client signs with the embedded wallet, the backend verifies the contents and signs as fee payer. Always verify the transaction in the backend before signing it: an authenticated session, program IDs and instructions on an allowlist, writable accounts, amounts, the expected fee payer, the cluster, and a per-user rate limit. An endpoint that signs whatever it is sent is an open wallet. - With Kora (
cargo install kora-cli): a signing service that charges the fee in any token (USDC, your own) or subsidises it.
For the demo: leave an account already logged in and funded on devnet. Record a backup video the night before.