A Linux volume mixer that controls applications—not raw audio streams.
Fadrio resolves PipeWire playback nodes into stable logical applications and groups every session owned by an application behind one mixer target. Three browser streams should look like one Brave or Firefox control—not three nodes, renderer processes, or PIDs.
Important
Fadrio is a source-only public alpha, not an end-user release. No supported binary package is published yet. Basic identity persistence and live application controls exist, but durable mixer policies, MIDI control, output control, and the finished interface are not implemented. Initial Steam/Proton identification requires corroborating local process, compatibility-directory, and installed-manifest evidence.
- Native PipeWire registry connection and playback-node events.
- Versioned C ABI with copied, serialized managed events.
- Linux
/procand automatically refreshed XDG desktop-entry identity resolution. - Deterministic multi-evidence scoring with safe conflict fallback.
- Flatpak-first canonical identity from bounded sandbox metadata and exported desktop entries.
- Optional Snap identity from corroborated wrapper metadata, without a Snap runtime dependency.
- Secure local PNG icon resolution with trusted-root checks and a bounded XDG cache.
- Stable fallback identities that never use PID.
- Multi-session application grouping and application-wide volume/mute commands.
- Managed reconnect supervision with generation isolation.
- Diagnostic CLI, SQLite-backed identity overrides, and the first live Avalonia application rows with volume and mute controls.
PipeWire sessions
↓
Application identity resolver
↓
Logical applications
↓
Mixer state
↓
UI / MIDI / CLI / D-Bus
The complete product contract is in TECH_SPEC.md. Start with the shorter architecture overview when contributing.
Planning is tracked in the canonical ROADMAP.md and mirrored to the Fadrio Roadmap GitHub Project. Alpha source snapshots and their checksums are published on GitHub Releases.
Install the dependencies in the Linux setup guide, then run:
./scripts/build.sh
./scripts/test.shInspect current logical applications:
dotnet run --project src/Fadrio.Cli -- apps --watchInspect one application's resolver evidence and raw audio sessions explicitly:
dotnet run --project src/Fadrio.Cli -- inspect xdg:org.mozilla.firefox
dotnet run --project src/Fadrio.Cli -- inspect xdg:org.mozilla.firefox --redactedUse --redacted before sharing output. The ordinary application list intentionally omits process IDs and raw node details.
Application names and icons can be overridden persistently from the CLI:
dotnet run --project src/Fadrio.Cli -- profile name xdg:firefox "My browser"
dotnet run --project src/Fadrio.Cli -- profile icon xdg:firefox firefox
dotnet run --project src/Fadrio.Cli -- profile clear xdg:firefoxThe override appears in subsequent apps output while the canonical ID remains unchanged.
Launch the in-development mixer with dotnet run --project src/Fadrio.UI. Its application rows reflect the live PipeWire snapshot and use the same application-wide volume/mute command path as the CLI. Output-device controls, icons, tray behavior, and UI polish remain on the roadmap.
See the first live-row screenshot, captured with a controlled, silent PipeWire fixture rather than a user's applications.
Exercise the shared M0 command path:
dotnet run --project src/Fadrio.Cli -- set <canonical-id> 35
dotnet run --project src/Fadrio.Cli -- mute <canonical-id>
dotnet run --project src/Fadrio.Cli -- unmute <canonical-id>These commands currently open a short-lived PipeWire client. A later milestone will route them through the single running instance over D-Bus.
Fadrio is not a PipeWire graph editor, DAW, DSP host, recorder, virtual-device manager, or network audio server. See product scope.
Contributions are welcome. Read CONTRIBUTING.md, the repository-specific agent rules, and the Code of Conduct. Report vulnerabilities using SECURITY.md, not a public issue.
Copyright © 2026 Fadrio contributors. Fadrio is free software licensed under GPL-3.0-or-later. Third-party components retain their respective licenses; see THIRD_PARTY_NOTICES.md.