Skip to content

Releases: Rohithdgrr/OPEN-MUSIC

OPEN MUSIC v0.5.1

Choose a tag to compare

@github-actions github-actions released this 11 Oct 12:53

Full Changelog: v0.5.0...v0.5.1

OPEN MUSIC v0.5.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 08:50

Full Changelog: v0.4.0...v0.5.0

TRANCE MUSIC v0.4.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 22:54

Title: TRANCE MUSIC v0.4.0

Fourth packaged release — and the first multi-source one: the catalog layer is
now source-agnostic (JioSaavn, Audius, Spotify), Android actually plays musicon a fresh install, and CI runs the same suite on Windows, Linux and macOS.

Install

File Size Best for
TRANCE.MUSIC_0.4.0_x64-setup.exe ~5.6 MB Double-click install with Start-menu shortcut wizard
TRANCE.MUSIC_0.4.0_x64_en-US.msi ~8.1 MB Group Policy / silent installs, plain Windows Installer
TRANCE.MUSIC_0.4.0_amd64.deb ~8.1 MB Debian/Ubuntu (dpkg -i or Software Center)
TRANCE.MUSIC_0.4.0_amd64.AppImage ~83 MB Run anywhere on x64 Linux, no install
TRANCE.MUSIC_0.4.0_aarch64.dmg ~7.0 MB Drag-to-Applications on Apple Silicon Macs
app-universal-release.apk ~19 MB Android sideload (arm64-v8a + armeabi-v7a + x86_64)

The signed updater bundle (TRANCE.MUSIC.app.tar.gz + .sig) and both manifests
(latest.json, update.json) ship with the release, so the in-app updater and
Revert list resolve offline of nothing.

iOS: no artifact on this release — ios.yml is workflow_dispatch-only now
(simulator builds no longer ride desktop release tags). The iOS target is still
compiled on every CI run, so it cannot rot silently.

Windows 10/11 x64 with WebView2 (preinstalled on Win 11). Linux x86_64 (the
AppImage needs FUSE; the .deb registers the launcher). macOS 13+ on Apple
Silicon. Existing installs upgrade in place — same
com.openmusic.trancemusic identifier; your offline vault is never touched by
installing or updating. It now lives in the app's own data folder
(%LOCALAPPDATA% / ~/.local/share / ~/Library/Application Support →
TRANCE MUSIC), and a legacy Downloads/TRANCE MUSIC vault is migrated onceon first launch.

SmartScreen note: the updater package is signed with this project's> release key (verified by the app before anything runs), but the installers
built in CI are not yet Authenticode-signed — the certificate lives on the
maintainer's machine, not the runner. On first run Windows may show
"Windows protected your PC" / unknown publisher — click More info →
Run anyway
.

macOS note: the .dmg is not Apple-notarized. On first launch
right-click → Open (or clear the quarantine flag with
xattr -d com.apple.quarantine). The signed updater bundle inside is
verified by the app before anything runs.

Android note: the APK is unsigned — allow Install unknown apps for> whichever app you open it from. Sideloading the new APK over the old one keeps
your vault and settings.

