Signature sign-in
One offline signMessage proves wallet ownership. No password anywhere to leak.
Send messages between Solana wallets. Sign in with a signature — no email, no password, no recovery codes. Built for the open network.
Free
Zero on-chain fees
Signed
ed25519 wallet auth
Direct
Wallet → wallet
BUILT FOR THE OPEN NETWORK
Signature
Auth
0.000 SOL
Cost
< 100 ms
Latency
Zero
Tracking
[01] LIVE DEMO
A simulated stream of what flows through a wallet-native mail node. Same shape as production.
[02] FEATURES
A small, sharply-scoped feature set — every one live in this demo build.
One offline signMessage proves wallet ownership. No password anywhere to leak.
Send to any base58 wallet address. The recipient doesn't need to be pre-registered.
Your Solana pubkey is the address. No emails, no usernames, no central registry.
ed25519 signature verified with tweetnacl, sealed in an HMAC cookie.
No Google login, no Apple ID, no captcha, no analytics scripts.
Wallet auth is a signature, not a tx. Nothing is broadcast to validators.
[03] HOW IT WORKS
From cold open to first sent message.
Phantom, Solflare, Backpack — anything that speaks the Wallet Standard.
Your wallet signs a short prompt. We verify it server-side and issue a session.
Paste a wallet address, write your message, hit send. They see it next sign-in.
[04] UNDER THE HOOD
Wallet sign-in fits in fifteen lines. Verified server-side with tweetnacl.
01mu// 1) ask wallet to sign a fresh timestamped prompt02const timestamp = Math.floor(Date.now() / 1000);03const message = `solana-mail :: login :: ${timestamp}`;04const sig = await wallet.signMessage(new TextEncoder().encode(message));0506mu// 2) send signature + wallet to /api/auth/login07await apiLogin({08 wallet: wallet.publicKey.toBase58(),09 signatureBase58: bs58.encode(sig),10 timestamp,11});1213mu// server: tweetnacl.sign.detached.verify → 24h HMAC cookieSolana wallets natively produce ed25519 sigs. We verify same curve server-side.
Cookie is a small base64 blob signed with a server HMAC key. No DB lookup per request.
No JWTs, no OAuth, no refresh dance. Verified in O(1).
[05] PREVIEW
The actual UI post sign-in.
gm — wagmi?
2mJ385…5ZCu · Just looped you into the contract review…
protocol upgrade — review
14m6tWf…Lkr1 · Pushed the new audit doc. Diff is small but…
re: airdrop coordinates
3h9xQe…WkT4 · Forwarded the snapshot list, lmk if you need…
thanks for the link
1dA1bC…q8Pz · That repo saved my weekend, owe you a coffee
re: re: gm
2ddEf2…7nMa · gm
Anatomy of a mail
Honesty disclaimer
Demo build — messages stored plaintext in SQLite. For a real product, layer E2E encryption on top of the same API.
[06] FEEDBACK
Replies in inbox, paraphrased. Pubkeys are real.
Finally a messaging app where my username can't be squatted. The pubkey IS the username — no platform politics.
anon dev · 9xQe…WkT4
Sign-in literally took one click. No email confirmation, no recovery setup. I forgot how good Web3 auth feels.
anon trader · 6tWf…Lkr1
Used this to coordinate with three other contributors across timezones. Sent and received without anyone setting up an inbox.
anon op · J385…5ZCu
[07] FAQ
No legalese, no marketing fog.
[08] READY?
Click the wallet button in the top-right of the page. Whole flow takes under ten seconds.