Building Passkey-Powered Solana Wallets with LazorKit
It's 2025 and blockchain UX is still broken. Users need to install wallet apps, write down seed phrases, and pay gas fees before they can do anything. The technology has advanced, but the onboarding hasn't.
When Solana validators added passkey algorithm support in June 2025, it opened a door. LazorKit is one of the libraries walking through it.
The Problem
Traditional wallet flow:
- Install a browser extension or app
- Generate a keypair
- Write down a 12-24 word seed phrase
- Store it securely (forever)
- Fund the wallet with SOL for gas
- Finally... do something
Every step is a drop-off point. Most users never make it past step 3.
The Solution
Passkeys (WebAuthn/FIDO2) are the same technology banks use for authentication. Your device's secure enclave stores the key. You authenticate with a fingerprint or face scan.
LazorKit uses this to:
- Create a Smart Wallet (Program Derived Address) on Solana
- Sign transactions without exposing any private key
- Pay gas fees via a Paymaster (users don't need SOL)
New user flow:
- Click "Connect with Passkey"
- Use FaceID/TouchID
- Done. Wallet created.
What I Built
A production-ready starter template demonstrating:
- Passkey authentication — No seed phrases, no extensions
- Gasless transactions — SOL and USDC transfers without holding gas tokens
- Session persistence — Sessions survive page refreshes and browser restarts
- Auto ATA creation — USDC transfers automatically create recipient token accounts
The entire demo is ~15 files. Clean architecture, typed hooks, reusable components.
Key Implementation Details
Provider Setup
<LazorkitProvider
rpcUrl="https://api.devnet.solana.com"
portalUrl="https://portal.lazor.sh"
paymasterConfig={{
paymasterUrl: "https://kora.devnet.lazorkit.com"
}}
>
{children}
</LazorkitProvider>Gasless Transaction
const instruction = SystemProgram.transfer({
fromPubkey: smartWalletPubkey,
toPubkey: new PublicKey(recipient),
lamports: 0.001 * LAMPORTS_PER_SOL,
});
// User signs with passkey, Paymaster pays gas
const signature = await signAndSendTransaction({
instructions: [instruction],
});The user never needs SOL for gas. The Paymaster handles it.
Try It
- Live Demo: lazorkit-passkey-gasless-demo-beta.vercel.app
- Source: github.com/AJ-EN/lazorkit-passkey-gasless-demo
The repo includes 4 step-by-step tutorials covering passkey creation, gasless transactions, session persistence, and mainnet deployment.
Why This Matters
Blockchain adoption isn't a technology problem anymore. It's a UX problem.
Every time we remove a step from onboarding, we 10x the potential user base. Passkeys + gasless transactions remove the two biggest barriers: seed phrases and gas fees.
The primitives exist. Now we build.
This project was built for the LazorKit Bounty (Dec 2025 - Jan 2026).