A cross-platform TOTP authenticator app built with Tauri 2, Svelte 5, and Rust. Runs on Windows, macOS, Linux, iOS, Android, and as a browser extension for Chrome, Firefox, and Edge.
otpauth:// URIsotpauth:// URIs (JSON, CSV, XML, plain text)npm install
# Start the Tauri dev server with hot reload
npm run tauri dev
# Build for production
npm run tauri build
Binaries will be in src-tauri/target/release/bundle/.
# Frontend unit tests
npm test
# Frontend tests with watch mode
npm run test:watch
# Rust tests
cd src-tauri && cargo test
# TypeScript type checking
npm run check
# E2E tests (requires a built app)
npm run test:e2e
ghost-auth/
├── src/ # Svelte frontend
│ ├── App.svelte # Main app shell
│ ├── app.css # Tailwind CSS theme tokens
│ └── lib/
│ ├── components/ # UI components (modals, screens, cards)
│ ├── stores/ # Reactive state (accounts, auth, theme, locale)
│ ├── utils/ # Helpers (QR scanning, otpauth parsing, error handling)
│ ├── i18n/ # Internationalization (79 locales)
│ └── assets/ # Icons and images
├── shared/ # Code shared between app and browser extension
│ ├── components/ # Shared UI (About, Modal, EditAccount, PIN, Toast)
│ ├── stores/ # Shared stores (toast)
│ └── utils/ # Shared helpers (otpauth, error, focus trap)
├── src-tauri/ # Rust backend
│ └── src/
│ ├── lib.rs # Tauri plugin registration and app setup
│ ├── commands.rs # Tauri command handlers
│ ├── totp.rs # TOTP generation (RFC 6238)
│ ├── storage.rs # Encrypted account storage (AES-256-GCM)
│ ├── keystore.rs # OS keychain integration (Windows, macOS, iOS, Android)
│ ├── pin.rs # PIN hashing (Argon2) and rate limiting
│ ├── backup.rs # Encrypted backup format
│ ├── import.rs # External app import parsing
│ ├── sync.rs # E2E sync protocol and merge logic
│ ├── sync_transport.rs # LAN direct sync (TCP)
│ ├── sync_ws.rs # WebSocket sync transport (browser extension)
│ ├── icloud.rs # iCloud sync (iOS/macOS)
│ └── crash_reporter.rs # Privacy-preserving crash reporting
├── extension/ # Browser extension (Chrome, Firefox, Edge)
│ ├── src/
│ │ ├── popup/ # Extension popup UI (Svelte)
│ │ ├── background/ # Service worker (auto-lock, QR scanning)
│ │ ├── content/ # Content script (QR region capture)
│ │ ├── core/ # Business logic (storage, crypto, sync, PIN)
│ │ └── lib/ # Extension-specific components and stores
│ └── manifests/ # Browser-specific manifest files
├── patches/ # Local Tauri plugin patches
├── docs/ # Additional documentation
├── e2e/ # Playwright E2E tests
└── package.json
Browser extension: The companion browser extension operates under a different security boundary — TOTP secrets must be handled in JavaScript since browser extensions cannot use native OS keystores. See extension/README.md for the extension's security model.
Contributions are welcome! See CONTRIBUTING.md for development setup, code style, and PR guidelines.
If you discover a security vulnerability, do not open a public issue. See SECURITY.md for responsible disclosure instructions.