RADIOCLI

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-run

Test the packed tarball locally:

VERSION=0.1.5
npm pack
npm install -g "./ciphore-radiocli-$VERSION.tgz"
radiocli --help
radiocli doctor
radiocli check

Publish:

npm login
npm publish --access public

After 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 doctor

Cross-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 doctor

Homebrew Tap

The public tap is Ciphore/homebrew-tap, and users install with:

brew install ciphore/tap/radiocli

The 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.rb

Replace {{VERSION}} and {{SHA256}}, then verify:

brew install --build-from-source ./Formula/radiocli.rb
brew test radiocli
radiocli doctor

Windows 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 doctor

Scoop users can install mpv with:

scoop bucket add extras
scoop install mpv

Linux 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/SUSE

ffplay 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.

On this page