Commit graph

85 commits

Author SHA1 Message Date
CJ Pais
b123c1e5c0
fix crash on old cpus (#1176)
* fix crash on old cpu

* fix

* disable whisper extensions
2026-04-02 08:20:28 +08:00
Evgeny Khudoba
892658ee89
fix(nix): remove onnxruntime overlay, use nixpkgs native package (#1149) 2026-03-31 07:39:10 +08:00
Collin Stevens
b710ff27c9
docs: add feature freeze notice to CONTRIBUTING.md and fix typo in PR template (#1175)
Add a visible feature freeze section near the top of CONTRIBUTING.md
so contributors see it before starting work. Fix "GATEHRED" typo in
the PR template.
2026-03-28 12:30:54 +08:00
Viren Mohindra
cd3ec3ab8d
fix(ci): use sign-binaries: true in main-build.yml (#1094)
sign-binaries: false passes empty strings for TAURI_SIGNING_PRIVATE_KEY
and APPLE_CERTIFICATE, but Tauri treats a set-but-empty env var as a
signing attempt, causing all builds to fail. Use sign-binaries: true to
match pr-test-build.yml — secrets are already configured in the repo.
2026-03-19 15:16:34 +08:00
CJ Pais
a3015026a0
whisper-rs 0.16.0 and ort.rc12 (#1041)
* test build for 0.16.0

* macos 10.15?

* format

* shorter dir for build on windows?

* Update build.yml

* move

* Update build.yml

* long path support

* clang

* try

* try

* move to ort rc12

* use ms prebuilt?

* use lower version for 1.23.1

* download my prebuilt

* Update build.yml

* Update build.yml

* fix?

* fix(nix): use dynamic linking for ort-sys 2.0.0-rc.12

ort-sys rc.12 removed pkg-config support; without ORT_PREFER_DYNAMIC_LINK
it defaults to static linking against ORT_LIB_LOCATION, which fails
because nixpkgs only provides shared libraries (.so).

* fix(nix): override onnxruntime to 1.24.2 for ort-sys rc.12 compatibility

ort 2.0.0-rc.12 enables API v24 by default, but nixpkgs only ships
onnxruntime 1.23.2 (API v23), causing a runtime panic on model load.

Use Microsoft's prebuilt binaries for onnxruntime 1.24.2 via overlay,
patched with autoPatchelfHook for NixOS compatibility.

This overlay should be removed once nixpkgs merges onnxruntime ≥ 1.24:
https://github.com/NixOS/nixpkgs/pull/499389

* updated deps for whisper

* fix(nix): sync devShell with packages for ort-sys rc.12 compatibility

- Extract shared definitions (commonNativeDeps, gstPlugins, commonEnv,
  onnxruntimeOverlay) to avoid duplication between packages and devShells
- Add onnxruntime 1.24.2 overlay to devShell (was only in packages)
- Add BINDGEN_EXTRA_CLANG_ARGS to devShell so bindgen can find stdio.h
  and generate correct vulkan bindings for whisper-rs-sys
- Add ORT_LIB_LOCATION and ORT_PREFER_DYNAMIC_LINK to devShell
- Replace libappindicator with libayatana-appindicator in devShell
- Add onnxruntime and vulkan-loader to devShell LD_LIBRARY_PATH

* fix missing lib in the handy blob dl

* scope lib verification

* dont run bun2nix on windows

---------

Co-authored-by: Evgeny <evgeny.khudoba@yandex.ru>
2026-03-19 15:00:51 +08:00
Viren Mohindra
c5ec92b310
fix(ci): grant contents: write so build.yml reusable workflow can start (#1092) 2026-03-19 14:43:38 +08:00
Viren Mohindra
e3c9f5814f
ci: run full build and quality checks on push to main (#1091)
* ci: add full build and quality checks on push to main

Adds a new main-build.yml workflow that runs the full 7-platform build
matrix on every push to main, uploading artifacts for 30 days. Also
adds push-to-main triggers to code-quality, test, and nix-check
workflows. The nix full build now always runs on main pushes (not just
when nix packaging files change), catching the expensive breakage that
currently requires manual verification before each release.

* ci: fix permissions and clarify nix full-build intent

- narrow contents: write to contents: read in main-build.yml — no
  release assets are uploaded here so write access is unnecessary
- update nix-check comment to reflect that the full build always runs
  on push to main (not just when nix files change), matching intent
2026-03-19 14:39:09 +08:00
Viren Mohindra
e1a484f70f
ci: reduce PR check time from ~30 min to ~1 min (#1073)
* ci: reduce PR check time from ~30 min to ~1 min

- merge lint + prettier into single code-quality workflow
- add concurrency groups to cancel stale runs on rapid pushes
- add path filters so irrelevant changes skip checks
- make full nix build opt-in via "nix" label (eval-only by default)
- add nix store caching via magic-nix-cache-action
- cache trusted-signing-cli binary on windows builds
- upgrade setup-bun from v1 to v2

* ci: add workflow path filters and expand nix build triggers

- add .github/workflows/** to path filters on code-quality and nix-check
  so CI runs when workflow files themselves change
- include tauri.conf.json and build.rs in nix full-build diff check since
  these can break nix sandbox builds independently of cargo builds
2026-03-18 17:25:56 +08:00
Evgeny Khudoba
7056edce28
fix(nix): replace manual hash management with bun2nix (#1021)
* fix(nix): replace manual hash management with bun2nix

Eliminate the recurring problem of Nix build hashes breaking whenever
bun dependencies change or the bun version in nixpkgs updates.

Changes:
- Add bun2nix flake input (pinned to v2.0.1) for per-package fetchurl
  expressions from bun.lock, replacing the single FOD hash approach
- Use allowBuiltinFetchGit for cargo git dependencies, removing manual
  outputHashes that required updates on every git dep change
- Add scripts/check-nix-deps.ts (cross-platform, runs via bun) that
  auto-regenerates .nix/bun.nix when bun.lock changes, triggered by
  the postinstall hook in package.json
- Update CI workflow to verify bun.nix is in sync and evaluate flake
- Remove scripts/update-nix-hashes.sh (no longer needed)

* style: format check-nix-deps.ts with prettier

* ci(nix): make nix-check job a required check

* fix(nix): address review feedback

- Fix bun2nix input pinning: use path syntax (github:owner/repo/tag)
  instead of ?tag= query parameter so flake.lock records the ref
  and `nix flake update` respects the pin
- Make check-nix-deps.ts exit with 0 on bun2nix failure so that
  `bun install` is not blocked for non-Nix developers (CI validates
  bun.nix independently)
- Fix stale reference to check-nix-deps.sh in flake.nix comment

* ci(nix): add full nix build step to CI workflow

Add `nix build .#handy -L --show-trace` after flake evaluation to
catch runtime build errors (broken dependencies, sandbox issues,
compilation failures) that flake eval alone cannot detect.

* fix(nix): update bun2nix pin from 2.0.1 to 2.0.8

bun2nix 2.0.1 has a bug in cache-entry-creator that causes
"ln: failed to create symbolic link '/p': Permission denied"
during the build. Version 2.0.8 fixes this.
2026-03-13 18:45:46 +08:00
Evgeny Khudoba
5dbe99bf00
fix(nix): Fixed nix hash for dependencies, added CI job and script for updating dependencies versions (#948) 2026-03-12 18:39:39 +08:00
Dariel Dato-on
fc05e4aee9
fix: simplify Bun setup for Windows ARM64 (#965)
oven-sh/setup-bun@v2 (v2.1.1+) now automatically falls back ARM64 to
x64 with AVX2 disabled on Windows, making the manual baseline download
workaround unnecessary.

Ref: https://github.com/oven-sh/setup-bun/pull/131
Ref: https://github.com/oven-sh/setup-bun/issues/130

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 21:44:19 +08:00
CJ Pais
4e4bc613ed please add logs when submitting bugs 2026-02-24 17:58:23 +08:00
CJ Pais
a5c3f88ace
Update PR template with feature freeze notice
Added a warning about feature freeze and prioritization of bug fixes.
2026-02-20 23:42:48 +08:00
CJ Pais
43bc2373ef
Revert "feat: add portable ZIP archives for Windows releases (#753)" (#788)
This reverts commit 6f3fd9babc.
2026-02-11 21:13:32 +08:00
Shehab Tarek
6f3fd9babc
feat: add portable ZIP archives for Windows releases (#753)
* feat: add portable ZIP archives for Windows releases

Add portable (no-install) ZIP builds for Windows x64 and ARM64.
After the existing Tauri build step, a new step packages Handy.exe
and its resources/ directory into a zip archive that users can
extract and run directly without an installer.

The portable ZIPs are uploaded to GitHub Releases alongside the
existing NSIS/MSI installers, and included in CI artifact uploads.

Closes #153

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: use -not instead of ! for PowerShell compatibility

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 10:35:43 +08:00
Sami Ansari
c34e7d584b
fix(nix): build from source instead of wrapping AppImage (#778)
* fix(nix): build from source instead of wrapping AppImage (#701)

Replace the AppImage-based Nix package with a native from-source build
using cargo-tauri.hook + rustPlatform.buildRustPackage. This eliminates
the recurring hash mismatch failures when releases update the binary.

- Build frontend (bun) and backend (cargo tauri) from source
- Vendor JS deps as a fixed-output derivation
- Patch libappindicator-sys for Nix store path
- Patch ferrous-opencc to skip cbindgen (upstream removed in v0.3.1+)
- Wrap binary with WEBKIT_DISABLE_DMABUF_RENDERER and LD_LIBRARY_PATH
- Delete update-flake-hash.yml workflow (no longer needed)
- devShell unchanged

* add support for arm64

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-11 08:47:39 +08:00
Martin Kleine
647ccab7f8
fix(ci): install gtk-layer-shell runtime package for Ubuntu builds (#752)
* fix(ci): install gtk-layer-shell runtime package for Ubuntu builds

* docs: update runtime dependency table formatting.

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-10 09:31:18 +08:00
Viren Mohindra
ef24cfefda
feat: add models settings page with filtering and management (#478)
* feat: add models settings page with filtering and management

- add dedicated models settings page in sidebar
- reuse ModelCard component from onboarding for consistent UI
- add filter buttons for all/multi-language/translation models
- add model deletion with native confirmation dialog (tauri-plugin-dialog)
- consolidate model event listeners into useModels hook (Zustand store)
- remove duplicate event listeners from ModelSelector, LanguageSelector, TranslateToEnglish
- gate AccessibilityPermissions to macOS only
- add is_recommended field to model registry for featured models
- remove unused get_recommended_first_model command
- add translations for all 9 supported languages

* feat: add language filter to models settings page

adds a searchable language dropdown filter to the models page that lets users filter models by language support. when a non-english language is selected, models that don't support multiple languages (like parakeet) are hidden.

- add searchable language dropdown (right-aligned in filter row)
- filter models using supports_language_selection capability
- add allLanguages translation key to all 10 locales

* feat: add translation consistency checker script

- add scripts/check-translations.cjs to validate all language files
- script dynamically discovers languages from directory structure
- checks that all languages have same keys as english reference
- detects missing and extra keys in each language
- add check:translations npm script
- integrate into github actions lint workflow
- validates translations on every pull request

* fix: update imports and add missing translations after rebase

- replace useModels hook with useModelStore in components
- add permission error keys to all languages
- add model settings keys to cs and tr (new languages from main)

* fix: translate english placeholders in cs and tr locale files

* refactor: simplify model dropdown and migrate store to immer

- model dropdown now only shows downloaded models (no download/delete)
- convert store to immer with record types for immutability
- remove unused translation keys (welcome, downloadPrompt, etc.)
- add missing moonshine-base model fields
- sync translations after rebase

* fix: add download cancellation support and ui improvements

- add full download cancellation with Arc<AtomicBool> flags in rust backend
- add progress event throttling (100ms) to prevent ui freeze
- add cancel button to model card in settings page
- add model-deleted event listener to refresh dropdown after deletion
- remove pink background from recommended models in settings (keep badge only)
- add cancel/cancelDownload translation keys to all 14 languages

* fix: remove duplicate language/translate settings from general and advanced

settings are now only in ModelSettingsCard, not duplicated in their old locations

* fix: prevent model dropdown from being clipped by window edge

* add languages explicitly, clean up some ui

* fix: clear bottom progress bar when download is cancelled

The ModelSelector component maintains its own local state for download
progress. When a download was cancelled, the Rust backend would update
its state but never emitted an event to notify the frontend. This caused
the bottom progress bar to remain stuck showing "Downloading X%".

Added model-download-cancelled event emission in Rust and corresponding
listener in ModelSelector to clear progress state on cancellation.

* fix: align model card content to top to prevent floating elements

Changed ModelCard flex alignment from items-center to items-start so
the accuracy/speed bars stay at the top when the card expands (e.g.,
during download with progress bar visible).

* fix: prevent model deletion from interrupting active extractions

Added extracting_models HashSet to track models currently being
extracted. The update_download_status() function now skips cleanup
of .extracting directories for models that are actively extracting,
preventing a race condition where deleting one model would interrupt
another model's extraction process.

* refactor: migrate ModelCard buttons to Button component

Added two new Button variants for common patterns:
- primary-soft: soft/tinted primary buttons (used for download)
- danger-ghost: subtle destructive actions (used for delete/cancel)

Migrated all hardcoded buttons in ModelCard to use the shared Button
component for consistency and maintainability.

* feat: separate downloaded and available models into sections

Split the models list into "Your Models" and "Available to Download"
sections for clearer visual distinction between downloaded and
downloadable models.

Also adds missing translation keys to all locales:
- modelSelector.capabilities.singleLanguage
- modelSelector.capabilities.languageOnly
- settings.models.yourModels
- settings.models.availableModels

* fix: add missing translations after rebase onto main

add post-processing hotkey translations to all 15 locales and
backfill 29 missing keys for korean locale added in main.

* fix: add label to model delete button for clearer destructive state

* check translations as typescript

* format

* better text for dropdown

* wip ui tweaks

* rounded + ui tweaks

* fix download not 0% immediately, ui tweaks

* tweak name

* block for model downloading in onboarding

* small fixes

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-08 12:18:22 +08:00
Josh Ribakoff
9ef71046ba
chore: add Playwright E2E testing infrastructure (#673)
* feat: add Playwright testing infrastructure

- Add @playwright/test dependency
- Add playwright.config.ts with Chromium setup
- Add test scripts (test, test:ui, test:headed)
- Add hello world test to verify setup works

This is the foundation for adding comprehensive E2E tests.
Tests run against the Vite dev server on port 1420.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* ci: add E2E test workflow

Runs Playwright tests on pull requests using Chromium.
Uploads test artifacts on failure.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: rename e2e to playwright, fix CI test

- Rename workflow from "E2E Tests" to "Playwright"
- Rename scripts from test:e2e to test:playwright
- Fix test to not require Tauri APIs (just check server responds)
- Run prettier

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-06 17:15:19 +08:00
CJ Pais
9ea1555816
cache (#724) 2026-02-06 17:13:38 +08:00
Gabe Duarte
6de8ff5b71
Fix the rust tests after gtk-layer-shell introduction (#719) 2026-02-06 07:51:22 +08:00
CJ Pais
e25c6043fb Delete feature_request.md 2026-02-05 14:26:27 +08:00
Josh Ribakoff
a033a67b13
fix: run Rust tests in CI (#671)
* fix: run Rust tests in CI

Fixes #670

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: run Rust tests in CI

Adds a separate test.yml workflow to run existing Rust unit tests.

Fixes #670

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* refactor: use mock TranscriptionManager in CI tests

Swap to a mock adapter during CI to avoid compiling whisper/Vulkan.
The mock has the same interface but no heavy dependencies.
Existing tests don't exercise transcription code, so this is safe.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 11:18:50 +08:00
Sami Ansari
6827fb51d4
Add Nix flake for NixOS support (#561)
* Add Nix flake for NixOS support

Provides:
- handy-appimage: AppImage-based package (default)
- devShell: Development environment for building from source

* fix(nix): address PR feedback for flake.nix

- Remove aarch64-linux from supportedSystems (ARM64 builds not produced)
- Read version dynamically from Cargo.toml instead of hardcoding
  This enables automated updates during GitHub releases

* chore(nix): add GitHub Actions workflow to auto-update AppImage hash

Adds a separate workflow triggered on release publication that:
- Fetches the released AppImage
- Computes the SRI hash using nix-prefetch-url
- Updates flake.nix with the new hash
- Commits and pushes changes directly

Includes retry logic for timing issues and defensive checks to verify
the hash was actually updated and skip commits if unchanged.

* Update flake.nix hash to resolve mismatch

Co-authored-by: pinage404 <pinage404@gmail.com>

* Update flake.nix to install dependencies automatically

Co-authored-by: pinage404 <pinage404@gmail.com>

* fix: update AppImage hash for v0.7.0

* modified description

---------

Co-authored-by: pinage404 <pinage404@gmail.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-01 10:32:49 +08:00
Pierre Carru
713d0b383e
PR template: Update link to CONTRIBUTING.md (#643) 2026-01-22 07:35:44 +08:00
CJ Pais
7e2760ea27
arm linux build? (#629)
* arm build?

* try newer vulkan

* dont think this will work but try anyway

* Update build.yml
2026-01-20 13:03:03 +08:00
Jackson
ba3f8a8a50
Prevent highlight and selection cursor hover on UI text items (#541)
* Add `select-none` and `cursor-default` to root to prevent selection and
hover on most items

* Lint

* refactor paths a bit

* format

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-01-10 11:00:01 +08:00
CJ Pais
f343bed390 PR guidelines for AI 2026-01-10 10:27:21 +08:00
CJ Pais
a0569d39f5
Update FUNDING.yml 2026-01-07 14:17:05 +08:00
CJ Pais
7a38b8024e
Update funding sources in FUNDING.yml 2026-01-07 14:07:23 +08:00
Viren Mohindra
d3a0281062
fix: prevent crash on macos 26.x beta during startup (#473)
defer apple intelligence availability check from app initialization
to when the user actually tries to use the feature. accessing
SystemLanguageModel.default during early app startup causes SIGABRT
on macOS 26.x (tahoe) beta.

- remove availability check from default_post_process_providers()
- always include apple intelligence provider on macos arm64
- add checkAppleIntelligenceAvailable command for lazy checking
- show error message if apple intelligence unavailable when selected
- clear error on any dropdown selection for better UX
2026-01-04 07:52:06 +08:00
CJ Pais
26c4f6c53f try pr test build? 2025-12-29 12:28:35 +07:00
CJ Pais
be1141cd50 description must be human written in PR 2025-12-23 09:17:02 +07:00
CJ Pais
b3dd5a8c8e add better contribution guidelines + pr template 2025-12-17 10:03:59 +07:00
CJ Pais
0477c6a888
move to macos 26 ci (#440) 2025-12-12 16:13:02 +07:00
CJ Pais
f87051f464
Add Internationalization Support (#437)
* basic i18n

* tweak

* translate app

* add linting to make sure we have translations

* run linter on pr

* format
2025-12-12 11:16:54 +07:00
CJ Pais
d52bec9d87 fix workflow? 2025-11-30 11:28:41 +07:00
CJ Pais
3d15ee13c5 add prettier format check to pr 2025-11-29 16:52:02 +07:00
Jorge
45eec57226
feat: add fallback microphone for clamshell/desktop mode (#329)
* feat: add fallback microphone for clamshell/desktop mode

* refactor: moved "Closed Laptop Microphone" setting to Debug

* cleanup

* run format

* add check back

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-17 10:38:41 +07:00
Dariel Dato-on
832eb2766c
Enable Windows ARM64 builds in CI (#340) 2025-11-15 17:02:55 +08:00
CJ Pais
70ec82285a
format everything (#323) 2025-11-10 11:39:14 +08:00
CJ Pais
11ce9a7a53
Fix Whisper Crashing on Linux + CI Fixes (#212)
* bump to latest transcribe-rs

* direct dep?

* disable avx for whisper?

* verbose?

* rust verbose?

* debug symbols

* support debug builds properly

* split release for appimage

* fix artifact name
2025-10-13 14:43:48 -07:00
CJ Pais
13d33200c5 issue template update 2025-10-13 09:57:12 -07:00
CJ Pais
d0a3ef335e fix ci? 2025-08-19 19:34:33 -07:00
CJ Pais
90395c8ba4 fix? 2025-08-19 19:29:28 -07:00
CJ Pais
425dd11b25 try draft release again? 2025-08-19 19:10:16 -07:00
CJ Pais
c8aa9e84f4 try fuse 2025-08-19 17:53:51 -07:00
CJ Pais
8b73217ff8 remove libwayland from appimage? 2025-08-19 17:37:36 -07:00
CJ Pais
dc788773cd add bug template 2025-08-19 15:39:59 -07:00
CJ Pais
ff0d5863a4 have 22.04 and 24.04 builds for now 2025-08-18 16:59:32 -07:00