A voice-powered transcription desktop app with local and cloud speech-to-text support.
| Layer | Technology |
|---|---|
| Frontend | Svelte 5 (runes) + Vite |
| Desktop Framework | Tauri 2 |
| Backend | Rust |
| Audio Capture | cpal |
| Local Transcription | whisper-rs (whisper.cpp bindings) |
| Build Targets | NSIS (Windows), deb / AppImage (Linux) |
# Install frontend dependencies
npm install
# Run the full desktop app (Vite dev server + Tauri)
npx tauri dev
# Or run frontend only (no Rust backend)
npm run dev
# Production frontend build
npm run build
# Desktop installer (NSIS on Windows, deb/AppImage on Linux)
npx tauri build
cargo fmt --check --manifest-path src-tauri/Cargo.toml
cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings
cargo check --manifest-path src-tauri/Cargo.toml
QuillScribe uses Tauri's two-process model:
invoke() commands; backend pushes updates via Tauri events| Window | Purpose |
|---|---|
| Main (960x560) | Recording, transcription, history, and settings |
| Overlay (floating) | Transparent always-on-top recording timer |
| Module | Responsibility |
|---|---|
audio.rs |
Microphone capture, device enumeration, WAV encoding |
whisper.rs |
Local model management, cloud API calls, transcription |
commands.rs |
~40 IPC command handlers (the full API surface) |
config.rs |
JSON settings persistence |
output.rs |
Clipboard, simulated typing, paste-tool detection |
tray.rs |
System tray icon and context menu |
hotkey.rs |
Global keyboard shortcut registration |
sound.rs |
Notification sound playback |
window.rs |
Window management and overlay control |
statistics.rs |
Transcription history storage |
Models are downloaded on demand and cached locally. Available sizes range from Tiny (~75 MB) to Large, plus distilled variants for faster inference.
| Provider | Models |
|---|---|
| OpenAI | gpt-4o-transcribe, gpt-4o-mini-transcribe |
| Groq | whisper-large-v3-turbo, whisper-large-v3 |
API keys are configured in the settings dialog and validated before use.
6 light themes: White, Warm Gray, Soft Beige, Blue Gray, Warm Taupe, Soft Sage
6 dark themes: Dark Charcoal, Dark Blue, Dark Purple, Dark Forest, Dark Burgundy, Obsidian
Themes are applied via CSS custom properties and synchronized across both windows.
quillscribe-frontend/
├── src/
│ ├── App.svelte # Root component
│ ├── app.css # Global styles and CSS custom properties
│ ├── main.js # Main window entry
│ ├── overlay.js # Overlay window entry
│ └── lib/
│ ├── RecordPanel.svelte
│ ├── TranscriptionPanel.svelte
│ ├── HistoryPanel.svelte
│ ├── SettingsDialog.svelte
│ ├── Sidebar.svelte
│ ├── TitleBar.svelte
│ ├── RecordingOverlay.svelte
│ ├── Toast.svelte
│ ├── QuillIcon.svelte
│ ├── themes.js # Theme definitions
│ └── overlayStyles.js
├── src-tauri/
│ ├── Cargo.toml
│ ├── tauri.conf.json
│ └── src/ # Rust backend modules
├── public/ # Logos, favicon, icons
└── .github/workflows/ # CI and release pipelines
| Asset | Path |
|---|---|
| Logo (dark) | public/logo.svg |
| Logo (light) | public/logo-light.svg |
| Favicon | public/favicon.svg |