A rewrite of BetterTrumpet (itself built on EarTrumpet) in Rust: per-app volume control from the Windows notification area, with the same features and settings, in a small native app.
- Native Win32 windows drawn with Direct2D: no web view, no .NET runtime.
- About 5 MB of memory and no CPU while idle; one process.
- Reads your existing EarTrumpet/BetterTrumpet settings but never changes
them. Its own settings live in
%LOCALAPPDATA%\BetterTrumpet-Rust. - No telemetry. The only network requests are an opt-in update check (every 6 hours it asks this repository's GitHub releases for a newer version) and, when you choose Update now, the download of that update. Updates are signed: the app installs one only if its signed manifest verifies against the key built into it, and it never installs an older version.
Status: alpha. Most features are in but much of it has not been tested on other machines yet. Bug reports are very welcome (see below).
- Download
BetterRustTrumpet-<version>-setup.exefrom the releases and run it. It installs for your account only (no admin prompt) into%LOCALAPPDATA%\Programs\BetterRustTrumpet, adds a Start menu entry and an uninstaller (Settings > Apps), and offers a desktop icon, starting with Windows andbton PATH. Or downloadBetterRustTrumpet-<version>.zip, unzip it anywhere and runBetterTrumpet.exe. - Windows SmartScreen may warn because the files are not code-signed: choose More info, then Run anyway.
- Quit the C# BetterTrumpet or EarTrumpet first if it is running; both would add a tray icon and claim the same shortcuts. The two can be installed side by side.
- Later versions install from inside the app: Update now in the flyout, the tray menu or Settings > Updates.
bt.exe is an optional command-line tool (bt --help) that talks to the
running app.
To uninstall: quit it from the tray menu, turn off "Run at Windows startup"
first if you turned it on, then delete the folder and
%LOCALAPPDATA%\BetterTrumpet-Rust.
Open an issue with what you did, what happened and
your Windows version. Please attach the newest log from
%LOCALAPPDATA%\BetterTrumpet-Rust\logs, or a diagnostic report from
Settings > About > Export diagnostic report (which replaces user names in
paths). Logs and reports stay on your PC unless you attach them; they can
contain device and app names, so have a look first.
docs/MANUAL_TESTS.md lists things worth trying.
Requires Windows 10 or 11 and Rust 1.88 or newer (the MSVC toolchain, with the Visual Studio C++ build tools).
cargo build --release
cargo test --workspaceThe app is target\release\BetterTrumpet.exe and the CLI
target\release\bt.exe. The C runtime is linked statically
(.cargo/config.toml), so the exe runs without the Visual C++
redistributable.
Releases are built by GitHub Actions (.github/workflows/release.yml) when a
v* tag is pushed, so the published exes never contain a local machine's
paths. Every push and pull request runs format, clippy and tests
(.github/workflows/ci.yml).
cargo run -p bt-app --release -- --render <folder> draws every window to
PNG files without opening anything, which is handy for checking UI changes.
bt-core: settings, rules, presets, CLI and compatibility logic, portable and tested against behaviour captured from the original (tests/fixtures).bt-storage: reading the original's settings and the app's own file.bt-audio: Windows Core Audio (devices, app sessions, volume, peaks).bt-media: the Windows media session (now playing, controls, art).bt-app: the tray app; all Win32 code is insrc/win32.bt-cli: thebtcommand-line client.
Design decisions are recorded in docs/DECISIONS.md (the
Dnn and Qnn references in the code), feature parity in
docs/PARITY.md.
Better Rust Trumpet ports the behaviour, translations, sounds and artwork of:
- EarTrumpet by David Golden, Rafael Rivera and Dave Amenta, with translations by the EarTrumpet community.
- BetterTrumpet by xammen.
Code adapted from the .NET runtime, WPF and Newtonsoft.Json is listed in THIRD_PARTY_NOTICES.md; the translation files are described in crates/bt-app/locales/NOTICE.md.
Released under the MIT licence, including the upstream preamble
that excludes certain entities. Keep the whole LICENSE file, preamble
included, in copies and distributions.