Skip to content

TRANCE MUSIC v0.2.0

Choose a tag to compare

@Rohithdgrr Rohithdgrr released this 01 Oct 21:28
· 107 commits to main since this release

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.