Merge pull request #722 from lokal-music/release/v14.0.0
Changelog
Windows builds: free code signing provided by SignPath.io, certificate by SignPath Foundation (code signing policy).
FYI:
Lokal is 100% local; the library, history, anything in database, or any info that is used for API's such as yt-dlp, LRCLIB, is NOT seen by us.
What's Changed
-
Fix desktop Stations metadata: wrapped broadcaster feeds, Icecast song fields and Ogg titles (#720)
Details
Problem
Desktop still shows missing Now Playing for stations even though similar metadata is visible on mobile. The Radio Browser directory gives station details, but desktop's broadcaster/stream metadata path has incompatible parsing and stream-type coverage.
Root causes / fixes
- Wrapped broadcaster feeds: mobile accepts a root array or a
{ radios: [...] }object for Nova. DesktopfromJson/selectEntrypreviously recognized only a root array, losing current-track metadata when wrapped. Select the matching radio byradio.code, with no fallback to an unrelated station. - Icecast JSON: many hosts expose a station name in
source.titleand the actual track insource.song(sometimesyp_currently_playing). Prefer explicit current-song fields and only attribute a track to the correct mount. A single source without alistenurlcan still be used. - Redirects: the previous metadata client set
redirect: 'error', rejecting ordinary HTTP→HTTPS redirects. Follow at most 3 redirects with public-network checks on every hop; continue rejecting localhost/private targets. - Ogg/Opus streams:
icecast-metadata-playeronly requested ICY. Enable Ogg/Vorbis metadata for Opus/Ogg streams and normalizeARTIST+TITLEinto the same song update path used by ICYStreamTitle. - Maintain all existing playback/track-patching and 256 kbps quality filtering; no need to run another background audio stream to inspect the visible station rows.
Tests
- Wrapped Nova JSON with the proper station selected.
- Icecast source current-song priority, mount matching, redirects, private-network refusal.
- ICY vs Ogg metadata normalization and codec-specific parsing mode.
- Existing Radio Browser bitrate and provider metadata regression tests.
Validation
Dedicated
Stations quality and metadataworkflow checks these cases. Please also verify live Nova Danse and a non-Nova MP3/Opus station on desktop: the actual broadcaster determines whether track metadata exists. The directory-reported stream bitrate remains unchanged.Summary by CodeRabbit
-
New Features
- Radio playback now displays track titles from ICY, Ogg, and Opus stream metadata, including artist and title information when available.
- Station information can be read from shared feeds using either a root list or a
radioslist.
-
Bug Fixes
- Improved Icecast track-title selection and support for stations with a single stream source.
- Public metadata redirects can now be followed safely, while redirects to private hosts and other invalid responses are rejected.
-
Tests
- Added coverage for radio stream metadata and station feed formats.
- Wrapped broadcaster feeds: mobile accepts a root array or a
-
Repair Desktop repository rename: Electron updates, release links, radio catalog and Cast Pages (#721)
Details
Confirmed failures
The repository moved from
lokal-music/lokaltolokal-music/Desktop. Electron Builder was still configured to publish/check updates from the formerlokalrepo. The in-app stable-release UI, What's New fetch, Discord project link, documentation and default radio catalogue also used the old name. The Google Cast receiver is hosted on GitHub Pages under the old/lokal/receiver/project path, which does not redirect on repository renames.Fixes
- Change
package.json build.publishto{provider: github, owner: lokal-music, repo: Desktop}to repair release publishing and update manifests on future builds. - Update the app's stable update/changelog API, Settings release link, Discord presence project link and identifiable User-Agent project URLs.
- Update README and contribution cloning/issue links.
- Move default Internet Radio
radios.jsontoraw.githubusercontent.com/lokal-music/Desktop. Automatically migrate users with the formersipbuu/lokalorlokal-music/lokaldefault, preserving custom catalogues and cached stations. - Update Google Cast workflow and operator documentation to the new Pages project path:
https://lokal-music.github.io/Desktop/receiver/. Preserve registered Cast app ID and protocol. - Add independent Node regression tests and GitHub Actions workflow validating publishing target, old catalog compatibility, outbound links and Cast Pages path.
Manual actions after merge
- Desktop → Settings → Pages: confirm Source = GitHub Actions. Run Cast receiver workflow; verify
https://lokal-music.github.io/Desktop/receiver/loads. - In Google Cast SDK Developer Console, update existing application 2060B9B3 Receiver Application URL to that exact new URL; do not create a new application ID. This external Google setting cannot be changed by the PR.
- Update local Git remote to
https://github.com/lokal-music/Desktop.git. Any integrations that call a GitHub Action by its old repository path must be updated (GitHub does not redirect Action references). - Verify the next Desktop nightly/stable release uses the new publisher and the configured signing secrets. Previously installed versions may still use their embedded old updater URL until replaced by a new build.
Older historical issue references stay untouched where they are provenance, not active endpoints.
Summary by CodeRabbit
- Updates
- Repository links for releases, issue reporting, and project information now point to Lokal Desktop’s current GitHub location.
- The app’s changelog, update links, and Google Cast receiver now use the updated repository location.
- Bug Fixes
- Saved radio catalogue links from previous repository locations continue to load the current default catalogue. Custom catalogue links remain unchanged.
- Documentation
- Setup, contribution, and casting instructions now reflect the updated repository and receiver address.
Live Cast URL and incomplete release
Runtime
electron/cast/appId.jsnow points to the canonicalhttps://lokal-music.github.io/Desktop/receiver/project page (in addition to updating the workflow and docs). The Google Cast Console's existing receiver URL must be updated separately, retaining app ID2060B9B3.Existing GitHub tag
v13.0.2has no published GitHub release: workflow run 41598654103 built its platforms but failed uploading the macOS Intel artifact withENOTFOUND. That's a runner networking failure, not caused by the repository rename. Rerunning that old run would use the old updater publisher. To ship the renamed updater reliably, build and publish a new version after merging this PR, rather than depending on the older tag build. Existing packaged apps may require a one-time manual update if their old GitHub updater endpoint stops redirecting. - Change
Contributors: @CHEYCKIT
Full Changelog: v13.0.2...v14.0.0
Setup
See README.md for full setup instructions.
macOS: this build is ad-hoc signed, not notarized (no Developer ID certificate is configured). The first time, right-click Lokal in Applications and choose Open, or run xattr -dr com.apple.quarantine /Applications/Lokal.app.
Binary Checksums (SHA-256)
Lokal-14.0.0-arm64-mac.zip:
[D42F5327A884185AAF91B983807E5B8D7D038E3CB4A5C1EB6DA6011E96A8D388]
Lokal-14.0.0-arm64-mac.zip.blockmap:[3A5B41CFBC7D234EE88867F66E506B46B2590A80D4850B8BDB517F63E304A66C]
Lokal-14.0.0-arm64.AppImage:[A880E1B75341BD0B6752867DB9D8A0EF39CE7344F8B34235BBFB7466432A9FDF]
Lokal-14.0.0-arm64.dmg:[0DEF9FCCC592040483A96423FAD9008C6349B75C5E40A34ABCB76E2B03798E5A]
Lokal-14.0.0-arm64.dmg.blockmap:[ACA674E28599F8B4A94E9D928F20229984917F901AEAD3892737EAE37204372D]
Lokal-14.0.0-mac.zip:[F9F1A02178512565D74B580B5AF642425F48FFAA04DDDBD991842D10CB6EE644]
Lokal-14.0.0-mac.zip.blockmap:[2E4C1F66E9AFEA0AB058704932088C92C2C8B48419C9AFDDF190EDDB617A5270]
Lokal-14.0.0.AppImage:[9F7944F13F5E9B3903620C313DE5653FEE7F2444C6D2C026A007C0AF14ED21A0]
Lokal-14.0.0.dmg:[28BA260C35AF5D22CC8E207CE3E039BE21639D20526C824A19BE465B25876C53]
Lokal-14.0.0.dmg.blockmap:[1FA920B647BCB4085A953ADF758A7F97FE079A877DD4D2E05D9AAD87E7AE2B14]
Lokal-14.0.0.exe:[3FE59462C5FB35BB92DB9E64A9348E57BC84BCCC84101C758F16AA56B4F4FA7D]
Lokal-Setup-14.0.0.exe:[AA276C8873EC6D49FD600776CF3D7F3B40F5CAB871C6666B4546337808B248F4]
Lokal-Setup-14.0.0.exe.blockmap:[873E0D70BD3E385C8BAAA72212335F8A7DC7B71118573C24ED4494B938220BFE]
builder-debug.yml:[3D96D76BD2A231E79D1F91C922D99205CF650CACC1E09C482137403CE3B29762]
latest-linux-arm64.yml:[9CB19C5F24E0F7CA7DF2FEDC633D56BEBAE831E44540559EB887C7101992EBF0]
latest-linux.yml:[9DE9D99E4AC28DA45F596D8E23B66C27F22B452810D362F1DC4DC702FB35B728]
latest-mac.yml:[F78AFEE8D8736E1074EBE8FA14E8C49E8D3669D79B0B412837E79CAB9BE3497B]
latest.yml:[D829B9163FD8B0B610645B480FE35CEF2E4041A72602291FC9DD8EAE43DA87DD]
lokal-music_14.0.0_amd64.deb:[D26EEDEAB4985AA49DA3E3DD2D89B572F430D3278E89543EE5A66EF3BEDA97D1]
lokal-music_14.0.0_arm64.deb:[BA76F469827B3B7D3BECABA5BE4F6BF596E1EDE7E6D87A07A6D5D31827283F80]