Highlights

  • Multi-source catalogs behind one trait. catalog.rs defines a
    source-agnostic Catalog trait (search, metadata, playback URLs, home feed,
    radio, suggestions) implemented by jiosaavn_catalog.rs, audius.rs (a
    licensed, decentralized source) and spotify.rs. proxy.rs stays purely an
    HTTP layer, so a new source is a module, not a fork. JioSaavn is an unofficial
    API and is treated as dev/test only; Audius is the licensed path.
  • Spotify sign-in and import on desktop. OAuth 2.0 PKCE over an ephemeral
    127.0.0.1 loopback listener (RFC 8252 — no client secret). The refresh token
    goes to the OS credential store (Windows Credential Manager / Keychain /
    Secret Service — the native keyring features are enabled, which is the whole
    trick: keyring 3 ships no default store and silently falls back to an
    in-memory mock), the access token is memory-only. Client id is a compile-time
    TRANCE_MUSIC_SPOTIFY_CLIENT_ID; builds without one run fine and every
    command reports "not configured". Plus Exportify CSV → local playlist
    import and top-tracks import.
  • A real app database (store.db). SQLite + WAL, deliberately separate from
    the vault ledger: a song metadata cache with play/favourite counters and
    queryable recent / most-played / favourites columns, a small kv table for
    prefs that must survive localStorage eviction, and a 6 h / 200-row search
    cache. Both shells write through store_db.js; audio bytes are never stored,
    only track JSON, and a missing store degrades to localStorage instead of
    breaking.
  • Search that returns something. One app page now merges 4 upstream pages —
    upstream page 1 for common queries was degenerating into near-duplicate rows
    that dedup collapsed from 30 to 2 songs. Load-more counts rows pre-dedup so it
    stays honest, mobile ranking reuses the desktop's fuzzy.js score with a ↕
    chip cycling relevance / quality / popular / length / A–Z, and a "did you
    mean" action rides search_suggestions.
  • Android plays music on a fresh install.
    Number(localStorage.getItem("tm-mobile-vol")) is 0 for a missing key and
    Number.isFinite(0) is true, so the <audio> element shipped muted every
    first run. Volume reads go through baseVol(), which treats an absent key as
    full volume (regression test added).
  • Mobile feature pass. AI lyrics fallback for songs the LRCLIB/JioSaavn
    cascade doesn't know (your own Gemini key, stored locally, one call per track,
    cached, always labelled, never overwriting real synced lyrics); listening
    streaks plus a "New from artists you follow" shelf on Home; TRANCE-SHARE v1
    playlist codes (paste a code, get the playlist with full track objects); a
    per-track EQ sheet and crossfade length next to gapless; tab swipes,
    swipe-to-dismiss and drag-to-reorder in the queue sheet, mini-art tap/long-press, shared-element zoom; native Android bridges (MediaHub.kt:
    notification, lock screen, homescreen widget, Bluetooth/car/headset via
    MediaSession); and a 40-entry Diagnostics ring buffer behind Settings.
  • Desktop additions. Sleep timer shared by both shells (15/30/60/90 min with
    a 15 s volume ramp before the pause) and the Exportify importer.
  • UI polish. Now Playing lyrics rewritten for the light theme (transparent
    surface, clean type, karaoke sweep), the Master Audio Specs deck removed from
    Now Playing, hover/elevation parity across Playlist / Album / Library / History
    rows, and the mini widget re-cut with curved acrylic-obsidian corners.
  • CI that proves the matrix. Every push runs ESLint, node --test,
    per-module node --check, the Tailwind build, cargo fmt, clippy -D warnings and cargo test on windows-latest + ubuntu-latest +
    macos-latest
    , plus an iOS simulator-target compile check and cargo audit.
    Dedicated Linux and macOS workflows build .deb / AppImage and .dmg and run
    a post-build smoke test.
  • Docs and a real front page. docs/cross-platform-ci.md,
    docs/android-silent-playback.md (the full silent-playback post-mortem), a
    rebuilt mobile doc set, and a TRANCE MUSIC landing page published from
    index.html via GitHub Pages.

Fixed

  • Mobile search threw ReferenceError: Cannot access 'entityKinds' before initialization on every mount (the sort-chip guard read it above its
    const) — the screen rendered nothing behind a red toast.
  • Mobile playlist create/rename/delete used prompt() / confirm(), which
    don't open in an Android WebView. All three moved into the shared themed
    bottom sheet, and library removal matches by id instead of title.
  • The search sort chip called go() with an unchanged hash, so nothing
    remounted. The sort now rides in the URL (&s=) and survives back-navigation.
  • The iOS workflow passes the CLI's own target name (aarch64-sim) to
    tauri ios build, and desktop release tags no longer drag simulator builds
    along with them.

Verification

  • Rust: 152 unit tests (OP_OFFLINE=1 in CI skips the 17 live-upstream
    ones), cargo fmt --check, clippy --all-targets -D warnings, cargo audit.
  • Frontend: 82 tests under node --test (up from 58), ESLint, per-module
    node --check, CSS build.
  • Mobile: verified on an emulator (Pixel6_API36) over CDP + logcat — search
    volume 52 → 125 rows on scroll auto-load, sort chip, in-screen filters,
    downloads with live progress/cancel/pause, vaulted offline playback, SQLite
    present and growing, airplane-mode relaunch. Recipe in
    verify.md.
  • Release guard: binaries → verify → manifests; every manifest URL is resolved
    against the live release before latest.json / update.json attach, so a
    manifest with unresolvable URLs cannot ship.

