Release Packaging
How RadioCLI is published through npm and Homebrew.
RadioCLI uses two distribution lanes:
- npm for the scoped Node CLI package:
@ciphore/radiocli - Homebrew for the one-command macOS install path:
ciphore/tap/radiocli
npm, pnpm, and Bun can install the npm package. The shipped executable still
runs with Node.js, and package-manager installs should not install system
packages from lifecycle scripts. Native playback and interactive controls come
from mpv, with ffplay from FFmpeg as an optional playback-only fallback.
Linux users install mpv through their distro package manager. Windows users
install Node.js and mpv through winget or Scoop, then install RadioCLI
through npm.
NPM Release
Before publishing:
npm ci
npm run verify:release
npm pack --dry-runTest the packed tarball locally:
VERSION=0.1.5
npm pack
npm install -g "./ciphore-radiocli-$VERSION.tgz"
radiocli --help
radiocli doctor
radiocli checkPublish:
npm login
npm publish --access publicAfter publishing, npm install -g @ciphore/radiocli should install the
executable and all JavaScript dependencies. Users should run radiocli doctor
if playback is not ready.
Optional client smoke checks:
pnpm add -g @ciphore/radiocli
bun add -g @ciphore/radiocli
radiocli doctorCross-platform release smoke checks should cover macOS, Linux, and Windows startup paths:
npm run fresh:check # macOS/Linux
npm run fresh:check # Windows, from PowerShell
radiocli doctorHomebrew Tap
The public tap is Ciphore/homebrew-tap, and users install with:
brew install ciphore/tap/radiocliThe reusable formula template lives in packaging/homebrew/radiocli.rb.template.
After each npm publish, fetch the npm tarball URL and SHA:
VERSION=0.1.5
TARBALL="$(npm view @ciphore/radiocli@$VERSION dist.tarball)"
curl -L "$TARBALL" -o "/tmp/radiocli-$VERSION.tgz"
shasum -a 256 "/tmp/radiocli-$VERSION.tgz"Copy the template into a separate homebrew-tap repository:
homebrew-tap/
Formula/
radiocli.rbReplace {{VERSION}} and {{SHA256}}, then verify:
brew install --build-from-source ./Formula/radiocli.rb
brew test radiocli
radiocli doctorWindows And Linux Native Playback
Windows setup uses native Node.js and native mpv:
winget install --id OpenJS.NodeJS.LTS -e
winget install --id shinchiro.mpv -e
npm install -g @ciphore/radiocli
radiocli doctorScoop users can install mpv with:
scoop bucket add extras
scoop install mpvLinux users should install the distro mpv package before the npm package:
sudo apt install mpv # Debian/Ubuntu
sudo dnf install mpv # Fedora/RHEL-like
sudo pacman -S mpv # Arch/Manjaro
sudo apk add mpv # Alpine
sudo zypper install mpv # openSUSE/SUSEffplay may be installed as an optional fallback through FFmpeg, but release
smoke checks should treat it as playback-only. radiocli doctor reports
controls=limited when only ffplay is available and controls=full when
mpv is available.
AirPlay is experimental on macOS. The npm package bundles the sender bridge, and the Homebrew formula installs FFmpeg so the one-command macOS path exposes AirPlay without extra user setup. Release checks should keep high/critical sender dependency advisories out of the shipped tree. AirPlay should remain an explicit session output rather than the automatic startup fallback.