Repository navigation
TRANCE MUSIC v0.2.0
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 intauri.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(fixedreleases/latestendpoint)
and per-tagupdate.json(rollback target) assembled → installers,
.sigfiles and both manifests attached to the GitHub release. The script
refuses a tag that disagrees withtauri.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/artroute
with an origin guard (http/https only, private networks refused), MIME
sniffing, a 10 MB cap, and 24-hourCache-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.icoregenerated 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-modulenode --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.