| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| checksums.txt | 2026-09-28 | 524 Bytes | |
| cliamp-darwin-amd64 | 2026-09-28 | 38.2 MB | |
| cliamp-darwin-arm64 | 2026-09-28 | 34.9 MB | |
| cliamp-linux-amd64 | 2026-09-28 | 38.0 MB | |
| cliamp-linux-arm64 | 2026-09-28 | 35.7 MB | |
| cliamp-windows-amd64.exe | 2026-09-28 | 38.0 MB | |
| cliamp-windows-amd64.zip | 2026-09-28 | 14.0 MB | |
| README.md | 2026-09-28 | 32.9 kB | |
| v2.3.0 source code.tar.gz | 2026-09-28 | 1.6 MB | |
| v2.3.0 source code.zip | 2026-09-28 | 1.9 MB | |
| Totals: 10 Items | 202.4 MB | 10 | |
What's Changed
- ci(release): build the Intel macOS codec libs from source by Bjarne Oeverli (@bjarneo) (
d0501a3) - feat(radio): open on the cliamp radio channels as playlists by Bjarne Oeverli (@bjarneo) (
30ffcaa) - fix(spotify): stop crashing on tracks without normalisation params (#522) by Lukasz Jagiello (@ljagiello) (
eb59f54) - feat(lua): let queue.add take a track table queued as given (#566) by Gjermund Garaba (@gjermundgaraba) (
b4689cf) - feat(lua): emit playback.stop when the user stops playback (#536) by Gjermund Garaba (@gjermundgaraba) (
2342c0d) - fix(ui): omit repeated show names from podcast episode rows (#564) by David Siegel (@dvdsgl) (
d0c4e32) - feat(lua): expose track.is_live for streams with no track boundary (#535) by Gjermund Garaba (@gjermundgaraba) (
f85829d) - fix(player): read yt-dlp PCM from a pipe cliamp owns (#561) by Gjermund Garaba (@gjermundgaraba) (
276713b) - fix(playback): cancel a scheduled reconnect on stop (#556) by Gjermund Garaba (@gjermundgaraba) (
e0559a5) - fix(resolve): mark yt-dlp live streams as realtime (#534) by Gjermund Garaba (@gjermundgaraba) (
f00408b) - test(ui): bind a plugin-ownable key in the full-screen visualizer test (#555) by Gjermund Garaba (@gjermundgaraba) (
41bab63) - fix(ui): pin favorite marker column to avoid layout shift by Taha Sadough (@tahadx) (
06ee7af) - fix(ui): stop showing add/remove favorite notifications in the footer (#440) by Taha Sadough (@tahadx) (
903a1ed) - Revert "fix(lua): let plugins bind uppercase keys (#525)" (#547) by bjarneo (@bjarneo) (
72d786d) - fix(ui): dispatch plugin keys in the full-screen visualizer (#545) by Gaurab KC (@gaurabxkc) (
e5baeae) - fix(lua): let plugins bind uppercase keys (#525) by Gaurab KC (@gaurabxkc) (
ac2d1bc) - feat(lua): emit queue.end when playback runs out of tracks (#533) by Gjermund Garaba (@gjermundgaraba) (
57ae3ba) - feat(spotify): populate album art for Spotify tracks (#527) by Gaurab KC (@gaurabxkc) (
8e27e96) - Merge pull request [#532] from gaurabxkc/docs/community-plugins-autoplay-pomodoro by Gaurab KC (@gaurabxkc) (
da63f89) - fix(lua): route play_pause, stop, and seek through the model (#500) by Gjermund Garaba (@gjermundgaraba) (
ed98f8e) - docs: add discord link to readme by Bjarne Oeverli (@bjarneo) (
4dee32c) - feat(site): add discord link to header by Bjarne Oeverli (@bjarneo) (
bee3309) - Merge pull request [#510] from srgrsj/feat/download-directory by bjarneo (@bjarneo) (
4809680) - fix(config): reject relative download directories by Sergei Zhukov (@srgrsj) (
ce99ae4) - feat(config): make the track save directory configurable by Sergei Zhukov (@srgrsj) (
444105a) - Merge pull request [#369] from tharinfernando/feat/spotify-lyrics by Bjarne Oeverli (@bjarneo) (
81ec636) - fix(lyrics): gate offset keys on synced lyrics and surface save errors by Bjarne Oeverli (@bjarneo) (
9e8be78) - Merge branch 'main' into fix/pr-369 by Bjarne Oeverli (@bjarneo) (
06513f2) - Merge pull request [#450] from cesarho/fix/resample-headroom-clipping by Bjarne Oeverli (@bjarneo) (
ddc53a4) - test(player): prove resampler overshoot with a full-scale source by Bjarne Oeverli (@bjarneo) (
5463e95) - Merge branch 'main' into fix/pr-450 by Bjarne Oeverli (@bjarneo) (
3a18256) - Merge pull request [#439] from wundervrc/feat/spotify-progressive-track-loading by Bjarne Oeverli (@bjarneo) (
d877587) - fix(spotify): retire in-flight track pages on wholesale queue replacement by Bjarne Oeverli (@bjarneo) (
d40d69b) - Merge branch 'main' into fix/pr-439 by Bjarne Oeverli (@bjarneo) (
4fe8948) - Merge pull request [#477] from oweneldridge/playlist-queue by Bjarne Oeverli (@bjarneo) (
a58017d) - perf(queue): render the inline queue from a bounded window by Bjarne Oeverli (@bjarneo) (
cb6ef44) - Merge branch 'main' into fix/pr-477 by Bjarne Oeverli (@bjarneo) (
bd202da) - Merge pull request [#476] from oweneldridge/podcast-subscriptions by Bjarne Oeverli (@bjarneo) (
77f80de) - fix(subs): surface empty shows to the status line from the provider list by Bjarne Oeverli (@bjarneo) (
77435a2) - Merge branch 'main' into fix/pr-477 by Bjarne Oeverli (@bjarneo) (
0a07865) - Merge branch 'main' into fix/pr-476 by Bjarne Oeverli (@bjarneo) (
add62de) - Merge pull request [#475] from oweneldridge/podcast-progress by Bjarne Oeverli (@bjarneo) (
d9c1e3a) - fix(podcast): scope progress identity to the feed and clear played on restart by Bjarne Oeverli (@bjarneo) (
bc5fda5) - Merge branch 'main' into fix/pr-450 by Bjarne Oeverli (@bjarneo) (
35aae7a) - Merge branch 'main' into fix/pr-439 by Bjarne Oeverli (@bjarneo) (
975586b) - Merge branch 'main' into fix/pr-475 by Bjarne Oeverli (@bjarneo) (
7abc2ea) - Merge pull request [#438] from RGR09/main by Bjarne Oeverli (@bjarneo) (
1f323e8) - Merge pull request [#479] from oweneldridge/visualizer-fixes by Bjarne Oeverli (@bjarneo) (
0ce5a91) - Merge pull request [#505] from legacynode/ci/nix-flake-build by Bjarne Oeverli (@bjarneo) (
cdfba47) - fix(queue): never spend the last row on an album header by Owen Eldridge (@oweneldridge) (
a4eb17e) - fix(podcast): only providers that list shows get the l and a keys by Owen Eldridge (@oweneldridge) (
6361052) - fix(playlists): keep the stored track on prepend, scroll the queue past headers by Owen Eldridge (@oweneldridge) (
e8d4608) - fix(podcast): load overlay episodes through the subscription provider; forward F to plugins by Owen Eldridge (@oweneldridge) (
9e3201e) - docs(site): mention the queue view and playlist append by Owen Eldridge (@oweneldridge) (
c6de2dd) - docs(site): mention the subscriptions overlay by Owen Eldridge (@oweneldridge) (
7dbea4f) - feat(queue): keep the playback chrome when the queue is open by Owen Eldridge (@oweneldridge) (
659309b) - feat(podcast): append a whole show from the provider list by Owen Eldridge (@oweneldridge) (
32ab699) - feat(queue): show the queue the way the playlist is shown by Owen Eldridge (@oweneldridge) (
738b794) - feat(podcast): queue the latest episode from the provider list by Owen Eldridge (@oweneldridge) (
de64115) - feat(playlists): append a saved playlist to the current one by Owen Eldridge (@oweneldridge) (
179259d) - feat(podcast): browse subscribed shows and pull latest episodes by Owen Eldridge (@oweneldridge) (
cadecf4) - feat(playlists): add tracks to the start of a saved playlist by Owen Eldridge (@oweneldridge) (
c315e1f) - docs(podcast): state the publication-date rule for the URL fallback by Owen Eldridge (@oweneldridge) (
5a783ad) - feat(radio): who's listening globe as an easter egg by Bjarne Oeverli (@bjarneo) (
4871f0c) - docs: link cliamp mobile from the readme and the site by Bjarne Oeverli (@bjarneo) (
5f16265) - fix(yandex): accept string and numeric artist IDs (#509) by Sergei Zhukov (@srgrsj) (
f964dd5) - fix(podcast): tell same-titled no-GUID episodes apart by publication date by Owen Eldridge (@oweneldridge) (
637e523) - fix(podcast): carry a URL-keyed episode's record across a CDN rewrite by Owen Eldridge (@oweneldridge) (
4616ef9) - fix(podcast): refuse a progress file written by a newer cliamp by Owen Eldridge (@oweneldridge) (
d2bc19e) - fix(vis): label the playing track's own provider, wrap the save error by Owen Eldridge (@oweneldridge) (
1606447) - feat(vis): hide the episode name in the full screen visualizer by Owen Eldridge (@oweneldridge) (
2f7e523) - fix(vis): persist the visualizer set over IPC by Owen Eldridge (@oweneldridge) (
bc3aab5) - fix(podcast): a short episode counts as played past its midpoint by Owen Eldridge (@oweneldridge) (
3d525e0) - fix(podcast): one record per episode, scoped by feed, with title aliases by Owen Eldridge (@oweneldridge) (
090c76b) - docs(site): mention episode resume and played state by Owen Eldridge (@oweneldridge) (
7ef8c9f) - fix(podcast): keep listening position when a track loses its metadata by Owen Eldridge (@oweneldridge) (
bb531ec) - fix(podcast): keep an episode's metadata when it is saved to a playlist by Owen Eldridge (@oweneldridge) (
fb42670) - feat(podcast): remember per-episode position and played state by Owen Eldridge (@oweneldridge) (
89ea079) - Merge pull request [#474] from oweneldridge/podcast-seekable-length by Owen Eldridge (@oweneldridge) (
23ddf04) - Preserve symlinks when saving files (#494) by Robert Holak (@rholak) (
30e953a) - ci: add Nix flake builds by Neo Lehmann (@legacynode) (
bb12801) - fix(setup): name the supported result navigation keys (#496) by Gjermund Garaba (@gjermundgaraba) (
a166178) - fix press q to quit on setup (#495) by Diego Dorado (@diegodorado) (
d8b24df) - fix(radio): share station favorites with playback (#493) by Gjermund Garaba (@gjermundgaraba) (
cac0399) - Merge pull request [#480] from legacycode-forks/ci/update-github-actions by bjarneo (@bjarneo) (
9864404) - Merge pull request [#481] from legacycode-forks/ci/align-local-and-github-checks by bjarneo (@bjarneo) (
d792692) - Merge pull request [#482] from legacycode-forks/ci/improve-workflow-observability by bjarneo (@bjarneo) (
e509c6c) - feat(lua): expose queue.has_next for playback continuation (#488) by Gjermund Garaba (@gjermundgaraba) (
ee8e250) - fix(lua): queue.list reported every track as queued (#487) by Gjermund Garaba (@gjermundgaraba) (
55d6819) - fix(ui): refuse stale stream starts after a stop (#486) by Gjermund Garaba (@gjermundgaraba) (
abad20e) - fix(ui): persist theme picker selection (#483) by legacynode (@legacynode) (
f3e7b55) - test(jellyfin): assert MediaBrowser scheme on standard Authorization header (#460) by Dimas Setia Pambudi (@setiapam) (
6762dd8) - fix(ui): emit track-change events for yt-dlp sources (#484) by Gjermund Garaba (@gjermundgaraba) (
62a102d) - fix(docs): correct docs and seek help that contradict the code (#467) by BAKocska (@BAKocska) (
423d9fc) - ci: improve workflow observability by Neo Lehmann (@legacynode) (
1ef7eec) - ci: update GitHub Actions by Neo Lehmann (@legacynode) (
df14ced) - ci: align local and GitHub checks by Neo Lehmann (@legacynode) (
1be0e52) - fix(jellyfin): restore auth and streaming on Jellyfin 12 (#471) by Henrik N (@heggrik) (
6c16a71) - refactor(ui): centralize theme style initialization (#472) by Gjermund Garaba (@gjermundgaraba) (
3f71671) - fix(nix): refresh vendorHash so the flake builds again (#459) by Levon Kirakosyan (@noosxe) (
6b2e85b) - fix(ui): rebuild favorite heart styles on theme change (#466) by BAKocska (@BAKocska) (
0014888) - spotify: bind OAuth callback to loopback (#461) by Bruno Rodrigues (@brunorodriguescabral) (
d96b66d) - Fix Navidrome transcoding configuration and player identity (#445) by Gjermund Garaba (@gjermundgaraba) (
83e5e2a) - feat(ui): start with the playlist expanded via config or flag (#395) by RyLoS (@rylos) (
55d53dd) - Smooth ClassicPeak sampling and redraws by Gjermund Garaba (@gjermundgaraba) (
764ca0d) - Smooth ClassicPeak sampling and redraws by Gjermund Garaba (@gjermundgaraba) (
2984da4) - Merge branch 'bjarneo:main' into main by RGR09 (@RGR09) (
132a835) - fix(player): apply headroom before resample to prevent clipping by Cesar Ho (@cesarho) (
1800abe) - Merge pull request [#448] from AlexZeitler/feat/red-sector-visualizer by bjarneo (@bjarneo) (
93a4ac6) - feat(ui): add RedSector visualizer mode by Alexander Zeitler (@AlexZeitler) (
220fb30) - Merge branch 'bjarneo:main' into main by RGR09 (@RGR09) (
b7aaebe) - Merge pull request [#442] from TyRichards/feat/persistent-music-choice by bjarneo (@bjarneo) (
d40cb79) - merge: preserve updated site with Jellyfin resume docs by Bjarne Oeverli (@bjarneo) (
78cf54b) - fix(jellyfin): address resume review and sync main by Bjarne Oeverli (@bjarneo) (
19e079b) - feat(site): new OG image and a logo that follows the theme by Bjarne Oeverli (@bjarneo) (
7ac3f3a) - feat(site): follow the Omarchy desktop theme by Bjarne Oeverli (@bjarneo) (
e8b444f) - feat(site): redesign landing page and serve install.sh from cliamp.stream by Bjarne Oeverli (@bjarneo) (
2cb7f72) - Merge branch 'bjarneo:main' into main by RGR09 (@RGR09) (
fff7a9a) - feat(jellyfin): restore playback context by Ty Richards (@TyRichards) (
81d2a80) - fix(spotify): wrap the playlist snapshot errors by wunder (@wundervrc) (
511c5c6) - feat(spotify): resume a playlist load on an unchanged snapshot by wunder (@wundervrc) (
7775996) - fix(spotify): route saved albums and narrow the resume rule by wunder (@wundervrc) (
b05baff) - docs(spotify): document the paging entry points by wunder (@wundervrc) (
7772e86) - fix(ui): name the playlist to reopen in the changed-list notice by wunder (@wundervrc) (
492ead7) - fix(ui): let the changed-list notice expire by wunder (@wundervrc) (
455e351) - fix(docs): added "make" to packages to install by RGR09 (@RGR09) (
0973ac2) - Fix(docs): corrected formatting by RGR09 (@RGR09) (
6b29847) - fix(docs): build from source on windows by RGR09 (@RGR09) (
c5fcd03) - fix(spotify): stop a paged load once the library moves under it by wunder (@wundervrc) (
e5918e0) - fix(ui): retire a paged load when IPC replaces the queue by wunder (@wundervrc) (
8ee9028) - fix(ui): hold off preloading until a paged load settles by wunder (@wundervrc) (
e706757) - fix(ui): drop a stale preload when a page lands by wunder (@wundervrc) (
49a5575) - test(ui): pin the album header against later pages by wunder (@wundervrc) (
025bbfe) - refactor(spotify): collapse the paging test stubs by wunder (@wundervrc) (
9d24a95) - test(spotify): cover resuming several abandoned lists by wunder (@wundervrc) (
13e4d54) - fix(spotify): compare the head before resuming an abandoned load by wunder (@wundervrc) (
6fe0dcd) - perf(spotify): resume an abandoned load instead of restarting it by wunder (@wundervrc) (
97303f2) - test(spotify): assert the restart lands on the settled snapshot by wunder (@wundervrc) (
76a8a11) - fix(spotify): restart a full load when the library moves under it by wunder (@wundervrc) (
1146916) - test(ui): guard the append path against superseded pages by wunder (@wundervrc) (
9dd3550) - fix(spotify): pin the snapshot a progressive load started from by wunder (@wundervrc) (
e911624) - fix(ui): unblock the provider pane while pages load by wunder (@wundervrc) (
5ec8d3d) - chore: ignore coverage.out by wunder (@wundervrc) (
c7d65eb) - test(spotify): assert superseded pages still reach the caller by wunder (@wundervrc) (
feb53a2) - refactor(spotify): fold paging into tracksLoadedMsg by wunder (@wundervrc) (
351c0a4) - feat(spotify): load playlist tracks progressively by wunder (@wundervrc) (
a3cfa68) - Merge remote-tracking branch 'origin/main' into feat/spotify-lyrics by Tharin Fernando (@tharinfernando) (
e6d31e5) - spotify lyrics: fetch synced lyrics from color-lyrics endpoint by Tharin Fernando (@tharinfernando) (
948464f)
Checksums (SHA256)
c0b5af09abca83a615d2f47146adcfc61b0723b333509b5eeb6c8ada11cce6d3 cliamp-darwin-amd64
5917a5071c79768c6c8eb33d027a3f4bd0713a27ae9531ca1a161bb6c13dd357 cliamp-darwin-arm64
5c59b5380c5165b473c06148c108ee60a18a1f9961f8013e38b4a68ed5def641 cliamp-linux-amd64
827b4aa879feecab33ea621dc1460c60ffa765c210b5046d679ce5a4073d2b32 cliamp-linux-arm64
97d591be7a26ae9068ba51e69ae63b338413509e5f42758d9a2866a236ff54a9 cliamp-windows-amd64.exe
13d5cd2235af71fdfca0259f4aa4502d066c51218f404cffbefef52978a89843 cliamp-windows-amd64.zip
Full Changelog: https://github.com/bjarneo/cliamp/compare/v2.2.0...v2.3.0