Control your Linux audio system remotely through a modern web interface or standalone desktop application.
- Universal Compatibility: Works with both PulseAudio and PipeWire
- Real-time Control: Adjust volume, mute/unmute, and switch audio outputs instantly
- Multiple Interfaces: Web app (built-in), desktop app, or API access
- WebSocket API: Real-time updates and low-latency control
- Multi-device Support: Manage all audio sinks, sources, and applications
yay -S pulse-remote-git
# or
paru -S pulse-remote-gitThe service will be installed and can be started with:
systemctl --user enable --now pulse-remoteDownload the latest from the releases page and run it directly, or install it with:
make installgit clone https://github.com/undg/pulse-remote
cd pulse-remote
make build
./build/bin/pulse-remote-serverAfter starting the server, open your browser and navigate to:
http://localhost:8448
The built-in web interface provides full control over your audio system.
For a native desktop experience, install the standalone app:
git clone https://github.com/undg/pulse-remote-desktop
cd pulse-remote-desktop
# Follow installation instructions in that repositoryThe WebSocket API is available at:
ws://localhost:8448/api/v1/ws
REST endpoint for status:
http://localhost:8448/api/v1/status
For detailed API documentation, connect to the WebSocket endpoint and send a GetSchema action, or visit:
http://localhost:8448/api/v1/schema/status
http://localhost:8448/api/v1/schema/message
http://localhost:8448/api/v1/schema/response
Control log verbosity with the DEBUG environment variable:
# For systemd service
systemctl --user set-environment DEBUG=trace
systemctl --user restart pulse-remote
# For direct execution
DEBUG=debug ./build/bin/pulse-remote-serverAvailable levels:
TRACEor3- Most verboseDEBUGor2- Debug informationINFOor1- Default levelWARNor0- Warnings onlyERRor-1- Errors only
# For systemd service
journalctl --user -u pulse-remote.service -f
# Clean output
journalctl --user -u pulse-remote.service -f --output cat- Go 1.25.4 or later (preferably installed with mise)
- PulseAudio or PipeWire
- Make
# Install dependencies
go mod download
# Run tests
make test
# Run with hot reload
make run/watch
# Format and tidy code
make tidy
# Run full quality checks
make auditpulse-remote/
├── .github/
│ └── workflows/ # CI/CD workflows (test, audit, tidy, release)
├── api/ # Core API implementation
│ ├── buildinfo/ # Build metadata (version, commit, date)
│ ├── json/ # JSON schemas and REST endpoints
│ ├── logger/ # Zerolog logging setup
│ ├── pactl/ # PulseAudio/PipeWire control
│ │ └── generated/ # Auto-generated types from pactl JSON
│ ├── utils/ # Utility functions (network, etc.)
│ └── ws/ # WebSocket handlers and broadcasting
├── _GUI/web/ # Built-in web interface
│ ├── dist/ # Compiled web app assets
│ └── version # Web interface version
├── os/ # System integration files
│ ├── pulse-remote.1 # Man page
│ └── pulse-remote.service # Systemd user service
├── scripts/ # Build and development scripts
│ ├── bump.sh # Version bumping script
│ └── test-watch.sh # Watch mode test runner
├── vendor/ # Vendored dependencies
├── .gitignore # Git ignore patterns
├── .goreleaser.yaml # GoReleaser configuration for releases
├── .mise.toml # Mise tool version configuration
├── go.mod # Go module dependencies
├── go.sum # Go module checksums
├── LICENSE # License file
├── main.go # Application entry point
├── Makefile # Build and development tasks
├── README.md # This file
└── renovate.json # Renovate dependency updates config
make help- List all available commandsmake build- Build the server binarymake test- Run all tests with race detectionmake test/watch- Run tests in watch modemake test/cover- Run tests with coverage reportmake tidy- Format code and tidy dependenciesmake audit- Run quality checks (vet, staticcheck, govulncheck)make run/watch- Run with hot reloadmake install- Install as systemd user servicemake uninstall- Remove systemd user service
Run all tests:
make testRun specific test:
go test -v -race -buildvcs ./api/pactl -run TestGetSinksRun tests in watch mode:
make test/watchSee AGENTS.md for detailed coding guidelines.
- pulse-remote-web - Web interface (included in this repo)
- pulse-remote-desktop - Standalone desktop application
See LICENSE file for details.