what's changed
added
- every sunnify binary is now also a headless CLI (closes #81). run it with a command and it never opens a window:
sunnify download <url>drives the exact engine the app uses - same matcher, file naming, tag writer, resume manifest, and settings file - so a scripted download behaves identically to a clicked one. commands:download,info,status,config,doctor. built to the command line interface guidelines: nothing is ever interactive, exit codes mean things (0 ok, 1 partial, 2 usage, 3 environment),--helpshows your current saved defaults, re-running a playlist resumes it, and a per-folder lock stops two runs from racing the same destination. full reference in docs/CLI.md. - first-class output for scripts and AI agents.
download --jsonstreams NDJSON progress events ending in arun_summaryterminator, and errors are typed envelopes (code+hint) so automation branches on codes instead of parsing english.info,status,config, anddoctor --jsoneach emit one clean JSON document. sunnifylands on PATH through every install channel.brew install --cask sunnifynow symlinks the CLI via the cask's binary stanza; new one-line installers for macOS/Linux (curl | sh) and Windows (iwr | iex) install user-scope with zero prompts, zero sudo, zero UAC - and verify the release asset's SHA256 againstchecksums.txtbefore installing anything;pipx install git+...works straight from source. every channel routes through the official release assets, so downloads stay counted and SLSA-attested.- cli runs leave the same forensic trail as the app. shared rotating session log, invocation and exit-code markers around every run, and the same signal forensics the app ships: a killed cli run logs its killer before dying with default semantics.
- releases now smoke-test both personalities. the pipeline boots every freshly built binary AND exercises its CLI (
--version,config) on all four platforms before anything gets attested - inside the same reusable workflow, so build l3 provenance is unchanged.
changed
- yt-dlp 2026.6.9 -> 2026.7.4 in shipped binaries. youtube extraction moves fast; verified live before locking.
verifying this release
sha256sum -c checksums.txt --ignore-missing
gh attestation verify Sunnify-Linux --repo sunnypatell/sunnify-spotify-downloaderinstall via homebrew (macos)
brew tap sunnypatell/sunnify https://github.com/sunnypatell/sunnify-spotify-downloader
brew install --cask sunnifyfull changelog: v2.1.1...v2.2.0
thanks @mattiadepaoli-hash for pushing on the headless story in #81 - this release exists because of that issue.
⭐ if sunnify saved you time, star the repo - stars are how people find it.
attestations from this build
direct links to each attestation generated by the workflow run that produced these binaries (sigstore-signed, public-good rekor log entry, SLSA build L3 via the release-build.yml reusable workflow):
- build provenance: Sunnify-Windows.exe
- build provenance: Sunnify-Linux
- build provenance: Sunnify-macOS.zip
- build provenance: Sunnify-macOS-Intel.zip
- sbom attestation for the binaries
- build provenance for the source tarball
the *.sigstore.json assets attached above are the same attestations as offline-verifiable bundles. these get auto-refreshed on every release re-build, so the links above always correspond to the binaries currently attached to this release.