Cross-platform voice-to-text desktop application built with Tauri 2 (Rust + TypeScript/React).
- Node.js 18+
- Rust 1.77+
- Platform-specific dependencies (see Tauri prerequisites)
Use platform-specific commands (required for native features):
npm run dev:mac # macOS
npm run dev:windows # Windows
npm run dev:linux # LinuxNote: Do not use
npm run devdirectly—use the platform-specific commands above.
npm run build # Build frontend
npm run lint # ESLint
npm run check-types # TypeScript type checking
npm run test:webdriver # E2E smoke testssrc/
├── actions/ # Business logic orchestration
├── components/ # React components
├── hooks/ # Reusable React hooks
├── repos/ # Data access (local SQLite / cloud Firebase)
├── state/ # Zustand state slices
├── types/ # TypeScript types
└── utils/ # Pure utility functions
src-tauri/
└── src/
├── commands.rs # Tauri commands (TypeScript ↔ Rust bridge)
├── app.rs # Application setup
├── db/ # SQLite migrations and queries
├── domain/ # Rust domain models
├── platform/ # Platform-specific code (audio, keyboard, whisper)
└── system/ # System utilities (models, GPU, tray)
"Rust is the API, TypeScript is the Brain"
- All business logic lives in TypeScript
- Rust provides capabilities (audio recording, transcription, system APIs)
- Zustand is the single source of truth for state
| Variable | Description |
|---|---|
VITE_FLAVOR |
Environment: dev, prod, or emulators (default) |
VITE_USE_EMULATORS |
Connect to Firebase emulators |
VOQUILL_ENABLE_DEVTOOLS |
Open dev tools on startup |
VOQUILL_DESKTOP_PLATFORM |
Override platform detection |
Uses react-intl with auto-generated message IDs.
npm run i18n:extract # Extract messages to en.json
npm run i18n:sync # Sync to other locales- Use
<FormattedMessage defaultMessage="..." />in components - Run
npm run i18n:extractto updatesrc/i18n/locales/en.json - Run
npm run i18n:syncto propagate keys to other locales - Add translations to each locale file
# Install tauri-driver (one-time)
cargo install tauri-driver
# Run E2E tests
npm run test:webdriver