A next-generation PipeWire graph and control application.
Pipeflow replaces the patchwork of Helvum, pavucontrol, and qpwgraph with a single, keyboard-driven tool for visual routing, live audio control, and reproducible configurations. Built in Rust with egui, it handles everything from casual desktop audio management to live performance routing.
Existing PipeWire tools are fragmented: Helvum visualizes but doesn't control, pavucontrol controls but doesn't route, qpwgraph routes but lacks safety features. Pipeflow combines all three into one cohesive application with stage-safe operation, saved setup recall, and remote control.
- Visual graph editing — Interactive node graph with pan, zoom, drag, and multi-select
- Full audio control — Per-node and per-channel volume, mute, live signal metering with peak/RMS display
- Link management — Create and remove connections between compatible ports
- Saved setups — Save and restore trusted graph configurations
- Command palette — Fuzzy-searchable keyboard command interface (
Ctrl+K) - Safety modes — Normal, read-only, and stage mode to prevent accidental changes
- Filtering & groups — Filter by media class, direction, or activity; organize nodes into groups
- Node inspection — Detailed metadata, port lists, format info, and connection status
- Remote control — Headless gRPC server mode with SSH tunnel support for controlling remote machines
- Built-in help — Press
Hfor contextual help throughout the UI
Pipeflow operates in three modes:
| Mode | Command | Description |
|---|---|---|
| Local | pipeflow |
Full GUI with local PipeWire connection (default) |
| Headless | pipeflow --headless |
gRPC server, no GUI — for remote-controlled machines |
| Remote | pipeflow --remote user@host |
GUI connecting to a remote headless instance via SSH tunnel |
See docs/REMOTE.md for the full remote control guide.
Arch Linux:
sudo pacman -S pipewire pipewire-audio libpipewireFedora:
sudo dnf install pipewire-develDebian/Ubuntu:
sudo apt install libpipewire-0.3-dev libspa-0.2-devgit clone https://github.com/trusch/pipeflow.git
cd pipeflow
cargo install --path .Requires Rust 1.88+ (stable). The network feature (gRPC remote control) is enabled by default. To build without it:
cargo install --path . --no-default-featuresTo add Pipeflow to your application launcher:
sudo cp assets/pipeflow.desktop /usr/share/applications/pipeflow # Launch GUI
pipeflow -v # Launch with verbose logging| Key | Action |
|---|---|
Ctrl+K / Ctrl+P / / |
Command palette |
H |
Toggle help panel |
I |
Toggle inspector |
[ / ] |
Toggle left / right sidebar |
+ / - |
Zoom in / out |
Ctrl+0 |
Fit all |
Ctrl+G |
Create group from selection |
Delete |
Remove selected links |
Escape |
Clear selection / close palette |
- Pan: Drag on empty space
- Zoom: Scroll wheel or
+/- - Select: Click, Shift+click for multi-select, or box select
- Connect: Drag from an output port to an input port
- Disconnect: Right-click a link, or select and press Delete
Pipeflow includes protection modes to prevent accidental changes:
- Normal mode — Full control, no restrictions
- Read-only mode — Observe without risk of changes
- Stage mode — Maximum protection for live performance (blocks all routing and volume changes)
Switch modes from the toolbar safety card or the command palette.
See docs/SAFETY.md for detailed guidance on when to use each mode.
pipeflow [OPTIONS]
Options:
--headless Run as gRPC server without GUI
--bind <ADDR> gRPC bind address [default: 127.0.0.1:50051]
--token <TOKEN> Authentication token (also: PIPEFLOW_TOKEN env var)
--remote <USER@HOST> Connect to remote headless instance via SSH
--ssh-port <PORT> SSH port [default: 22]
--remote-port <PORT> Remote gRPC port [default: 50051]
--local-port <PORT> Local tunnel port [default: 50051]
-i, --identity <FILE> SSH identity file (private key)
-v, --verbose Enable verbose logging
-h, --help Print help
-V, --version Print version
┌──────────────────────────────────────────────────────────────┐
│ UI Layer (egui) │
│ GraphView │ NodePanel │ Meters │ CommandPalette │ Toolbar │
└──────────────────────────────────────────────────────────────┘
│
┌──────────────────────────────────────────────────────────────┐
│ Application Core │
│ State Manager │ Command Handler │ Snapshot Engine │
└──────────────────────────────────────────────────────────────┘
│
┌──────────────────────────────────────────────────────────────┐
│ Domain Layer │
│ Graph Model │ Audio Control │ Safety Controller │
└──────────────────────────────────────────────────────────────┘
│
┌──────────────────────────────────────────────────────────────┐
│ PipeWire Integration │
│ Connection │ Registry │ Events │ Commands │ Meters │
└──────────────────────────────────────────────────────────────┘
Key design decisions:
- Shared state:
Arc<RwLock<AppState>>for thread-safe access between UI and PipeWire threads - Immediate-mode GUI: egui with conditional repaint (60 Hz active, 4 Hz idle)
- Channel-based IPC: crossbeam channels for PipeWire commands and events
- Auto-reconnect: Exponential backoff reconnection to PipeWire daemon
- Graceful degradation: Meter updates dropped before control commands under load
- Remote Control Guide — Headless mode, SSH tunnels, gRPC protocol
- Safety & Stage Modes — Protection modes for live and recording use
- Saved Setups & Recall — Saving and restoring trusted graph configurations
- Requirements — Product requirements document
See CONTRIBUTING.md for development setup, code quality standards, and pull request guidelines.
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
- PipeWire — The multimedia routing infrastructure
- egui — Immediate mode GUI framework
- egui-snarl — Node graph widget for egui
- pipewire-rs — Rust bindings for PipeWire