3 releases (breaking)
Uses new Rust 2024
| new 0.8.0 | Jun 11, 2026 |
|---|---|
| 0.6.1 | Jan 27, 2026 |
| 0.5.5 |
|
| 0.5.4 |
|
| 0.2.2 |
|
#54 in Audio
100KB
2K
SLoC
Vibe
About
Vibe is a music player that uses the SLIM TCP protocol to connect to a Lyrion Music Server, formally known as a Logitech Media Server.
Vibe is intended to be run as a user daemon and is designed to be simple and as unobtrusive as possible. It's possible to start Vibe at login using a systemd service file and this can be generated automatically.
It's possible to use auto-discovery to find the Lyrion Music Server
or, in cases where this is not possible, like when using a tailscale VPN,
then a server can be specified either by its domain name or its IP address.
The output device can be selected, in this case it's helpful to list the devices first and use the appropriate device name from the list.
Desktop notifications can be displayed when a new track starts, although this needs to be enabled at compile time. Please note that the Lyrion Music Server does not send metadata for mp3 streams, and so no notifications will be produced when playing an mp3.
Running
To list the run-time options:
vibe -h
To see all audio output devices on your machine:
vibe -l
Automatic starting at login
Vibe can create a systemd user service file for you using
vibe --create-service
If you want to vibe to be started with the options that control server or output,
i.e. --server, --system or --device, then just add
them as normal to the command line, e.g.
vibe --create-service --server my.lyrion.server --system pipewire --device my.output.device
This will create a systemd service file under
${HOME}/.config/systemd/user. Once created,
tell systemd of the new service with
systemctl --user daemon-reload
Start the service with
systemctl --user start vibe.service
You can make it so that vibe will start whenever you login with
systemctl --user enable vibe.service
Building
Vibe can be built with the ability to connect to different audio systems using compile-time features. These features are:
pulsefor Pulseaudio (the default)pipewirefor Pipewirerodiofor ALSA
Note that if pulse is selected then it is still possible to
play audio on Pipewire systems because Pipewire implements the
Pulseaudio API as well as its own.
It is possible to compile for one, two or all three of the audio systems by selecting the appropriate features at compile time. If more than one of these features are selected then a run-time command switch ("--system" or "-a") can be used to select which audio system should be used.
At least one of these features must be selected, noting that
pulse is normally selected by default. This default can be switched off
by using --no-default-features when building.
Each audio system has its own build-time dependencies and the appropriate packages must be on the development system.
Pulse
- Pulseaudio development files
Pipewire
- Pipewire development files
- SPA development files
- clang development files
Rodio
- ALSA development files
Other Build-time Features
Notify
To enable new track notifications on the desktop use the notify
feature. If this is enabled, you will be able to suppress the
notifications at run time with the --quiet command option.
Build-time dependencies are:
- DBus development files
pkg-config
Run-time Dependencies
Vibe has zero run-time dependencies, all the stream demultiplexing and decoding is done natively thanks to Symphonia, a big "thank-you" to the Symphonia devs for their amazing work!
A Note About The Name
I named this project Vibe a few years ago, before AI was a mainstream thing.
I thought it sounded cool and was short enough to be a command line instruction.
Since then "vibe coding" has become a thing where, I believe, so called "vibe coders"
instruct an AI to code for them. I would like to state now that I do not use
vibe coding in this project, all code is human-generated and as such, I take
responsibility for all mistakes in, and short-comings of the code.
Support me
Dependencies
~4–39MB
~559K SLoC