Upgrade

From v0.3.0: use Settings → Updates in-app (this release ships its own
update.json, so v0.4.0 is a valid Revert target), or install the new build
over the old one — same identifier, same vault, nothing to migrate. Android
users sideload the new APK over the old one.

Known gaps

  • CI-built installers still skip Authenticode (SmartScreen prompt on first run)
    and the macOS .dmg is not notarized (Gatekeeper prompt). The Android APK is
    unsigned.
  • iOS has no release artifact by design; the workflow is manual-only.
  • Audius and Spotify implement the catalog trait, but there's no source switcher
    in the UI yet — the surfaces are search, metadata, sign-in and import.
  • Downloads cancel is UI-best-effort: download_song has no abort channel, so
    bytes keep flowing and the finished file is deleted after landing.
  • This tag predates 5 CI-only fixes on main (fmt/clippy drift, an iOS
    setup-rust-toolchain key typo, and a flaky live-radio test). The shipped
    binaries are unaffected, but main is green where the tag is not — a
    v0.4.1 would pick them up.
  • Tailwind and the icon font still load from a CDN at runtime.

Full Changelog: v0.3.0...v0.4.0

TRANCE MUSIC v0.3.0

Choose a tag to compare

@github-actions github-actions released this 03 Oct 15:06

Title: TRANCE MUSIC v0.3.0

Third packaged release - and the first multi-OS one: the same tag now ships Windows, Linux, and macOS installers, all covered by the signed in-app update channel.

Install

File Size Best for
TRANCE.MUSIC_0.3.0_x64-setup.exe ~5.5 MB Double-click install with Start-menu shortcut wizard
TRANCE.MUSIC_0.3.0_x64_en-US.msi ~7.9 MB Group Policy / silent installs, plain Windows Installer
TRANCE.MUSIC_0.3.0_amd64.deb ~7.9 MB Debian/Ubuntu (dpkg -i or Software Center)
TRANCE.MUSIC_0.3.0_amd64.AppImage ~83 MB Run anywhere on x64 Linux, no install
TRANCE.MUSIC_0.3.0_aarch64.dmg ~6.8 MB Drag-to-Applications on Apple Silicon Macs

Windows 10/11 x64 with WebView2 (preinstalled on Win 11). Linux x86_64 (the AppImage needs FUSE; the .deb registers the launcher). macOS 13+ on Apple Silicon. Existing installs upgrade in place - same com.openmusic.trancemusic identifier; your offline vault in Downloads/TRANCE MUSIC is never touched by installing or updating.

SmartScreen note: the updater package is signed with this project's release key (verified by the app before anything runs), but the installers built in CI are not yet Authenticode-signed - the certificate lives on the maintainer's machine, not the runner. On first run Windows may show "Windows protected your PC" / unknown publisher - click More info → Run anyway.

macOS note: the .dmg is not Apple-notarized. On first launch right-click → Open (or clear the quarantine flag with xattr -d com.apple.quarantine). The signed updater bundle inside is verified by the app before anything runs.

Highlights

  • First Linux + macOS builds - the Release workflow builds all three OSes in parallel from one tag push: NSIS + MSI on Windows, .deb + AppImage on Ubuntu, .dmg + signed updater bundle on macOS.
  • Mobile UI polish - the Home header drops the STUDIO badge for the REON logo mark; the mini player no longer overlaps Now Playing; the square header dot is gone from all 7 Library-family screens; the Offline Vault storage/telemetry card is removed; the lyrics card fits ~3 lines with the active line centred; Now Playing queue rows get a kebab menu (play next, add to queue/playlist, remove from queue), a live Up Next count, and a working View Queue link.
  • Updates now resolve on mobile - update_check registers on Android (GitHub REST path with a 5-minute cache and rate-limit-friendly errors); install/rollback stay desktop-only.
  • A release pipeline that verifies itself - the manifest builder now uses GitHub's stored asset names (spaces → dots, matching the uploader's rule), and a new CI gate resolves every manifest URL after the binaries land but before the manifests attach. A manifest whose URLs don't resolve can no longer ship. The iOS workflow is manual-only (no more simulator builds riding desktop release tags).

