MixBar

Per-app volume for Mac.

A slider for every app that's making noise, in the menu bar, plus quick output‑device switching. Free and open source.

Download for macOS View the source

Requires macOS 15 or later · Apple silicon and Intel · MIT licensed

It stays out of your audio path until you ask

At default volume MixBar creates nothing at all — no taps, no aggregate device, no presence between your apps and your speakers. An app enters the audio path only once its slider moves, and leaves the moment it goes back to 100%.

This is not a detail. An earlier version routed everything through the mixer and caused audible crackling system‑wide, even while mixing pure silence. There is no kernel extension, no virtual audio driver and no installer privileges anywhere in MixBar.

Three ways to see it

The same mixer, at three densities. Two apps or twenty, the panel is meant to be read at a glance and closed again.

The compact layout: one line per app, name and slider on the same row.
Compact — one line per app.
The comfortable layout: each app gets an icon, its name and a full-width slider.
Comfortable — icon, name, full slider.
The mixer layout: vertical faders side by side, like a mixing desk.
Mixer — vertical faders, side by side.

Why it asks for microphone permission

macOS has no per‑app volume API. The only way to change one app's volume is to capture that app's audio and play it back yourself at a different level. Apple classifies reading another app's sound as recording, under the same umbrella as the microphone — so MixBar needs the Audio Recording permission, even though it never touches your microphone.

What it does with that access: it multiplies buffers by a gain, sums them, and writes them to your output device. Nothing is recorded, written to disk, or sent anywhere. There is no network code in the app at all. You do not have to take that on faith — read the mixer.

How it works

  1. Find what's playing

    Enumerate audio processes through Core Audio's process objects.

  2. Group them by app

    Browsers and Electron apps play through anonymous helpers, and there is more than one — mute the wrong helper and the sound simply moves to the next. One slider spans all of an app's processes.

  3. Tap only what you adjusted

    A private tap spanning that app's processes, marked muted‑when‑tapped so its own path to the speakers goes quiet and MixBar's gain becomes its volume.

  4. Mix in one pass

    The output device and every tap go into a single private aggregate device, and one realtime IOProc applies the gains and sums the result.

Where it's at

Working

  • Per-app volume and mute
  • Live meters
  • Output device switching
  • Settings remembered per app
  • Helper-process grouping

Not yet

  • Sleep and wake handling
  • Launch at login
  • Global hotkeys
  • Per-app output routing

MixBar is pre‑1.0 and the second column is where the contributions would help most.

Get it