Repository navigation
v0.4.0
Vynull v0.4.0
The theme: more ways to reach your library. The binary is now also a shell client for a running server, the web UI installs as an app on phones and desktops, and the playing deck shows up in your desktop's media controls.
Shell subcommands
With a server running, the same binary works as a client — no curl required:
vynull search caribou # list matching tracks (ID, BPM, key, ...)
vynull search --json | jq ... # machine-readable, for pipelines
vynull add ~/Music/new-crate # add files or folders
vynull load 42 2 # load track 42 on deck 2
vynull load "encounter" 2 # or by search — must match exactly one track
vynull players # who's on the link and what they're playing
vynull status # server, analysis, and link state--json on the listing commands is the building block for your own tooling: pipe search --json through jq and fzf and you have a track picker; poll players --json from a status bar. Loading by query refuses ambiguity — if more than one track matches, it lists the candidates and stops, because loading the wrong track on a live deck is not a failure mode worth having. --addr or VYNULL_ADDR point the commands at a non-default server, and --help lists everything.
Install the web UI as an app
The web UI now ships a PWA manifest: browsers can install it as a standalone app that launches fullscreen from a home-screen icon — no address bar, no tabs, dark from the first frame. The practical case is a phone or tablet at the booth. On desktop, Chromium-family browsers install it as its own window with a dock icon.
Notes: install requires a secure context, so it works from localhost (desktop, or adb reverse for Android) and via iOS Safari's Add to Home Screen; Android over plain LAN HTTP creates a working shortcut rather than a full standalone install. There is deliberately no offline mode — the UI is meaningless without the live server.
Now-playing on your desktop (MPRIS)
Vynull publishes the audible deck over MPRIS on the D-Bus session bus. Desktop media applets (XFCE's PulseAudio plugin, GNOME/KDE controls), lock screens, playerctl, status-bar widgets, and KDE Connect's phone mirroring all show the current track — title, artist, artwork, length, and position — updating within a second of the deck changing.
It is read-only by design: decks cannot be paused or skipped over the link, so the player advertises no controls (some simpler applets may render inert buttons). On by default; --mpris=false opts out, and headless machines without a session bus skip it silently.
Internals
The e2e suite grew scenarios for the CLI (driving the built binary's subcommands against a real server) and MPRIS gained integration tests that spin a private D-Bus daemon per run — two publisher bugs were caught by those tests before release. make check now needs dbus-daemon available alongside ffmpeg.
Upgrade notes
- No re-analysis pass this time — nothing in the analysis pipeline changed
- The release binary grows by roughly 2.4MB from the D-Bus dependency
- Nothing deck-facing changed; hardware-verified on a CDJ-2000NXS2 as a regression smoke
Full changelog: git log --merges v0.3.0..v0.4.0