Fixed

  • Tagged releases 404'd in-app updates: latest.json/update.json pointed at space-encoded asset names GitHub never stores. Manifests now reference the stored (dotted) names, guarded by the new verify step.
  • Pre-existing cargo fmt drift and two clippy -D warnings errors (lyrics doc list, sort_by → sort_by_key) - CI is fully green.

Verification

  • Rust: 138 unit tests, cargo fmt --check, clippy --all-targets -D warnings, cargo audit.
  • Frontend: 58 tests under node --test, ESLint, per-module node --check.
  • Release guard: every manifest URL is HEAD-checked against the live release before latest.json/update.json attach; tag/version mismatch still fails the run loudly.

Upgrade

From v0.2.0: use Settings → Updates in-app (the update manifest now ships with every release, so v0.3.0 installs in place with signature verification), or install the new build over the old one. This is the first release carrying its own per-tag update.json, so v0.3.0 is a valid Revert target going forward.

Known gaps

  • CI-built installers skip Authenticode until the certificate is imported on the runner (SmartScreen prompt persists); the macOS build is not Apple-notarized (Gatekeeper prompt on first launch).
  • Releases published before v0.2.0 carry no signed update package - they appear in the revert list but can only be reinstalled from the assets here.
  • Radio / endless-playback backend is landed but not wired to the UI.
  • Tailwind and the icon font still load from a CDN at runtime.

TRANCE MUSIC v0.2.0

Choose a tag to compare

@Rohithdgrr Rohithdgrr released this 01 Oct 21:28

Title: TRANCE MUSIC v0.2.0

Second packaged release — the app now updates itself, caches what it plays,
and opens on Home.

Install

File Size Best for
TRANCE.MUSIC_0.2.0_x64-setup.exe ~2.1 MB Double-click install with Start-menu shortcut wizard
TRANCE.MUSIC_0.2.0_x64_en-US.msi ~3.0 MB Group Policy / silent installs, plain Windows Installer

Windows 10/11 x64 with WebView2 (preinstalled on Win 11). Existing installs
upgrade in place — same com.openmusic.trancemusic identifier; your offline
vault in Downloads/TRANCE MUSIC is never touched by installing or updating.

SmartScreen note: the updater package is signed with this project's
release key (verified by the app before anything runs), but the installers
built in CI are not yet Authenticode-signed — the certificate lives on the
maintainer's machine, not the runner. On first run Windows may show
"Windows protected your PC" / unknown publisher — click More info →
Run anyway
. Importing the CA-issued certificate into the release workflow
(and the SmartScreen reputation that follows) is planned.

Highlights

  • In-app updates (Settings → Updates) — the app checks GitHub for a new
    release once a day and shows a single toast per version. The Updates panel
    reports the running build vs the latest, shows release notes, and installs
    the signed package with a live download → signature-verify progress bar;
    the passive installer runs and the new version relaunches. Every package is
    verified against the release public key pinned in tauri.conf.json — a
    tampered asset fails the signature check and nothing executes.

  • Revert back — the same panel lists the last published releases with a
    Revert button (the running one marked Current): point the updater at
    an older tag's own signed manifest and step back (or jump) to any other
    build in place. Reverting installs over the current copy; the vault and all
    settings stay as they are.

  • Signed release pipeline — pushing a tag (V* / v*) now runs the new
    Release workflow: Windows build → updater packages signed from the keypair
    stored in repo secrets → latest.json (fixed releases/latest endpoint)
    and per-tag update.json (rollback target) assembled → installers,
    .sig files and both manifests attached to the GitHub release. The script
    refuses a tag that disagrees with tauri.conf.json's version.

  • Offline cache (L1–L5) — resolved stream links live 30 minutes, search
    and entity metadata 6 hours, lyrics 7 days; underneath, a disk tier bounded
    by a budget (default 500 MB, 100 MB–5 GB) sits in the app's own cache
    directory. Settings → Storage shows live usage (covers, lyrics, vault),
    the size selector, and a Clear cache button that drops every cache tier
    while leaving the vault alone. The budget is enforced at boot and every
    10 minutes; a disabled disk cache degrades to memory-only.

  • Self-healing streams — the local relay re-resolves a song when the CDN
    returns 403/410: the stale entry is purged, one fresh resolution is
    attempted, and playback proceeds (the original 403 is preserved if
    re-resolution fails). Artwork goes through the same relay's /art route
    with an origin guard (http/https only, private networks refused), MIME
    sniffing, a 10 MB cap, and 24-hour Cache-Control.

  • Prefetch while you listen — the next track (including the crossfade
    target) is probed and warmed in the background, so the handover starts at
    320 kbps instead of waiting on a cold start.

  • Home is the landing screen — the app opens on Home (greeting, Jump
    Back In, playlists, charts); Search stays one click / shortcut away and
    still seeds its last query in the background.

  • Leaner screens — search results no longer repeat themselves under a
    grouped Albums / Artists / Playlists panel (one flat result list plus the
    inline suggestion dropdown remains), and Home drops the duplicated
    Sonic Domains / Sub-Genres strips. Recent-search chips on Home stay.

  • App icon fixed — all 15 PNG sizes plus icon.ico regenerated with the
    correct shading and fit (no more cropped/off-palette taskbar and installer
    icons).

