cjpais/Handy
53.1
Adequate · 27 September 2026
39.1k
lines of production code
Rust
with TypeScript
4
measurements over time
What this system is
Handy is a cross-platform desktop application built with Tauri and Rust that provides local, offline-first speech-to-text transcription. It manages the lifecycle of GGUF-based AI models, including downloading, verifying, and switching between them, while capturing audio via a robust toolkit with voice activity detection and multi-channel support. The system processes input through configurable post-processing providers, such as Apple Intelligence or custom LLMs, and presents results via a persistent overlay with real-time transcription and history management.
How it got here
2025 — Initial scaffolding and core feature implementation
31 changes.
This period established the project's foundation through comprehensive scaffolding, dependency configuration, and documentation. It focused on building the core application shell, including a theme system, internationalization, and a multi-step onboarding flow. Significant effort was directed toward implementing backend infrastructure for audio management, model handling, and transcription, alongside native integrations for macOS and cross-platform audio processing.
2026 — Nix integration and reliability improvements
11 changes.
This period focused on integrating Handy into the Nix ecosystem through declarative modules and automated dependency hashing to ensure reproducible builds. Significant work was also dedicated to enhancing application reliability, including offline model catalog support, robust clipboard handling, and pluggable shortcut backends.
Features
Add footer with model selector and version display
A new footer component has been introduced to the application, providing users with a persistent bottom bar that displays the current application version and integrates a model selector alongside an update checker. The footer dynamically fetches the app version via Tauri's API, falling back to a default value if retrieval fails, and presents this information along with model selection controls in a styled layout.
src/components/footer · high confidence
Initial internationalization support with 26 languages and RTL handling
The application now supports 26 languages, including English, Simplified and Traditional Chinese, Spanish, French, German, Japanese, Korean, Vietnamese, Polish, Italian, Russian, Ukrainian, Portuguese, Czech, Turkish, Arabic, Hebrew, Swedish, Bulgarian, Dutch, Nepali, Hindi, Danish, Catalan, and Indonesian. This change introduces a new i18n infrastructure that auto-discovers translation files, syncs the user's preferred language from settings or system locale, and correctly handles Right-to-Left (RTL) text direction for Arabic and Hebrew.
src/i18n · high confidence
Introduce settings and OS detection hooks
New React hooks have been added to centralize application state and environment detection. The useSettings hook provides a unified interface for managing application settings, including audio device selection, post-processing configuration, and binding updates, while the useOsType hook detects the current operating system to enable platform-specific keyboard handling.
src/hooks · high confidence
Introduces Apple Intelligence integration on macOS
The application now supports Apple Intelligence as a post-processing provider on macOS. A new \apple\_intelligence.rs\ module bridges to Swift system APIs to check availability and process text with a system prompt, and the main library (\lib.rs\) conditionally loads this module on \aarch64\ Macs. This enables users to leverage the device's local AI capabilities for transcription refinement.
src-tauri/src · high confidence
Introduction of new model and settings state management stores
The application now uses dedicated Zustand stores (\modelStore.ts\ and \settingsStore.ts\) to manage core application state. The model store handles the lifecycle of AI models, including downloading, verifying, extracting, and selecting active models, while syncing progress and status with the backend. The settings store centralizes configuration management, providing a unified interface to load, update, and reset user preferences such as audio device selection, paste methods, theme, and post-processing options, ensuring platform-specific defaults are correctly applied.
src/stores · high confidence
New General Settings page with model and audio configuration
A new General Settings page has been introduced, consolidating configuration options into distinct groups. Users can now manage model-specific settings, including language selection and English translation toggles, which are dynamically shown based on the capabilities of the currently selected model. The audio section provides controls for microphone and output device selection, input channel configuration, volume adjustment, and audio feedback options, alongside shortcut management for transcription and cancellation actions.
src/components/settings/general · high confidence
New LLM-based post-processing configuration interface
The application now includes a dedicated settings page for configuring LLM-based post-processing. Users can select an API provider (including Apple Intelligence or custom endpoints), manage API keys and base URLs, and choose or create specific models. The interface also allows users to manage custom post-processing prompts, enabling them to create, select, and edit text templates that are sent to the selected model for processing.
src/components/settings/post-processing · high confidence
New UI components for configuring post-processing providers
This change introduces a new set of React components in the PostProcessingSettingsApi directory to manage post-processing configuration. It adds an ApiKeyField for secure API key input, a BaseUrlField for custom provider endpoints, a ProviderSelect to switch between available providers (including Apple Intelligence), and a ModelSelect that supports both selecting from a list and creating custom model names. These components are backed by a new hook, usePostProcessProviderState, which handles the state logic for fetching model lists, updating settings, and managing provider-specific constraints like Apple Intelligence availability checks.
src/components/settings/PostProcessingSettingsApi · high confidence
New Voice Activity Detection (VAD) toolkit with multiple backend support
The audio toolkit now includes a modular VAD system in \src-tauri/src/audio\_toolkit/vad\ that supports multiple detection backends, specifically an experimental Earshot VAD (pure Rust, 256-sample frames) and a Silero VAD (30ms frames). A \SmoothedVad\ wrapper provides hysteresis logic to prevent audio tail loss by managing pre-roll buffers, onset detection, and hangover tails, ensuring continuous speech capture. The module defines a common \VoiceActivityDetector\ trait and timing constants (prefill, hangover, onset) to standardize how audio frames are processed and emitted.
_src-tauri/src/audio\toolkit/vad · high confidence
New app shell, theme system, and release notes viewer
The application now uses a new main entry point (App.tsx) that manages onboarding, settings navigation, and error handling via toast notifications. A new theme system (theme.css) introduces Light, Dark, and System appearance modes with shared color tokens, while custom scrollbars are styled for macOS and other platforms. A new "What's New" feature (WhatsNewGate, MarkdownContent) displays release notes in a modal after updates, using a safe, sanitized Markdown renderer. The app also initializes i18n, applies the stored theme synchronously to prevent flash, and sets up platform-specific data attributes for CSS scoping.
src · high confidence
New audio, model, and history management infrastructure
This change introduces a new set of backend managers in src-tauri/src/managers to handle core application logic. The AudioManager now implements cross-platform system mute/unmute capabilities (using Windows Core Audio, Linux PipeWire/PulseAudio/ALSA, and macOS osascript) and integrates Voice Activity Detection (VAD) policies. The ModelManager provides a unified interface for discovering, downloading, and verifying GGUF-based speech models, including SHA-256 integrity checks and resumable HTTP downloads. Additionally, a new HistoryManager manages transcription records using SQLite with rusqlite\_migration for schema versioning, and a GGUF metadata reader allows pre-download capability probing.
src-tauri/src/managers · high confidence
New command layer for audio, history, models, and transcription management
The application introduces a structured Tauri command interface in \src-tauri/src/commands\ to expose core capabilities to the frontend. This includes audio device enumeration and Windows microphone permission checks, a persistent history system with pagination, deletion, and retry logic, and a model management system that supports downloading, switching, and unloading models with configurable timeouts. Additionally, it adds controls for recording retention periods and custom audio feedback sounds.
src-tauri/src/commands · high confidence
New debug settings panel with live logging and diagnostic tools
A new debug settings section has been added to the application, providing users with advanced configuration and troubleshooting capabilities. This includes a live log viewer that streams application logs in real-time with configurable log levels (Error through Trace), and a keyboard diagnostic tool for macOS that detects Secure Input issues and stuck modifiers. Users can also adjust the word correction threshold, paste delay, recording buffer size, and hold threshold for push-to-talk behavior. Additional features include a toggle for reliable paste (macOS/Windows), a selector for keyboard implementation (Tauri vs. Handy Keys), and preview tools for onboarding steps and release notes.
src/components/settings/debug · high confidence
New icon components for transcription and cancellation actions
The application now includes dedicated SVG icon components for key user actions: MicrophoneIcon, TranscriptionIcon, CancelIcon, and ResetIcon. These components are exported via the central index file, making them available for use in the UI to represent recording, transcription, cancellation, and reset functionalities respectively.
src/components/icons · high confidence
New models management page with filtering and status tracking
A new Models Settings page has been added to the application, allowing users to browse, search, and manage available AI models. The interface includes filters for streaming capability, translation support, and specific languages, along with real-time status indicators for downloading, verifying, and extracting models. Users can now select, download, cancel, or delete models directly from this settings view, with safeguards to prevent deleting the currently active model.
src/components/settings/models · high confidence
New onboarding flow with permission checks and model selection
The onboarding experience has been restructured into a multi-step process. First, the app now requests necessary system permissions (accessibility and microphone on macOS, microphone on Windows) before proceeding. Second, users are presented with a curated list of models to download or select, featuring 'top picks' and the ability to show all available options. The model cards display translated names, descriptions, language support, and download status, with support for canceling downloads and viewing progress.
src/components/onboarding · high confidence
New recording overlay with live transcription and theme support
A new recording overlay has been introduced, providing a persistent UI for live audio capture and transcription. The overlay features a compact pill that expands into a live text panel, displaying real-time transcribed text with auto-scrolling and history support. It includes a waveform visualizer for microphone levels and supports both top and bottom screen placements. The component fully respects the application's light/dark theme settings and handles language direction (RTL/LTR) for proper text alignment.
src/overlay · high confidence
New settings components for transcription acceleration, audio input, and shortcut management
The settings interface now includes dedicated UI components for configuring hardware acceleration (CPU, CUDA, DirectML, ROCm) and selecting specific GPU devices for transcription, as well as managing microphone input including channel selection for multi-channel interfaces and fallback microphones for clamshell mode. Users can also customize global and handy-keys shortcuts with a new recording interface, manage custom words, and adjust audio feedback and auto-submit behaviors.
src/components/settings · high confidence
New settings sidebar and macOS-specific UI components
The settings interface has been restructured into a new Sidebar component that organizes configuration into distinct sections including General, History, Models, Advanced, Post-Processing, Debug, and About, with Post-Processing and Debug sections conditionally enabled based on user settings. This change introduces several new components: a SecureInputWarning banner that detects and alerts users when macOS Secure Input interferes with keyboard shortcuts, an AccessibilityPermissions component for managing macOS accessibility permissions, and an ErrorBoundary component to prevent UI crashes from blanking the entire application.
src/components · high confidence
New unified UI component library
The application now includes a comprehensive set of reusable UI components in src/components/ui, introducing a consistent design language across the interface. This update adds foundational elements such as Alert, Badge, Button, Dialog, Dropdown, Input, Textarea, and Select, alongside specialized controls like Slider, ToggleSwitch, and ResetButton. It also introduces layout and utility components including SettingContainer, SettingsGroup, TextDisplay, PathDisplay, and Tooltip, along with an AudioPlayer component for media handling. These components provide standardized styling, accessibility features, and interaction patterns for settings and general UI usage.
src/components/ui · high confidence
New utility modules for formatting, keyboard handling, theming, and RTL support
This change introduces several new utility modules in src/lib/utils. The format.ts module provides a function to display model sizes in MB or GB with appropriate formatting. The keyboard.ts module (along with its test file) implements cross-platform keyboard event handling, including OS-specific modifier key naming (e.g., Command vs Super) and consistent display names for compound keys like Caps Lock. The theme.ts module adds user-selectable light/dark/system appearance options, persisting the choice to localStorage and AppSettings to prevent theme flashing on boot. The rtl.ts module handles right-to-left language support by updating the document's dir and lang attributes based on the selected language. Finally, modelTranslation.ts provides utilities to retrieve translated model names and descriptions from the i18n system.
src/lib/utils · high confidence
New validation scripts and CI tooling for model catalog, translations, and Nix dependencies
Added several new scripts to improve development workflow and data integrity: \check-model-language-coverage.ts\ ensures model language codes map to exactly one frontend intent (including a specific check for Norwegian variants); \check-nix-deps.ts\ replaces manual hash management with \bun2nix\ to keep Nix dependencies in sync with \bun.lock\; \check-translations.ts\ validates that all translation files match the English reference keys; \stage-transcribe-libs.sh\ handles staging of transcribe-cpp dynamic backend libraries for CI; and \gen\_catalog.py\ and \mirror\_models.py\ manage the model catalog generation and mirroring to S3-compatible storage with hash verification.
scripts · high confidence
NixOS and Home Manager integration for Handy
Handy is now available as a declarative NixOS module and a Home Manager module. The NixOS module (nix/module.nix) installs the package and configures a udev rule to grant the 'input' group access to /dev/uinput, which is required for virtual input device creation. The Home Manager module (nix/hm-module.nix) provides a systemd user service to automatically start Handy upon graphical session login.
nix · high confidence
Offline model catalog with mirror fallbacks for reliable downloads
The application now includes a bundled, offline model catalog (\catalog.json\) that is compiled directly into the binary, ensuring users can discover and select models without requiring network access. This catalog lists specific models (such as Parakeet, Nemotron, and Whisper variants) with their capabilities, scores, and file hashes. To improve download reliability, the system supports a mirror fallback mechanism: if the primary Hugging Face download fails, the application automatically attempts to fetch the model files from the configured mirror (\https://blob.handy.computer\), verifying integrity using the SHA256 hashes stored in the catalog.
src-tauri/src/catalog · high confidence
Portable installation mode added to Windows installer
The Windows installer now supports a portable installation mode, allowing users to choose between a standard installation and a portable setup that does not write to system directories or the registry. This feature is implemented via a new installer script that includes a dedicated UI page for selecting the install type, while preserving legacy portable markers during updates and requiring a specific magic string to prevent false positives on Scoop installs.
src-tauri/nsis · high confidence
Behavioural changes
5 commits (0 fixes) modifying src-tauri/icons
A change to existing behaviour in src-tauri/icons — 5 commits, 51 files.
src-tauri/icons · medium confidence · unverified
Add scripts to normalize Bun's isolated install output for reproducible builds
New TypeScript scripts in \.nix/scripts\ ensure that \bun install --linker=isolated\ produces a bit-reproducible \node\_modules\ tree, which is required for Nix fixed-output derivations. The \normalize-install.ts\ entry point runs three sub-scripts: \canonicalize-node-modules.ts\ rebuilds the \.bun/node\_modules\ symlink tree in lexicographic order to fix non-deterministic creation order; \normalize-bun-binaries.ts\ similarly sorts \.bin\ symlinks within each package's private directory; and \heal-peer-dep-bins.ts\ fixes a timing race in Bun's installer that causes missing \.bin\ symlinks for circular peer dependencies by recreating the intended links. Together, these changes eliminate host-specific drift in the dependency tree.
.nix/scripts · high confidence
Audio toolkit restructure with language-aware filler removal and custom word fixes
The audio toolkit module has been reorganized into dedicated source files, introducing language-aware filler word removal that uses high-confidence text-based language detection to apply language-specific rules. Custom word correction now supports multi-word phrases via n-gram matching and correctly preserves ampersands in user-defined terms. Additionally, the audio subsystem defaults to the ALSA host on Linux for microphone access.
_src-tauri/src/audio\toolkit · high confidence
Audio toolkit restructured with multi-channel support and improved recording reliability
The audio toolkit has been reorganized into a new module structure, introducing a dedicated device listing system that identifies default input and output devices. A key behavioral change is the addition of input channel selection for multi-channel audio interfaces, allowing users to choose specific channels rather than always averaging them. Recording reliability is improved through a robust ring-buffer architecture that prevents audio loss during pauses and ensures recordings are saved completely before transcription. The system now includes a frame resampler that resets its state between recordings to prevent audio crosstalk, and it handles microphone initialization failures gracefully without aborting the entire application.
_src-tauri/src/audio\toolkit/audio · high confidence
More reliable clipboard paste on macOS and Windows
The clipboard paste mechanism has been replaced with a receipt-sequenced approach that waits for the target application to actually read the pasted content before restoring the previous clipboard. On macOS, this uses a promise-based pasteboard owner, and on Windows, delayed-render clipboard formats. This prevents the previous clipboard from being restored prematurely (e.g., if the target app is slow to read), which previously caused the old content to be pasted instead. The change also ensures that if the user copies something else during the process, their new content is preserved.
_src-tauri/src/paste\tx · high confidence
Native library bundling and macOS microphone entitlements
The macOS build now includes an Entitlements.plist granting microphone access and an Info.plist with the required usage description, ensuring the app can capture audio without permission prompts. The build process (build.rs) and Tauri configuration have been updated to bundle native shared libraries (transcribe-cpp, ONNX Runtime, and VC++ runtime DLLs) into a transcribe-libs directory, which is then packaged alongside the executable on Windows and installed into app-private paths on Linux, resolving dependency issues on systems without these libraries pre-installed.
src-tauri · high confidence
New History Settings UI with Linux audio playback and clipboard fixes
The History tab now features a dedicated settings component that supports infinite scrolling for browsing transcription history and real-time updates as new entries are added. A key behavioral change addresses audio playback on Linux by reading files directly into blobs, ensuring recordings play correctly in that environment. The interface also includes a button to open the recordings folder and ensures that copy-to-clipboard actions only show success feedback after the write operation completes, improving reliability.
src/components/settings/history · high confidence
New model selector UI with download progress and status indicators
The model selection interface has been replaced with a new component suite that provides real-time feedback during model lifecycle events. Users now see a status button indicating whether a model is ready, loading, downloading, verifying, extracting, or in error, along with a dropdown to select from available models. The UI includes a progress bar that displays download speed and percentage, and automatically switches to the newly downloaded model once the process completes, provided no transcription is active. This change also introduces internationalization support for model names and descriptions within the selector.
src/components/model-selector · high confidence
Portable update checker now links to the correct installer
The update checker component now detects when the application is running in portable mode and, instead of attempting an in-place self-update (which fails on Windows), it displays a dialog that deep-links directly to the correct NSIS installer for the user's specific platform and architecture. This logic is implemented in the new \portableInstaller.ts\ module, which resolves the installer URL from the update manifest, and includes a test suite to verify correct URL resolution and fallback behavior.
src/components/update-checker · high confidence
Shortcut handling now supports a pluggable backend architecture
The shortcut management system has been refactored to support multiple keyboard input backends, allowing users to switch between Tauri's built-in global-shortcut plugin and the more granular handy-keys library via a new settings option. This change introduces a unified handler that routes events to the active backend, ensuring consistent behavior for actions like transcription and cancel bindings regardless of the underlying implementation. If the handy-keys backend fails to initialize, the system automatically falls back to the Tauri implementation and updates the settings to prevent repeated failures on subsequent launches.
src-tauri/src/shortcut · high confidence
Standardized language selection and recognition logic
The application now uses a centralized language constant file to manage a comprehensive list of supported languages, including explicit options for Simplified and Traditional Chinese. This change refines the user experience by hiding the generic 'Chinese' option from the selection picker to avoid ambiguity, while ensuring that language codes are correctly normalized (e.g., mapping Norwegian Bokmål 'nb' to 'no' and Filipino 'fil' to 'tl') for accurate backend recognition.
src/lib/constants · high confidence
Updated Russian speech model vocabulary
The application now uses a new vocabulary file for the Russian speech recognition model, replacing the previous version. This change ensures the model has the correct token mappings for Russian characters and common phrases, which may improve recognition accuracy for Russian language inputs.
src-tauri/resources/models · high confidence
Fixes
Automated Nix dependency hashing via bun2nix
The Nix build system now uses \bun2nix\ to automatically generate and manage SHA-512 hashes for Bun package dependencies. This replaces the previous manual hash management process, introducing new \bun-lock-hash\ and \bun.nix\ files to ensure reproducible builds without requiring developers to manually calculate or update hashes when dependencies change.
.nix · high confidence
Fix compatibility with older Safari versions by shimming Object.hasOwn
The application now installs a compatibility shim for \Object.hasOwn\ in older browsers (specifically Safari versions prior to 15.4) where this method is unavailable. This change prevents potential runtime errors in the frontend dependencies, such as \react-markdown\, ensuring that the 'What's New' feature and other UI components render correctly without blanking out settings or crashing on legacy browsers.
src/lib · high confidence
Test coverage
Added Playwright E2E tests for app startup and structure
Added a new Playwright end-to-end test suite (tests/app.spec.ts) that verifies the development server responds with a 200 status code and that the root page contains basic HTML structure elements.
tests · high confidence
Dependencies
Initial dependency manifests for Handy v0.9.7
This change introduces the foundational dependency configuration for the Handy application, establishing the project at version 0.9.7. It adds the frontend \package.json\ defining the React, Vite, and Tauri plugin ecosystem, alongside the backend \Cargo.toml\ and \Cargo.lock\ which specify the Rust dependencies for audio processing, speech recognition (transcribe-rs/cpp), and system integration. This commit sets the baseline library versions for the application's core functionality.
(dependencies) · high confidence
Housekeeping
Initial project scaffolding and documentation
The repository has been initialized with core configuration files including \.prettierignore\ and \.prettierrc\ to enforce code formatting standards, and a \bun.lock\ file to manage frontend dependencies. Comprehensive documentation has been added, including \README.md\ for installation and usage, \BUILD.md\ for platform-specific build instructions, \CONTRIBUTING.md\ for development guidelines, and \AGENTS.md\ to provide context for AI coding assistants. A \LICENSE\ file (MIT) and \CLAUDE.md\ (pointing to AGENTS.md) are also included to establish the project's open-source terms and development workflow.
(repo-wide) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 38 → 53 (+14.9)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 82 → 81 (-1.1)
- Architecture 69 → 98 (+28.5)
- Maturity 67 → 65 (-1.8)
- Readiness 19 → 45 (+25.7)
- Security 40 → 55 (+15.3)
- Event Sourcing 100 (new)
- Accessibility 52 (new)
Resolved (95)
- Boundary-crossing change coupling: AdvancedSettings.tsx ↔ settingsStore.ts (src/components/settings/advanced/AdvancedSettings.tsx)
- Boundary-crossing change coupling: OutputDeviceSelector.tsx ↔ useSettings.ts (src/components/settings/OutputDeviceSelector.tsx)
- Boundary-crossing change coupling: ShowOverlay.tsx ↔ useSettings.ts (src/components/settings/ShowOverlay.tsx)
- Boundary-crossing change coupling: index.ts ↔ useSettings.ts (src/components/settings/index.ts)
- Change coupling: App.tsx ↔ Footer.tsx (src/App.tsx)
- Change coupling: App.tsx ↔ Onboarding.tsx (src/App.tsx)
- Change coupling: MicrophoneSelector.tsx ↔ OutputDeviceSelector.tsx (src/components/settings/MicrophoneSelector.tsx)
- Change coupling: ModelDropdown.tsx ↔ ModelSelector.tsx (src/components/model-selector/ModelDropdown.tsx)
- Dimension evaluation failed
- High CVE: [GHSA redacted] (bun.lock)
- High CVE: [GHSA redacted] (bun.lock)
- High CVE: [GHSA redacted] (bun.lock)
- High CVE: [GHSA redacted] (bun.lock)
- High CVE: [GHSA redacted] (bun.lock)
- High CVE: [GHSA redacted] (bun.lock)
- High CVE: [GHSA redacted] (src-tauri/Cargo.lock)
- High CVE: [GHSA redacted] (src-tauri/Cargo.lock)
- High CVE: [GHSA redacted] (bun.lock)
- High CVE: [GHSA redacted] (bun.lock)
- High CVE: [GHSA redacted] (src-tauri/Cargo.lock)
- …and 75 more
New (312)
- AccessibilityOnboarding.AccessibilityOnboarding (cognitive 53) (src/components/onboarding/AccessibilityOnboarding.tsx)
- AccessibilityOnboarding.AccessibilityOnboarding (cyclomatic 59) (src/components/onboarding/AccessibilityOnboarding.tsx)
- App.App (cognitive 40) (src/App.tsx)
- App.App (cyclomatic 31) (src/App.tsx)
- AudioPlayer.AudioPlayer (cognitive 45) (src/components/ui/AudioPlayer.tsx)
- AudioPlayer.AudioPlayer (cyclomatic 40) (src/components/ui/AudioPlayer.tsx)
- AudioRecorder::get_preferred_config (cognitive 17) (src-tauri/src/audio_toolkit/audio/recorder.rs)
- AudioRecorder::open (cognitive 19) (src-tauri/src/audio_toolkit/audio/recorder.rs)
- AudioRecorder::open (cyclomatic 19) (src-tauri/src/audio_toolkit/audio/recorder.rs)
- AudioRecordingManager::stop_recording (cognitive 28) (src-tauri/src/managers/audio.rs)
- CI installs an unverified third-party binary (.github/workflows/build.yml)
- Change coupling: mod.rs ↔ settingsStore.ts (src-tauri/src/shortcut/mod.rs)
- Change coupling: mod.rs ↔ useSettings.ts (src-tauri/src/shortcut/mod.rs)
- Change coupling: settings.rs ↔ DebugSettings.tsx (src-tauri/src/settings.rs)
- Change-coupling hub: lib.rs → DebugSettings.tsx, HistorySettings.tsx, useSettings.ts, settingsStore.ts (src-tauri/src/lib.rs)
- ClassTooLong: AudioRecordingManager (src-tauri/src/managers/audio.rs)
- ClassTooLong: ModelManager (src-tauri/src/managers/model.rs)
- ClassTooLong: TranscriptionManager (src-tauri/src/managers/transcription.rs)
- CoordinatorState::on_input (cognitive 24) (src-tauri/src/transcription_coordinator.rs)
- CoordinatorState::on_input (cyclomatic 21) (src-tauri/src/transcription_coordinator.rs)
- …and 292 more
Changes since last survey
- 70 commits — 39 feature/other, 31 fixes
By area
- src-tauri/src — 29 commits
- (root) — 18 commits
- src/i18n — 10 commits
- src-tauri/Cargo.lock — 4 commits
- src/bindings.ts — 2 commits
- src/components — 2 commits
- (repo) — 1 commit
- .github/workflows — 1 commit
- src/App.css — 1 commit
- src/App.tsx — 1 commit
- src/lib — 1 commit
Notable commits
- fix: fix 'no' not showing up + add ci so shouldnt happen again (#2001)
- fix: fix bindings
- fix: fix nix build
- fix: fix overlay with text scaling on windows (#2059)
- fix: fix win ci
- fix: fix(audio): skip level meter and resampler while idle in always-on mode (#1873)
- fix: fix(custom-words): allow multi-word phrases (#1406)
- fix: fix(history): show copy success only after clipboard write (#2011)
- fix: fix(i18n): correct Turkish translation semantics (#1907)
- fix: fix(i18n): make the Turkish translation internally consistent (#1881)
- fix: fix(linux): avoid blocking on external paste scripts (#1957)
- fix: fix(linux): clear stale modifier latch after xdotool type (#1817) (#1892)
- fix: fix(linux): dispatch paste methods before touching Enigo (#1756)
- fix: fix(overlay): restore Wayland overlay on Tauri 2.11.5 (Linux) (#1700)
- fix: fix(portable): keep Hugging Face models in Data (#1908)
- fix: fix(shortcut): keep toggle parity when presses arrive mid-pipeline (#1910)
- fix: fix(shortcut): reject unknown reset binding IDs (#2033)
- fix: fix(theme): appearance setting now reaches the overlay + macOS title bar (#1659)
- fix: fix(tray): stop racing tray rebuilds on recording start/stop
- fix: fix: horizontal overflow in onboarding views (#2050)
- …and 50 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
cjpais/Handy was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 27 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 8f9cf53cd1410cda26beea39ff802ac306e39585 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-7c1cb6328e11.