A modern, non-custodial Stellar wallet built with Next.js and TypeScript, featuring a beautiful Ghana-inspired UI. This is an MVP wallet for the Stellar testnet.
IMPORTANT: This is an MVP wallet with significant security limitations:
-
Browser Storage Risk: Mnemonics are encrypted and stored in
localStorage. Browser storage can be accessed by:- Malicious browser extensions
- XSS attacks
- Physical access to the device
- Malware on the system
-
Testnet Only: This wallet is configured for Stellar testnet only. Do not use mainnet funds.
-
Encryption: The MVP uses scrypt key derivation with XOR encryption. For production, use AES-256-GCM.
-
No Key Recovery: If you lose your password, your wallet cannot be recovered. Always backup your mnemonic phrase.
-
Development Status: This is an MVP. Do not use for production or with significant funds.
- 🎨 Beautiful UI with Ghana-inspired colors (red, yellow, green, and warm earth tones)
- 🔐 Create new wallet with keypair generation
- 📥 Import existing wallet from secret key
- 🔒 Password-protected encryption (PBKDF2 key derivation)
- 💰 View XLM balance on Stellar testnet
- 📤 Send XLM payments
- 📥 Receive XLM with shareable address
- 🔄 Fund account via friendbot
- 🔄 Non-custodial - your keys, your crypto
- Node.js 18+
- Yarn (or npm)
- Install dependencies:
yarn install- Run the development server:
yarn dev- Open http://localhost:3000 in your browser
├── app/
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Onboarding page
│ ├── create/ # Create new wallet
│ ├── import/ # Import existing wallet
│ ├── unlock/ # Unlock wallet
│ ├── home/ # Wallet home (balance)
│ ├── send/ # Send ETH
│ └── receive/ # Receive ETH
├── components/
│ └── SecurityWarning.tsx # Security warnings component
├── lib/
│ ├── encryption.ts # Scrypt encryption utilities
│ ├── wallet.ts # Wallet creation/import/unlock
│ └── provider.ts # Ethereum provider (Sepolia)
└── README.md
/- Onboarding (create or import wallet)/create- Create new wallet with password/import- Import wallet from secret key/unlock- Unlock wallet with password/home- View balance and wallet address/send- Send XLM payments/receive- Receive XLM (show address)
- User creates a password (minimum 8 characters)
- System generates a random Stellar keypair
- Secret key is encrypted using PBKDF2 key derivation
- Encrypted data is stored in
localStorage - Public key is also stored for quick access
- User enters existing Stellar secret key
- System validates the secret key
- User sets a password
- Secret key is encrypted and stored
- User enters password
- System decrypts secret key from
localStorage - Keypair is reconstructed from secret key
- User can now send transactions
- User enters recipient address (Stellar address starting with G) and amount
- User confirms with password
- Transaction is signed and submitted to Stellar testnet
- Encryption: PBKDF2 key derivation (100k iterations) + XOR encryption
- Storage: Browser
localStorage - Network: Stellar testnet only
- Use AES-256-GCM instead of XOR encryption
- Consider hardware wallets for key storage
- Implement secure key management (Keychain, Secure Enclave)
- Add transaction signing UI with clear details
- Implement rate limiting for password attempts
- Add 2FA for sensitive operations
- Use secure random number generation for mnemonics
- Implement session timeout
- Add transaction history with proper indexing
- Consider using Web3Auth or similar for production
- Always backup your mnemonic in a secure, offline location
- Use a strong, unique password
- Never share your mnemonic or password
- Be cautious of browser extensions that might access storage
- Use on a secure, private device
- Clear browser data when done (if using shared device)
- Verify addresses before sending transactions
The wallet is configured for Stellar testnet:
- Horizon:
https://horizon-testnet.stellar.org - Friendbot:
https://friendbot.stellar.org - Network Passphrase: Test SDF Network ; September 2015
To change networks, update lib/provider.ts.
yarn dev- Start development serveryarn build- Build for productionyarn start- Start production serveryarn lint- Run ESLint
The wallet uses a color palette inspired by Ghana and Africa:
- Primary (Red):
#ef4444- Ghana flag red - Secondary (Gold/Yellow):
#f59e0b- Ghana flag gold - Accent (Green):
#22c55e- Ghana flag green - Earth Tones: Warm browns and beiges for a natural, grounded feel
- @stellar/stellar-sdk (v14) - Stellar library for wallet operations
- Next.js (v14) - React framework
- TypeScript - Type safety
- Tailwind CSS - Styling
- No transaction history (UI ready, not implemented)
- No asset support (XLM only)
- No multi-network support (Stellar testnet only)
- Basic encryption (XOR, not AES)
- Browser storage only (no secure storage)
- No hardware wallet support
- No transaction queuing
- No address book/contacts
MIT
This software is provided "as is" without warranty. Use at your own risk. The developers are not responsible for any loss of funds. Always test with small amounts first and never use for production without proper security audits.