Files
Handy/src-tauri/Cargo.toml
CJ Pais 5197faf0e6 actually remove onnx (#2279)
* actually remove onnx

* fix: link clang_rt.osx and drop stale ORT build cache

ort-sys linked libclang_rt.osx.a, which also supplied ggml-metal's
___isPlatformVersionAtLeast. Without ORT, macOS arm64 builds targeting
11.0 fail to link, so Handy now links it directly.

Bump the rust-cache key so restored target dirs no longer carry ORT
leftovers like DirectML.dll, which broke Windows ARM64 signing.

* change acceleration string
2026-10-15 07:54:22 +08:00

188 lines
7.1 KiB
TOML

[package]
name = "handy"
version = "0.9.8"
description = "Handy"
authors = ["cjpais"]
edition = "2021"
license = "MIT"
default-run = "handy"
[profile.dev]
incremental = true # Compile your binary in smaller steps.
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
# The `_lib` suffix may seem redundant but it is necessary
# to make the lib name unique and wouldn't conflict with the bin name.
# This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
name = "handy_app_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { version = "2", features = [] }
serde_json = "1"
serde = { version = "1", features = ["derive"] }
[dependencies]
once_cell = "1"
tauri = { version = "2.11.5", features = [
"protocol-asset",
"macos-private-api",
"tray-icon",
'image-png',
] }
tauri-plugin-log = "2.7.1"
tauri-plugin-opener = "2.5.2"
tauri-plugin-store = "2.4.1"
tauri-plugin-os = "2.3.2"
tauri-plugin-clipboard-manager = "2.3.2"
tauri-plugin-macos-permissions = "2.3.0"
tauri-plugin-process = "2.3.1"
rusqlite_migration = "2.3"
tauri-plugin-fs = "2.4.4"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
rdev = { git = "https://github.com/rustdesk-org/rdev" }
anyhow = "1.0.95"
hound = "3.5.1"
log = "0.4.25"
env_filter = "0.1.0"
tokio = "1.43.0"
earshot = "1.2.2"
enigo = "0.6.1"
# Feedback sounds. No `recording`: microphone capture is handy-recorder's.
rodio = { version = "0.23.0", default-features = false, features = ["playback", "wav", "flac", "mp3", "vorbis"] }
handy-recorder = "0.1"
reqwest = { version = "0.12", features = ["json", "stream", "gzip", "brotli", "deflate"] }
futures-util = "0.3"
rustfft = "6.4.0"
strsim = "0.11.0"
natural = "0.5.0"
regex = "1"
# Text-based language ID (filler-word removal fallback); isolang bridges the
# ISO 639-1 codes in model metadata to whatlang's 639-3 codes.
whatlang = "0.16"
isolang = "2"
chrono = "0.4"
rusqlite = { version = "0.37", features = ["bundled"] }
sha2 = "0.10"
libc = "0.2"
# Every model runs through transcribe-cpp (GGUF/ggml, native backends).
# Per-platform backend features are added in the target tables (Cargo unifies
# features, so `serde` here applies to every platform).
transcribe-cpp = { version = "0.4.0", default-features = false, features = [
"serde",
] }
handy-keys = "0.3.4"
ferrous-opencc = "0.2.3"
clap = { version = "4", features = ["derive"] }
specta = "=2.0.0-rc.22"
specta-typescript = "0.0.9"
tauri-specta = { version = "=2.0.0-rc.21", features = ["derive", "typescript"] }
tauri-plugin-dialog = "2.6"
hf-hub = { git = "https://github.com/cjpais/hf-hub", branch = "cancellable-downloads", features = [
"tokio",
] }
[target.'cfg(unix)'.dependencies]
signal-hook = "0.3"
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
tauri-plugin-autostart = "2.5.1"
tauri-plugin-global-shortcut = "2.3.1"
tauri-plugin-single-instance = "2.3.2"
tauri-plugin-updater = "2.10.1"
[target.'cfg(windows)'.dependencies]
# Used to reach ICoreWebView2Settings3 through the webview's controller
# (disabling browser accelerator keys in the main window). Must match the
# version wry links against so the COM types are identical.
webview2-com = "0.38"
windows = { version = "0.61.3", features = [
"Win32_Media_Audio_Endpoints",
"Win32_System_Com_StructuredStorage",
"Win32_System_DataExchange",
"Win32_System_LibraryLoader",
"Win32_System_Ole",
"Win32_System_Memory",
"Win32_System_Threading",
"Win32_System_Variant",
"Win32_Foundation",
"Win32_Graphics_Gdi",
"Win32_UI_WindowsAndMessaging",
] }
winreg = "0.55"
# Whisper backend per Windows arch. x86_64 ships the Vulkan GPU backend and
# keeps the dynamic-backends posture (loadable per-ISA CPU modules + Vulkan),
# where runtime ISA scoring (GGML_CPU_ALL_VARIANTS) earns the extra shipped DLLs.
#
# Windows-on-ARM is CPU-only: its Adreno Vulkan drivers are immature, and
# ggml-vulkan's shader generator (vulkan-shaders-gen) does not build under the
# clang-cl/lld toolchain that ggml's ARM CPU backend requires. dynamic-backends
# buys nothing on ARM — ALL_VARIANTS is an x86 concept, so a DL build there is
# just a single portable CPU module shipped as a DLL. So ARM links transcribe-cpp
# STATICALLY (no features = static CPU-only): the one CPU backend is compiled into
# handy.exe and we ship zero DLLs, which sidesteps the installer's per-DLL
# signtool verify entirely. CI pins -DGGML_NATIVE=OFF (see build.yml) so the
# static build targets a portable ARM baseline, not the build runner's CPU.
[target.'cfg(all(windows, target_arch = "x86_64"))'.dependencies]
transcribe-cpp = { version = "0.4.0", default-features = false, features = [
"dynamic-backends",
"vulkan",
] }
[target.'cfg(all(windows, target_arch = "aarch64"))'.dependencies]
transcribe-cpp = { version = "0.4.0", default-features = false }
[target.'cfg(target_os = "macos")'.dependencies]
tauri-nspanel = { git = "https://github.com/ahkohd/tauri-nspanel", branch = "v2.1" }
transcribe-cpp = { version = "0.4.0", default-features = false, features = ["metal"] }
# Used by the receipt-sequenced ("reliable") paste path for lazy NSPasteboard
# promises. Versions track what Tauri already pulls in.
objc2 = "0.6"
objc2-foundation = "0.3"
objc2-app-kit = "0.3"
objc2-service-management = "0.3.2"
[target.'cfg(target_os = "linux")'.dependencies]
gtk-layer-shell = { version = "0.8", features = ["v0_6"] }
gtk = "0.18"
transcribe-cpp = { version = "0.4.0", default-features = false, features = [
"dynamic-backends",
"vulkan",
] }
# TEMPORARY: tao pinned past 0.35.3 for the Wayland client-side-decorations fix
# (tao #1218, fixes tauri #11856 — dead titlebar buttons after visible(false) →
# show()). Drop this once a tao release containing it lands in tauri.
#
# The rev is a cjpais/tao branch, not upstream: dev past 0.35.3 also carries
# tao #1231 (removed window subclassing), which left the thread event target's
# WNDPROC falling through to DefSubclassProc. On a no-longer-subclassed window
# that returns 0, so WM_QUERYENDSESSION answered FALSE and vetoed Windows
# shutdown (Handy #1710). `handy` = 07f3742b + a cherry-pick of tao #1274
# (DefSubclassProc → DefWindowProcW). Repoint at upstream once #1274 merges.
#
# tao-macros must be patched to the SAME rev even though nothing here depends on
# it directly: wry pulls tao-macros 0.1.3 from crates.io, so without this the
# lockfile carries two tao-macros 0.1.3 entries (registry + git). cargo tolerates
# that, but Nix's importCargoLock vendors both to the same `tao-macros-0.1.3`
# dir and fails with a symlink collision. Unifying the source removes the dup.
[patch.crates-io]
tao = { git = "https://github.com/cjpais/tao", rev = "c3bee28c1d446d95f08c95c3b6f8d4bde052b876" }
tao-macros = { git = "https://github.com/cjpais/tao", rev = "c3bee28c1d446d95f08c95c3b6f8d4bde052b876" }
[dev-dependencies]
tempfile = "3"
# Test-only tokio features for the local socket servers exercising the
# resumable HTTP downloader; normal builds keep the leaner feature set.
tokio = { version = "1.43.0", features = ["macros", "net", "io-util", "sync", "time", "rt-multi-thread"] }
[profile.release]
lto = true
codegen-units = 1
strip = true
panic = "unwind"