SoundSwitch
Per-app audio device profiles that actually stick between reboots
Windows desktop app . Local-first . No account required
Table of contents
- What SoundSwitch is
- Why it exists
- Feature tour
- Interface
- Install
- First run
- How it works
- Keyboard shortcuts
- Configuration
- Troubleshooting
- FAQ
- Roadmap
- Build from source
- Privacy
- Contributing
- License
What SoundSwitch is
SoundSwitch is a Windows desktop app that handles audio: per-app audio device profiles that actually stick between reboots. It runs entirely on your machine, stores its data in a plain local file, and does not require an account, a browser extension, or an internet connection to do its job.
The core idea is small on purpose. SoundSwitch does one thing well instead of ten things in a menu you never open.
Why it exists
Most tools in this space are a web upload with a login, or a bundled suite that ships five features you did not ask for. SoundSwitch started as a side project because the existing options wanted an account for a job that should take two clicks and no internet connection.
The design brief was short: open the app, do the thing, close the app. Everything in SoundSwitch should fit in that loop.
Feature tour
- Assign Spotify to speakers , Discord to a headset, and OBS to a virtual cable with one rule each
- Hotkey cycles the system default between any ordered list of devices
- Follows the device , not the index: profiles survive a BIOS reorder or a new USB port
- Automatic switch when a Bluetooth headset connects or disconnects
- Communication device , playback device, and recording device each get their own profile
- Per-app volume memory so your games do not blow your eardrums after a Zoom call
- Tray popup with one click per device , searchable when the list gets long
- No background audio session; the service is idle until a device event fires
Interface
The main window is organized around the one workflow you came for. Everything optional is one click or one hotkey away; nothing is buried four menus deep.
Install
The quickest path is the signed .zip from the download link:
Download the latest release (.zip)
- Download the .zip from the link above.
- Extract it anywhere; a user folder is fine, admin rights are not required.
- Run the executable inside the extracted folder.
- Pin it to the Start menu or add it to startup from the Settings tab if you want it running in the background.
The archive is self-contained: it does not touch the registry on first launch
and it does not install a service without your explicit consent. To remove
SoundSwitch completely, delete the folder you extracted to and the data folder at
%LOCALAPPDATA%/soundswitch.
First run
On the first launch, SoundSwitch walks through four short steps:
- Pick a workspace location. This is where the local database lives.
The default is
%LOCALAPPDATA%/soundswitch; a portable path next to the executable is a one-click option if you prefer a USB-friendly setup. - Choose default options. Sensible defaults are preselected; the wizard explains each toggle in one line so you can keep moving.
- Grant the permissions SoundSwitch needs. Only the ones required for the feature set you turn on; nothing is prompted that you did not opt into.
- Open the main window. You are done; the welcome screen points at the two or three actions people usually try first.
If something looks off, every choice is reversible from Settings.
How it works
Under the hood, SoundSwitch is built on C# WPF client, C++ worker using Core Audio and Policy Config COM interfaces, SQLite for rules, and Toast notifications via WinRT.
- Capture the signal. The app watches the one input stream it cares about, nothing else.
- Process locally. Work happens in a worker on your machine; the UI thread stays responsive even on big batches.
- Store without surprises. Results land in a local SQLite database and plain files you can inspect.
- Expose through the UI. The main window and the tray share one source of truth; no "reload to see changes" dialogs.
The data model is deliberately boring: a local SQLite database for structured state, plain files on disk for everything that would be awkward inside a row, and a journal of every action so an undo is always a few keystrokes away.
Keyboard shortcuts
| Shortcut | Action |
|---|---|
Ctrl+N |
Create a new rule |
Ctrl+F |
Focus the search box |
Ctrl+K |
Open the command palette |
Ctrl+, |
Open settings |
Ctrl+Z / Ctrl+Y |
Undo / redo the last action |
F5 |
Refresh the current view |
F1 |
Open the keyboard reference |
Esc |
Close the current dialog or clear the current selection |
Every shortcut is remappable from the Settings tab under Shortcuts.
Configuration
Configuration lives in %LOCALAPPDATA%/soundswitch/config.toml and is a plain text
file. The UI covers the common knobs; the file covers everything else.
[general] workspace = "%LOCALAPPDATA%/soundswitch" start_minimized = false check_for_updates = true [ui] theme = "system" # system | light | dark accent = "#22d3ee" font_size = 14 [logging] level = "info" # trace | debug | info | warn | error retain_days = 14
Changes made from the UI are written atomically. Changes made by hand are picked up on the next launch; the running app ignores external edits to the config file to avoid half-applied state.
Troubleshooting
SoundSwitch will not start. Check %LOCALAPPDATA%/soundswitch/logs/latest.log; the
most common cause is a corrupted workspace file after an unclean shutdown.
Rename the workspace folder and relaunch; a fresh workspace is created on the
spot and your old data is left untouched for you to recover from.
A feature says "permission required". The permission wizard can be re-opened from Settings > Permissions. Each permission is scoped to one feature and can be revoked without affecting the rest of the app.
The window opens off-screen on a multi-monitor setup. Right-click the tray icon and pick Reset window position. The next launch will center on the primary monitor.
Antivirus flags the download. The .zip contains an unsigned development build only when you grab it from a fork; the official download is signed by the maintainer's EV certificate. Compare the SHA-256 of your download against the hash listed on the release page before running the executable.
FAQ
Does SoundSwitch send data anywhere? No. The app does not include telemetry, analytics, or a crash reporter that transmits over the network. The only outbound connection it ever makes is the optional update check, which you can disable in Settings.
Is there a portable mode? Yes. On the first run, pick a folder next to the executable as your workspace. The config file is written in the same folder, and nothing is written to the registry.
Does SoundSwitch work on Windows 10? Yes, Windows 10 version 1809 and later. Windows 11 is the primary development target but Windows 10 is tested on every release.
Can I run two instances side by side? Yes. Pass --workspace <path> on
the command line and SoundSwitch will treat that folder as an independent
workspace.
Is a Linux or macOS version coming? Not planned for the first year. The core engine is portable, but the Windows integration is the main selling point and spreading focus would weaken it.
Roadmap
Short-term:
- Command palette fuzzy match tuning
- Scriptable export pipeline
- Localized UI for the ten most-requested languages
Medium-term:
- Plugin API for the one or two integrations that keep coming up
- An optional CLI companion for scripting the main workflows
- Signed MSIX package in addition to the .zip
Longer-term plans are discussed in the issue tracker; the shortlist here is what is actually being worked on.
Build from source
Requirements:
- Windows 10 1809 or later, 64-bit
- .NET 8 SDK
- Visual Studio 2022 Build Tools with the Desktop C++ workload
Steps:
git clone https://github.com/<your-fork>/soundswitch.git cd soundswitch ./scripts/dev.ps1 # restores dependencies, generates stubs ./scripts/build.ps1 Release ./dist/soundswitch.exe # run the fresh build
The build is reproducible on a clean machine. Any deviation is a bug worth filing.
Privacy
SoundSwitch does not ship with telemetry. The only network call the app can make is the update check, which:
- fetches a signed manifest from the project's release server,
- compares it to the current version,
- shows a notification if a new build is available.
The check can be disabled in Settings and the app continues to work without
it. Logs stay on disk, inside %LOCALAPPDATA%/soundswitch/logs, and roll over on
their own.
Contributing
Patches, bug reports, and feature discussion are welcome. Start with CONTRIBUTING.md and please keep an eye on the Code of Conduct.
License
SoundSwitch is released under the MIT License. See LICENSE.md for the full text.

