Non-custodial vault
Create or import a wallet. The secret key is encrypted locally with AES-256-GCM and PBKDF2 (600k iterations), and auto-locks after idle.
Solana Social WalletNon-custodial · End-to-end encrypted · Mainnet-beta
Hold SOL and SPL tokens, send mainnet transactions with an explicit confirmation, and message other addresses with end-to-end encryption. The recovery phrase and private key are encrypted on your device and never sent anywhere.
What it does
Six things it handles, without sending anything sensitive off your device.
Create or import a wallet. The secret key is encrypted locally with AES-256-GCM and PBKDF2 (600k iterations), and auto-locks after idle.
Transfer SOL on mainnet with the network fee reserved automatically, plus SPL token balances and recent transaction history.
Messages are encrypted with ECDH P-256 + AES-GCM. The relay only stores signed ciphertext — it never sees the plaintext.
Chat profiles and message envelopes are signed with your Solana key, binding each address to its public chat key.
The extension exposes a Phantom-style provider with an approval window for every connect and signature. Nothing is signed automatically.
The relay runs on SQLite with rate limiting, a CORS allowlist, signature verification, and replay protection.
Under the hood
Nothing readable ever reaches the relay — it only ever holds signed ciphertext.
Security model
The recovery phrase and private key are never sent to any server. They live encrypted on your device, decrypted only in memory after you unlock.
Every mainnet transaction and every dApp request is confirmed by hand in a separate approval step.
The relay handles metadata and ciphertext. It cannot read the contents of a message.
Heads up: this is an educational MVP and has not been audited. Don't use it for large balances. Sender and recipient addresses are still visible to the relay as metadata.
Get started
Use the web wallet instantly, or install the extension for dApp signing and chat.
chrome://extensions, turn on Developer mode, and click Load unpacked on the unzipped folder.npm run relay:install then npm run relay.
Building from source? npm install → npm run build → load the dist/ folder.