EVE Vault Wallet is a Chrome MV3 extension built with WXT and React. It implements the Sui Wallet Standard to let dApps discover and connect to a user wallet. User authentication supports EVE Frontier FusionAuth via Chrome's identity API. After login, a Sui zkLogin address is derived and exposed to dApps via the wallet standard.
EVE Vault is only available as a Chrome browser extension at present, with the web version coming soon.
- ✅ EVE Frontier-provider OAuth (FusionAuth)
- ✅ zkLogin address derivation via Enoki
- ✅ Wallet Standard implementation for dApp discovery
- ✅ Transaction signing with zkLogin
- ✅ Multi-network support (Devnet, Testnet) with seamless switching
- ✅ Reactive state management with Zustand
- ✅ Chrome storage persistence
EVE Vault uses zkLogin to create a Sui wallet address from your OAuth credentials (FusionAuth). Instead of managing a private key, your wallet address is cryptographically derived from your authenticated identity using zero-knowledge proofs.
For detailed technical information, see the Architecture Documentation and Sui zkLogin docs.
Latest extension (Chrome):
https://github.com/evefrontier/evevault/releases/latest/download/eve-vault-chrome.zip
This link always points to the most recent release. Use it in docs (e.g. GitBook) or share it for one-click download.
- Node.js 22+
- Bun (recommended) or npm/pnpm
- FusionAuth application with client credentials (for EVE Frontier auth)
- Enoki API key (for zkLogin address derivation)
bun installCreate a .env file at app root, apps/extension:
# FusionAuth Configuration
VITE_FUSION_SERVER_URL="https://auth.evefrontier.com"
VITE_FUSIONAUTH_CLIENT_ID=your-fusionauth-client-id
VITE_FUSION_CLIENT_SECRET=your-fusionauth-client-secret
# Enoki Configuration
VITE_ENOKI_API_KEY=your-enoki-api-key
# Extension Configuration
EXTENSION_ID="your-extension-public-key"FusionAuth:
- Go to your FusionAuth admin panel
- Navigate to Applications → Your App → OAuth
- Add redirect URI:
https://<your-extension-id>.chromiumapp.org/ - Enable scopes:
openid,profile,email
# Run extension
bun run dev:extension
# Or run all apps
bun run dev- Chrome: Go to
chrome://extensions, enable Developer mode, click "Load unpacked", and selectapps/extension/.output/chrome-mv3
- Open the extension popup
- Click "Sign in with EVE Vault"
- Complete the OAuth flow
- After success, the popup displays your zkLogin address and Sui balance
- Switch between Devnet and Testnet using the network selector in the bottom-left corner
# Build extension (Chrome)
bun run build:extension
# Build all apps
bun run buildOutput: apps/extension/.output/chrome-mv3/
This project uses Biome for fast formatting and linting (~35x faster than Prettier).
# Check all files
bun run lint
# Auto-fix issues
bun run lint --write
# Check specific workspace
bunx turbo run lint --filter=@evevault/webHusky + lint-staged automatically format and lint staged files on commit:
- Runs
biome check --writeon staged.ts,.tsx,.js,.jsx,.json,.cssfiles - Auto-fixes formatting, import order, and style issues
- Blocks commit if unfixable errors remain
Configuration:
biome.json- Formatting and linting rules.biomeignore- Files to ignore.husky/pre-commit- Pre-commit hook script
VS Code Integration: Install the Biome extension for real-time feedback:
code --install-extension biomejs.biome# Run all tests
bun run test
# Run tests once (for CI)
bun run test --run
# Run tests for specific workspace
bunx turbo run test --filter=@evevault/sharedSee Testing Guide for detailed testing information.
This is a monorepo using Bun workspaces and Turborepo:
eve-frontier-vault-sui/
├── packages/
│ └── shared/ # Cross-platform business logic
└── apps/
├── extension/ # Browser extension
└── web/ # Web application
For detailed structure and architecture, see Monorepo Documentation.
- Monorepo Guide - Structure, getting started, commands
- Architecture - ZKLogin and auth flow
- Bun + Turborepo Setup - Tooling deep-dive
- Development Guide - Development workflow, debugging, tips
- Implementation Details - Core scripts, authentication, wallet implementation
- Testing Guide - Testing setup, examples, and best practices
- Troubleshooting - Common issues and solutions
import { SuiClientProvider, WalletProvider } from "@mysten/dapp-kit";
<WalletProvider
autoConnect
walletFilter={(wallet) => wallet.name.includes("Eve Vault")}
>
<App />
</WalletProvider>;The extension registers as "Eve Vault" in the page context. Connecting triggers the login flow if the user isn't authenticated.
- Click the extension icon to open the popup
- Complete the OAuth flow (or switch networks using the network selector)
- The wallet is automatically available to all dApps once authenticated
- Switch between Devnet and Testnet using the network selector in the bottom-left corner
- FusionAuth OAuth Provider
- zkLogin address derivation via Enoki
- Sui balance display
- Ephemeral keypair generation
- ZK proof request preparation
- Wallet Standard registration
- Reactive state management
- Multi-network support with seamless switching between Devnet and Testnet
- Per-network authentication with automatic rollback on login failures
- MaxEpoch expiry requires manual re-login
For detailed limitations and TODOs, see Implementation Details.
- Follow the Development Guide
- Review the Architecture Decision Record
- Check Troubleshooting for common issues
- Built with WXT and React
- Sui Wallet Standard: @mysten/wallet-standard
- ZKLogin: @mysten/sui/zklogin
- State Management: Zustand
- Auth: oidc-client-ts + FusionAuth
- zkLogin Integration: Enoki by Mysten Labs