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
- ✅ 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.
- 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
# 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.biomeThis 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
- 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
- The wallet is automatically available to all dApps once authenticated
- FusionAuth OAuth Provider
- zkLogin address derivation via Enoki
- Sui balance display
- Ephemeral keypair generation
- ZK proof request preparation
- Wallet Standard registration
- Reactive state management
- MaxEpoch expiry requires manual re-login
- Network switching is not gracefully handled for different epochs
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