[package] name = "whisper" version = "0.0.28" edition = "2024" description = "macOS dictation with self-hosted speech recognition and text cleanup (Rust + GPUI)" license = "AGPL-3.0-only" publish = false default-run = "whisper" [[bin]] name = "whisper" path = "src/main.rs" [lib] name = "whisper" path = "src/lib.rs" [lints.clippy] # GPUI callbacks are boxed closures over (&mut Window, &mut App). type_complexity = "allow" # The waveform keeps parallel per-bar arrays indexed together. needless_range_loop = "allow" enum_variant_names = "allow" [dependencies] gpui-kit = "0.7.3" anyhow = "1" thiserror = "2" log = "0.4" env_logger = "0.11" serde = { version = "1", features = ["derive"] } serde_json = "1" chrono = { version = "0.4", features = ["serde"] } uuid = { version = "1", features = ["v4"] } regex = "1" fancy-regex = "0.19" unicode-normalization = "0.1" parking_lot = "0.12" dirs = "6" futures = "0.3" async-channel = "2" bytes = "1" # Persistence rusqlite = { version = "0.40", features = ["bundled"] } keyring = { version = "3", features = ["apple-native"] } # Networking tokio = { version = "1", features = ["rt-multi-thread", "macros", "time", "sync", "process", "io-util", "fs"] } tokio-util = { version = "0.7", features = ["io"] } reqwest = { version = "0.13", default-features = false, features = ["json", "multipart", "rustls", "stream", "query"] } url = "2" # Audio cpal = "0.18" # Text ferrous-opencc = "0.4" # Dictionary-based CJK word breaks. pinyin = { version = "0.11", default-features = false, features = ["plain"] } icu_segmenter = "2" icu_collections = "2" icu_provider = "2" # Platform global-hotkey = "0.8" tray-icon = "0.26" image = { version = "0.25", default-features = false, features = ["png"] } objc2 = "0.6" objc2-foundation = "0.3" objc2-app-kit = "0.3" core-foundation = "0.10" raw-window-handle = "0.6" rfd = "0.17" rust-embed = "8" # Native helpers (src/native): signals, AX/AVFoundation blocks, monitor payloads libc = "0.2" block2 = "0.6" base64 = "0.22" [dev-dependencies] hound = "3.5" tempfile = "3" ttf-parser = "0.25" tiny_http = "0.12" [profile.dev] opt-level = 1 [profile.dev.package."*"] opt-level = 2 [profile.release] lto = "thin" codegen-units = 4