đ§ From a simple pactl script to a cross-platform, low-latency system tool
Switching audio devices should be instant.
In practice, it isnât.
If you regularly use multiple audio outputsâheadphones, speakers, Bluetooth devicesâyouâve likely run into the same friction:
- Opening system settings just to switch output
- Clicking through nested menus
- Losing focus from your current task
- Repeating this multiple times a day
This isnât a hard problem.
But itâs a bad workflow problem.
đ Explore the Project
Check out the project here:
https://kanishkmishra143.github.io/Sink-Switch/
â ď¸ The Real Issue: Friction, Not Functionality
Modern operating systems already support multiple audio devices.
The issue isnât capabilityâitâs interaction.
- Switching is UI-heavy instead of keyboard-first
- No fast, predictable way to move between preferred devices
- Context switching breaks flow
Youâre not lacking features.
Youâre lacking speed and intent in the workflow.
đĄ The Shift: From Selection â Cycling
Instead of asking:
âHow do I switch audio devices faster?â
I reframed it as:
âHow do I eliminate the need to choose every time?â
That led to a simple idea:
Cycle through a predefined set of devices using a single action.
No menus. No decisions. Just movement.
đ Introducing Sink Switch
Sink Switch is a cross-platform utility for instantly switching audio outputs using a hotkey, CLI command, or lightweight GUI.
đ :contentReference[oaicite:0]{index=0}
At its core, the workflow is simple:
- Select the devices you care about
- Define a cycle order
- Trigger a hotkey or command
- Switch instantly
No UI friction. No repeated decisions.
âď¸ Core Design Decisions
1. Cycling > Selection
Traditional approach:
- Open settings
- Select device
- Confirm
Sink Switch approach:
- Press hotkey â next device
This makes switching:
- Faster
- Predictable
- Muscle-memory driven
2. Config-Driven State
Instead of dynamically choosing devices every time:
- You define a cycle list once
- The system remembers it
- Switching becomes deterministic
This removes:
- Cognitive overhead
- Repeated configuration
3. Keyboard-First Workflow
Everything is designed around:
- Hotkeys
- CLI commands
- Minimal UI interaction
Because speed comes from not leaving your current context.
đ§ Linux vs đŞ Windows: A Systems Perspective
One of the most interesting parts of building Sink Switch was how different the platforms are.
On Linux
- Clean interfaces via PulseAudio / PipeWire
-
pactlprovides direct control - Bash was enough for a fast, native-feeling solution
Result:
A lightweight, scriptable system that integrates naturally into the environment.
On Windows
- Outdated and restrictive audio APIs
- PowerShell + AutoHotkey approach broke down quickly
- No reliable abstraction for consistent device control
This forced a shift:
Rebuild the Windows version in Go using Core Audio APIs directly.
đ ď¸ Why Go for Windows?
The Go implementation enabled:
- Direct interaction with Windows Core Audio APIs
- Reliable, low-latency switching
- Better control over device enumeration and state
- A native dashboard + CLI interface
This wasnât just a rewrite.
It was a necessary architectural upgrade.
đ A Subtle Edge Case
One interesting challenge:
Tools like FxSound always appear as the active output deviceâeven when theyâre just acting as a processing layer.
That means:
- The system reports a âvirtualâ device
- But the actual output is happening elsewhere
Fixing this required:
- Tracking real device state beyond surface-level API data
- Designing around how audio is routed, not just reported
This is where a simple tool becomes a systems problem.
đ§ Design Philosophy
This project wasnât about building another utility.
It was about removing friction from a high-frequency workflow.
Key Principles
1. Speed Over Flexibility
Fewer decisions â faster execution.
2. Predictability Over Complexity
Cycling ensures consistent behavior every time.
3. State Over Stateless Actions
The system remembers your preferences.
You donât have to reconfigure each time.
4. Flow Over Features
The goal isnât more functionality.
The goal is not breaking your focus.
đ What It Enables
Sink Switch becomes especially useful for:
- Multi-device setups (headphones + speakers + Bluetooth)
- Developers working in full-screen environments
- Linux users on tiling WMs like Hyprland
- Anyone optimizing for keyboard-first workflows
đ What This Project Really Represents
This wasnât about switching audio devices.
It was about identifying a small but frequent annoyanceâand solving it properly.
The pattern is simple:
Identify friction â remove decisions â optimize for flow
That pattern applies everywhere:
- Dev tools
- System utilities
- Even product design
đ Final Thought
Good tools add features.
Great tools remove steps.
And the best ones become invisibleâbecause they just fit into your workflow.
Sink Switch is one of those tools.






Top comments (0)