Verification

  • Rust: 127 unit tests, cargo fmt --check, clippy --all-targets -D warnings,
    cargo audit.
  • Frontend: 30 tests under node --test, ESLint, per-module node --check.
  • Release guard: manifest script dry-runs against the bundle tree and fails a
    version/tag mismatch before anything is published.

Upgrade

From v0.1.0: install the new build over it (same identifier) or — once v0.2.0
is running — use Settings → Updates for every release after that. The
update manifest ships with the new release, so 0.1.0 → 0.2.0 updates
in-app; rollback targets exist for releases published from v0.2.0 onward.

Known gaps

  • Releases published before v0.2.0 carry no signed update package — they
    appear in the revert list but can only be reinstalled from the assets here.
  • CI-built installers skip Authenticode until the certificate is imported on
    the runner (SmartScreen prompt persists).
  • Radio / endless-playback backend is landed but not wired to the UI.
  • Tailwind and the icon font still load from a CDN at runtime.

TRANCE MUSIC v0.1.0

Choose a tag to compare

@Rohithdgrr Rohithdgrr released this 30 Sep 09:54

Title: TRANCE MUSIC v0.1.0
First packaged release of TRANCE MUSIC — a Tauri 2 desktop player for Windows
with a Rust core and a zero-build vanilla-JS frontend.

Install

File Size Best for
TRANCE MUSIC_0.1.0_x64_en-US.msi 2.98 MB Group Policy / silent installs, plain Windows Installer
TRANCE MUSIC_0.1.0_x64-setup.exe 2.05 MB Double-click install with Start-menu shortcut wizard

Windows 10/11 x64 with WebView2 (preinstalled on Win 11). Existing installs
upgrade in place — same com.openmusic.trancemusic identifier.

SmartScreen note: both installers are Authenticode-signed (SHA-256,
RFC 3161 timestamped), but with a self-signed TRANCE MUSIC certificate.
On first run Windows may show "Windows protected your PC" /
unknown publisher — click More info → Run anyway, or install from
source. Signing with a CA-issued certificate (and the SmartScreen
reputation that follows) is planned.

Highlights

  • Settings → General — profile name (greets you by name on Home),
    open-at-startup (HKCU Run key, no elevation), and language/country
    preferences applied to every catalog request, with safe fallback so a
    language filter never blanks a search that had results.
  • Desktop widget — a floating obsidian-glass player surface that can be
    pinned onto the wallpaper; it drives the same player state as the main
    window, so the three surfaces can't disagree.
  • Settings dialog — Open-Source Licences (read from Cargo.lock,
    469-crate tree named), About, and Terms.
  • Track credits dialog, toast/notification redesign, and miniplayer →
    Now Playing navigation.
  • Packaging — npm run tauri build now emits signed .msi + NSIS
    installers from an optimised release profile (LTO, single codegen unit,
    stripped, panic = abort); cold build ≈ 5 min.

Fixed

  • Tab switches no longer resume at the previous view's scroll position.
  • Active nav tab rendered dark-on-dark (Tailwind cascade order).
  • Playlist cards printed [object Object]; playlist clicks hijacked the
    Playlists tab; dead "View All" / History / Full-100-Charts links.
  • Uniform 96px artwork in every list row.

Known gaps

  • No frontend test suite yet (Rust side: 62 unit tests).
  • Radio / endless-playback backend is landed but not wired to the UI.
  • Tailwind + icon font load from a CDN at runtime.