===== LABEL =====
HARDWARE / USB-DAC
===== DATE =====
2026-08-26T14:14:58+02:00
===== COMMAND =====
cat /data/plugins/music_service/soloist_connect/package.json 
===== OUTPUT =====
{
  "name": "soloist_connect",
  "version": "0.8.0",
  "description": "Spotify Connect on Volumio 4 via Spotify Soloist, playing through pcm.volumio (ALSA, no Pulse)",
  "main": "index.js",
  "scripts": {
    "test": "node test/queue-mode.test.js"
  },
  "author": "Wheaten, Just a Nerd",
  "license": "MIT",
  "repository": "https://github.com/foonerd/alsa_soloist_connect",
  "volumio_info": {
    "prettyName": "Spotify Soloist Connect",
    "plugin_type": "music_service",
    "icon": "fa-spotify",
    "architectures": [
      "amd64",
      "armhf"
    ],
    "os": [
      "bookworm"
    ],
    "details": "Beta. Turns Volumio 4 into a Spotify Connect device using Spotify Soloist. Audio goes through pcm.volumio via an in-tree Pulse shim (0.2.9), with no PulseAudio or PipeWire. Requires your own Soloist API key from the Spotify for Developers dashboard. Unofficial and not affiliated with Spotify AB. The Soloist binary is downloaded from Spotify at install time and is not bundled. This repository is the cutting-edge line; an accepted build is published to the store separately.",
    "changelog": "0.8.0 (beta): first beta. Updating the Soloist binary stages, patches and checks --version before replacing the live file. The settings button shows the system progress modal, then a 15 second reboot countdown with Restart and Cancel. A failed download leaves the running binary. Shim unchanged (0.2.9). 0.7.6: security. logsubmit and ps showed the Soloist API key on argv until the first Pulse call. The shim now overwrites that slot two seconds after load (and still on the first pa_* call). Playback path unchanged. Shim 0.2.9. 0.7.5: Convert playlist rewrites stock Spotify (spop) track rows in a saved Volumio list to soloist_connect. Clone is the default and leaves the original file; overwrite replaces it. Only spotify:track: rows change; album, playlist and artist URIs stay spop. A list already saved as soloist_connect does not appear. Does not restart Soloist and does not turn on queue playback. Shim unchanged (0.2.8). 0.7.4: optional Align volume on start (off by default). When this speaker becomes the active Connect device, Volumio's volume is copied to Soloist instead of applying Initial Volume to the mixer. Mute becomes 0; mixer None and disableVolumeControl skip align. After that the Spotify app slider still moves the mixer. Shim unchanged (0.2.8). 0.7.3: an open Spotify Queue tile refreshes when the track or queue changes. Now playing updates immediately; play next, up next, autoplay and recently played stay in those sections and are refilled with a full get_queue (the unsolicited event is capped at 10). Placeholder rows are omitted. Playback paths unchanged. Shim unchanged (0.2.8). 0.7.2: the Spotify Queue tile is registered only while Play Spotify tracks from the Volumio queue is on. Off hides it, so a tap cannot skip a row and stop Connect. Saving that section adds or removes the tile without a daemon restart. Shim unchanged (0.2.8). 0.7.1: Spotify Queue browse tile. get_queue / queue_changed lists now playing, play next, up next, autoplay and recently played. That is Spotify's Connect list, not Volumio's mixed playlist. The tile appears when the Soloist socket is up and uses a sourceicon SVG. Wait for get_queue is a Timing setting (default 2500 ms, 0-10000; 0 paints the last event immediately). Search is empty. Playback paths unchanged. Shim unchanged (0.2.8). 0.7.0: optional queue mode. A Spotify row in a Volumio playlist or queue can play through Soloist, so one list can mix Spotify with local files, UPnP and web radio. Off by default. Needs a paired session (logged_in); the Spotify app does not have to be open. A row with no session, or one whose session sits on another device, is skipped and the list moves on. Remote-device play of a queued row is a separate switch, also off. Queue mode is not volatile: next/prev stay with core, and the row ends on buffering-at-duration, idle after start, or a roll into autoplay, with a pause and ALSA yield before the next service. Settings are split by change target. A section save posts only its fields and keeps the rest. The daemon restarts only when it actually reads a changed value. Shim unchanged (0.2.8). 0.6.19: first pcm open on a busy card is a wait, not a failed open. Corked connect does not open. Tidal Connect vtcs is asked to release when it holds the DAC. Shim 0.2.8. 0.6.18: Peppy metering compares the running process device to plug:spotify / plug:volumio and restarts only on a known mismatch. Unreadable environ is not a mismatch. Without Peppy the path is unchanged. Shim unchanged (0.2.7). 0.6.17: quality pairing only. A skip measures the new open cache file, or clears the label if none is ready. Last file × new duration is refused. Quality retry wait and retry count are settings (defaults 300 ms and 2; 0 disables). The playing cache is not opened. Shim unchanged (0.2.7). 0.6.16: shim 0.2.7. Flush discards the Pulse ring only; it does not snd_pcm_drop/prepare. Motivo MultiRoom died on the second seek drop even when avail looked healthy. Seek coalesce and inactive hold are settings (defaults 200 ms and 2000 ms; 0 disables). Idle with an empty item does not publish a blank now-playing line. 0.6.15: shim 0.2.6. If prepare leaves the switcher handle dead (target failed its update check), the shim closes that PCM on the existing worker and opens a new plug:volumio after the close finishes. Later flush on that stream reopens instead of drop, which is what killed volumioOutput on Motivo seek. Healthy graphs still drop and prepare on flush. 0.6.14: shim 0.2.5. Ring is tlength plus 64 KiB so a default 500 ms buffer does not drop the tail of Soloist's 8–32 KiB write. Those silent drops played as rush and chop on boxes that kept the default. 0.6.13: shim 0.2.4. Writes FLOAT32 at the client rate into plug:volumio; the outer plug converts. Forced S16 in 0.6.10–0.6.12 set the slave open on USB and AML graphs without softvolume and rushed. Exact rate or fail; I/O capped at two periods so switcher avail is not treated as the DAC. 0.6.12: shim 0.2.3. Overwrites --api-key on argv after Pulse starts so ps and logsubmit show nice-try-logsubmit, not the secret. Drops API_KEY from the daemon environment. 0.6.11: shim 0.2.2. Accepts a short write when the ring cannot hold Soloist's 32 KiB buffer, so preroll can finish and uncork. 0.6.10 rejected those writes and hanger stayed silent. 0.6.10: shim 0.2.1. Converts FLOAT32 to S16 in the shim so Rivo (no softvolume) and hanger share the same integer path. Times the PCM we opened instead of scanning /proc/asound for another card. Writes are all-or-nothing. 0.6.9: reverts 0.6.4–0.6.8. Audio path is 0.6.3 again (shim 0.2.0, FLOAT32 into plug:volumio). Convert and pace matching snapped a 44.1 DAC to 88.2 k and played at half speed. 0.6.2: replaces the patched apulse payload with an in-tree Pulse shim (0.2.0) that implements Soloist's pa_* ABI and writes FLOAT32 into plug:volumio. Also fixes playback stopping a few seconds into a track and never resuming. After an ALSA underrun the shim held the playback position but kept counting what the client wrote, so the reported buffer level climbed to the target, the client stopped writing, and nothing restarted it. Also fixes a mid-track handover showing no title, artist or artwork: the metadata arrived and was discarded because it was published before the plugin had claimed the player. New Cache Location setting, Disk or RAM, for devices on slow SD cards. Verbose Logging now also turns on the audio shim's own diagnostics. 0.6.1: fixes a seek bar that jumped, and could roll back on a browser refresh, when the position timestamp from Soloist was implausible. 0.6.0: PeppyMeter integration. When the screensaver's Spotify metering is enabled, Soloist plays through the metered ALSA path so the VU meters respond to it, and the two plugins agree on the setting whichever is enabled first. Warns if the stock Spotify Connect plugin is also enabled. 0.5.0: new Output Trim (dB) setting, a fixed -12 to +12 dB gain on the Soloist stream before the ALSA chain, for sources that arrive quieter or louder than the rest of the system. It changes what per-source meters and the mixer see without moving the volume knob. 0.4.0: device ownership reworked. The ALSA device is now released when Volumio takes over, so other sources play without disabling the plugin; pausing keeps the device, so resume stays instant. Source switching made reliable by muting MPD's stop announcement during takeover. Volume moved to Volumio's mixer, so the signal into the chain is pre-fader and per-source meters follow the music rather than the volume knob. Lossless playback no longer rushes or stalls: the ring is sized in time and writable_size is bounded by the buffer target. Now-playing shows the Spotify quality tier. 0.3.0: replaced the bundled promise, config and WebSocket helpers with kew, v-conf and ws. Fixes an error emitted on every WebSocket close, and rejects invalid settings instead of discarding them silently. 0.2.0: Volumio 4 ALSA path (Pi + x86). Pulse removed. Control latency under investigation."
  },
  "engines": {
    "node": ">=20",
    "volumio": ">=4"
  },
  "dependencies": {
    "kew": "^0.7.0",
    "v-conf": "^1.4.2",
    "ws": "^8.13.0"
  }
}

===== EXIT CODE =====
0
