github lokal-music/desktop v14.0.0
Release v14.0.0 (Manual Update needed)

3 hours ago

Release Banner

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. Desktop fromJson / selectEntry previously recognized only a root array, losing current-track metadata when wrapped. Select the matching radio by radio.code, with no fallback to an unrelated station.
    • Icecast JSON: many hosts expose a station name in source.title and the actual track in source.song (sometimes yp_currently_playing). Prefer explicit current-song fields and only attribute a track to the correct mount. A single source without a listenurl can 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-player only requested ICY. Enable Ogg/Vorbis metadata for Opus/Ogg streams and normalize ARTIST + TITLE into the same song update path used by ICY StreamTitle.
    • 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 metadata workflow 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 radios list.
    • 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.
  • Repair Desktop repository rename: Electron updates, release links, radio catalog and Cast Pages (#721)

    Details

    Confirmed failures

    The repository moved from lokal-music/lokal to lokal-music/Desktop. Electron Builder was still configured to publish/check updates from the former lokal repo. 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.publish to {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.json to raw.githubusercontent.com/lokal-music/Desktop. Automatically migrate users with the former sipbuu/lokal or lokal-music/lokal default, 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

    1. Desktop → Settings → Pages: confirm Source = GitHub Actions. Run Cast receiver workflow; verify https://lokal-music.github.io/Desktop/receiver/ loads.
    2. 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.
    3. 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).
    4. 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.js now points to the canonical https://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 ID 2060B9B3.

    Existing GitHub tag v13.0.2 has no published GitHub release: workflow run 41598654103 built its platforms but failed uploading the macOS Intel artifact with ENOTFOUND. 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.

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]

Don't miss a new desktop release

NewReleases is sending notifications on new releases.