Skip to content

Releases: PierrunoYT/Wavekeep

Wavekeep v0.3.0

Choose a tag to compare

@PierrunoYT PierrunoYT released this 24 Oct 10:40

Upgrading from Deezy? Start Wavekeep once before uninstalling Deezy, and do not tick "Delete the application data" in the Deezy uninstaller before that first start. Wavekeep moves your settings, history, themes and saved logins on first launch. MSI installs upgrade Deezy in place; the .exe installer installs Wavekeep next to it.

The installers are not code-signed, so Windows SmartScreen may warn on first run.

Added

  • Spotify source — Wavekeep can now search Spotify and download from pasted Spotify track, album, artist, or playlist links. The encrypted audio stream is decrypted with the track's own key and written with metadata and cover art. At each bitrate OGG Vorbis is preferred over MP3; FLAC is only requested for Lossless, and if a track offers none of the usual formats, Wavekeep falls back in a fixed order (MP3 256, AAC 320 and 160, MP4 128, AAC 48 and 24, FLAC, then xHE-AAC) and refuses formats it cannot decrypt; a stream that does not decrypt to audio of the expected type fails instead of being saved. Connect once through a browser login; the credential is normally stored in the OS keyring, separate from the ARL. Access tokens refresh safely when several requests need one at once, and a stored token that Spotify rejects is refreshed once before asking for a new login.
  • Spotify quality — Normal (96 kbps), High (160 kbps), Very high (320 kbps), or Lossless (FLAC, Premium). Wavekeep does not check the account type, so what a Free account can download depends on what Spotify serves.
  • Spotify catalog — Direct track, album, artist and playlist lookups, download metadata, and Loved Tracks come from the librespot AP session rather than the rate-limited Web API; search, playlist search and your playlist list still use the Web API. Track lists load with bounded concurrency, unavailable individual tracks are skipped, a complete metadata failure is reported instead of appearing as an empty list, and artist discographies fall back to the Web API when the AP rejects the request.
  • Custom Spotify Client ID — Settings accepts an optional Client ID from your own Spotify developer app, with the loopback redirect URI shown alongside it. The ID is used only for Web API requests (search and your playlist list) so they draw on your own quota; the AP session behind downloads always uses the default ID, because Spotify rejects AP metadata requests from other IDs, so connecting with a custom ID opens the browser login twice. Changing the ID disconnects the existing token so the next login uses the new app. The saved setting takes precedence over WAVEKEEP_SPOTIFY_CLIENT_ID (or the older DEEZY_SPOTIFY_CLIENT_ID).
  • Spotify rate-limit handling — Web API 429 responses are retried at most twice and only for Retry-After waits of five seconds or less, avoiding long UI stalls. Track, album, and artist searches then try Spotify Pathfinder, and failures include the underlying error. As of 2026-10-23 Spotify answers Pathfinder with 403 Client/request not allowed, so a custom Client ID is the reliable fix for a rate-limited default ID.
  • Tag editor for OGG and M4A — The Tag Editor reads and writes OGG and M4A files, so Spotify downloads can be edited, and the Downloads view offers it for them.
  • Startup warning and Info & FAQ — A warning about terms of service, account risk, credential safety and unofficial support appears when the app opens, with a "Don't show this again" option that is remembered per notice version. A new Info & FAQ button in the sidebar opens the same information plus a short FAQ (upgrading from Deezy, legality, bans, getting an ARL, quality limits, Spotify rate limits and double login, failed downloads, tags, privacy) in all six languages.
  • Local diagnostic log — Wavekeep logs what it does to wavekeep-debug.log in its logs folder (%LOCALAPPDATA%\com.pierr.wavekeep\logs on Windows, ~/Library/Logs/com.pierr.wavekeep on macOS, and ~/.local/share/com.pierr.wavekeep/logs on Linux), which the system does not clean up on its own, with UTC times, levels and areas: startup, the move from Deezy, login results (account type only), quality fallbacks, the start and result of every download plus each Spotify download step, Spotify connect and rate limits, settings-storage warnings, panics, and frontend errors. It stays on the computer and Wavekeep never uploads it. Passwords, the ARL and login tokens are never written to it; on top of that, every line is cleaned before it is saved: the home folder appears as ~, web addresses lose their query part (where tokens travel), and any long token-like string is replaced with [redacted]. Info & FAQ has Copy recent log, Open log folder and Delete log buttons (deleting asks for a second click) and a new "How do I report a problem?" entry. A new Track Details in Log setting (on by default) writes [hidden] instead of track names, artists and file paths when turned off. The file rotates to wavekeep-debug.old.log at 1 MB.
  • Clearer privacy information — The in-app answer "What does Wavekeep collect or send?" and the FAQ now say exactly what is sent (only to Deezer and Spotify, nothing to the developer), what is stored on the computer, and how to remove each part. The System Tray setting is now translated too.

Changed

  • Renamed to Wavekeep — Deezy is now called Wavekeep, now that it downloads from Spotify as well as Deezer. The app identifier changed from com.pierr.deezy to com.pierr.wavekeep: on first start Wavekeep moves settings, download history, custom themes, and saved Deezer and Spotify logins over (old copies are removed only after the new ones check out), and MSI installs upgrade the existing Deezy install. New installs default to a Music/Wavekeep download folder; existing download folders are kept. WAVEKEEP_NO_KEYRING and WAVEKEEP_SPOTIFY_CLIENT_ID replace the DEEZY_ variables, which still work. Unfinished downloads now use .wavekeep.part. The .exe installer installs Wavekeep next to Deezy instead of replacing it: start Wavekeep once before uninstalling Deezy, so the data has been moved first. After the move, the old Deezy app starts without settings or logins.
  • New logo and icons — A white sound wave shaped like a "W" on a rounded purple square (in the app's accent colour) replaces the "D" logo in the app, the installers, and all platform icons. The tray shows the same icon on Windows and Linux, and the wave alone as a template image on macOS, which follows the menu-bar colours.
  • Deezer-free settings — Saving settings no longer requires an ARL, so the Spotify source can be used without a Deezer account.

Fixed

  • Tag Editor failures — Saving tags now first copies the file next to itself (a hidden .<name>.<hex>.wavekeep.bak file) and puts the original bytes back if the write fails half way or a tag library hits an internal error, so a failed save such as a full disk normally leaves the song as it was. The copy is deleted afterwards. If Wavekeep itself is killed during a save, the file may be damaged and the copy stays next to it; if putting the original back fails, the error gives the copy's path. The file is still edited in place, so hard links, permissions and alternate data streams are kept.
  • Artist links — Pasting an artist URL now asks for confirmation, showing the number of albums, before every track is added to the download queue. An artist without albums shows the usual message instead.
  • Spotify Liked Songs on large libraries — Liked Songs used only the pages in the first reply from Spotify, so a large library could be cut short. The remaining pages are now followed (only hm:// links, at most 200 extra pages and 10,000 tracks), and a page that cannot be read gives an error instead of a shorter list.
  • Untranslated texts — The tray menu, the Deezer Free quality hint, and errors for pasted links now follow the selected language instead of always being English.
  • Minimize shortcut on macOS — Wavekeep no longer registers its own Cmd+H there, which clashed with the system "Hide" shortcut; the system shortcut hides the app instead.
  • Download action buttons — The retry and edit-tags buttons rendered as empty circles because the generic button padding squeezed the icon out.
  • Settings toggles — The switches in Settings sit next to their labels again instead of the text hanging at the switch's baseline with no gap.
  • Download progress bar — The bar now spans the whole row instead of stopping where the status text begins, which made it end at a different place on every row.
  • Hung downloads and an app that would not close — An internal error during a download (for example a Deezer release date with accented characters, which crashed tagging) left the download hanging forever, kept its unfinished file, blocked that track from being retried, and stopped Wavekeep from closing. Downloads now end with an error and clean up (after a hard crash an unfinished .wavekeep.part file can remain, because there is no cleanup at startup), closing refuses new downloads and waits at most 30 seconds for the running ones, Wavekeep closes by itself if the window stops responding, and quitting from the macOS menu or Dock cleans up too.
  • Spotify login that never ends — A browser login left open now times out after 5 minutes and frees its port, so Connect works again without restarting. A second Connect while one is waiting is refused, and connecting, restoring and disconnecting can no longer overlap (a disconnect during startup could be undone). Two small gaps remain: the login library discards the OAuth state, so another program on the same computer could answer the login with its own account, and a program holding an idle connection to port 5588 can keep it busy until it disconnects.
  • Long track names — File and folder names are shortened to 180 bytes, always keeping the extension, so tracks with very lo...
Read more

Deezy v0.2.25

Choose a tag to compare

@PierrunoYT PierrunoYT released this 23 Oct 03:46

Deezy 0.2.25 adds two features suggested in #11: quick access to your own Deezer library, and a choice of how many tracks download at once.

Highlights

  • Loved Tracks and My Playlists: two new tabs next to Tracks, Albums, Artists, and Playlists. Loved Tracks lists your favorite tracks with a Download All button; My Playlists lists the playlists on your profile, including private ones. Click a playlist title to pick individual tracks.
  • Private playlists: private playlists can now be opened and downloaded, including from pasted deezer.com links. Before, Deezer's public API refused them.
  • Simultaneous downloads: a new setting chooses how many tracks download at the same time, from 1 to 10. The default stays at 3, and changes apply to the running queue. The download speed limit is shared by all of them.

Windows downloads

Both installers are for Windows x64 and include version 0.2.25:

  • Deezy_0.2.25_x64-setup.exe — NSIS installer; recommended for most users.
  • Deezy_0.2.25_x64_en-US.msi — MSI installer.

To upgrade, fully quit Deezy from the system tray, then run one installer. Deezy does not include an automatic updater. macOS and Linux users can build from the v0.2.25 tag.

Validation

20 frontend tests and 24 Rust tests passed, and Svelte/TypeScript checks reported no errors. Both Windows installers were built from the v0.2.25 tag.

SHA-256 checksums

ad70c3d64a005914458630847fe7ea6fa6ba4b3470352ce01fb174924a4d8aef  Deezy_0.2.25_x64-setup.exe
d0f9a72d31832870ad471079f44d9890ceff26ea0a8c229e8104e2ad28f7cea5  Deezy_0.2.25_x64_en-US.msi

Full changelog

Deezy v0.2.24

Choose a tag to compare

@PierrunoYT PierrunoYT released this 19 Oct 16:26

Deezy 0.2.24 adds three features suggested in #10: skipping files you already have, browsing album track lists, and pacing large downloads.

Highlights

  • Skip existing files: before downloading, Deezy checks whether an MP3 or FLAC file for the track already exists where it would be saved. If it does, the track is skipped and shown as "Already downloaded", even after clearing the download history. This is on by default; turn off Skip Existing Files in Settings to always download. Only the current folder structure is checked, so files saved under a different structure aren't detected.
  • Album track lists: click an album title in an artist's discography or in album search results to see its tracks, just like playlists, and download only the ones you want.
  • Pause between downloads: a new setting waits 2–60 seconds before starting each next download. Skipped tracks don't trigger the pause.
  • Download speed limit: a new setting caps the total speed of all downloads. The 1411 kbit/s (FLAC) and 320 kbit/s (MP3 320) presets download each track in about the time it takes to listen to it.

Both pacing settings are off by default, so downloads behave as before until you turn them on.

Windows downloads

Both installers are for Windows x64 and include version 0.2.24:

  • Deezy_0.2.24_x64-setup.exe — NSIS installer; recommended for most users.
  • Deezy_0.2.24_x64_en-US.msi — MSI installer.

To upgrade, fully quit Deezy from the system tray, then run one installer. Deezy does not include an automatic updater. macOS and Linux users can build from the v0.2.24 tag.

Validation

18 frontend tests and 21 Rust tests passed, and Svelte/TypeScript checks reported no errors. Both Windows installers were built from the v0.2.24 tag.

SHA-256 checksums

0a958dbaece2642930a3ca3a7a8ee03df87ff3477d60c7d19ed9eb8bbc0ee884  Deezy_0.2.24_x64-setup.exe
70a1fc8e249c3d72ddddf5047fab6e43ed6fd4ef7589220456eec1cfdaa09996  Deezy_0.2.24_x64_en-US.msi

Full changelog

Deezy v0.2.23

Choose a tag to compare

@PierrunoYT PierrunoYT released this 07 Oct 21:06

Deezy 0.2.23 is a reliability release. It fixes 32 issues found in a full code review, including two that could lose data.

Highlights

  • Tag editor never wipes your tags: an MP3 whose ID3 tag can't be read now shows an error instead of blank fields, and saving refuses rather than erasing every frame and the cover art.
  • Linux without a keyring works again: with no running or unlocked Secret Service, login and settings changes no longer fail; Deezy uses the private-file fallback.
  • One Deezy at a time: launching Deezy again brings up the running window (even from the tray) instead of starting a second copy that could overwrite newer settings.
  • Settings save safely: preferences changed before the first login are kept, and saving while logged in no longer re-authenticates or logs you out when something goes wrong.

Fixes and improvements

Downloads and queue

  • Search results now show download progress and completion on each track.
  • Dragging a queued track by its grip reorders the queue.
  • Removing a resumed or retried track from the queue returns it to paused instead of leaving it stuck at 0%.
  • Download history is saved at most two seconds after a change, even while downloads run, and the oldest rows are dropped at 10,000 entries instead of every later save failing.
  • On drives without hard-link support, finished downloads are moved into place atomically, so an interruption can't leave a truncated file under the final name.
  • Download errors in history, tooltips, and notifications no longer include CDN URLs.

Tag editor

  • Clearing a field removes it from the file, and a total track or disc count without a number no longer writes track 1.
  • FLAC files keep a full date such as 2023-05-01 when the year is unchanged.
  • Change File no longer reverts to the original file, and releasing a text selection over the backdrop no longer closes the editor.
  • The front cover is shown and replaced even when another picture comes first.

Settings and themes

  • The download folder is chosen with Browse only (typed paths were always rejected).
  • A typed ARL is kept when leaving and returning to Settings.
  • Choosing a built-in theme clears the custom theme, so its card no longer shows "Active".
  • Theme names with : or other characters Windows reserves are rejected instead of being saved where they never appear.
  • A plaintext ARL saved with DEEZY_NO_KEYRING replaces an older keyring entry on the next normal launch.

Interface

  • Global shortcuts are ignored while a dialog is open, so Escape no longer clears the search behind it, and Space activates a focused button instead of toggling playback.
  • Show in folder opens network folders on Windows and reports failures instead of doing nothing.
  • History export's custom date range uses local days, so the last day is no longer dropped west of UTC.
  • Search API errors show Deezer's message instead of "Unknown error", and album or playlist errors no longer appear over a newer search.
  • The tray tooltip no longer counts paused tracks as in progress, and at 1024 px or narrower the mini player no longer covers the last list row.
  • Added a missing search-history error message to all six languages.

Windows downloads

Both installers are for Windows x64 and include version 0.2.23:

  • Deezy_0.2.23_x64-setup.exe — NSIS installer; recommended for most users.
  • Deezy_0.2.23_x64_en-US.msi — MSI installer.

To upgrade, fully quit Deezy from the system tray, then run one installer. Deezy does not include an automatic updater. macOS and Linux users can build from the v0.2.23 tag.

Validation

17 frontend tests and 17 Rust tests passed, and Svelte/TypeScript checks reported no errors. Both Windows installers were built from the v0.2.23 tag.

SHA-256 checksums

ed45627a2cb6ff31ad233d18075d4212adb42368605354938985c9d2b0e46b1e  Deezy_0.2.23_x64-setup.exe
cafbf7c9ffb53b19305b0da19f606e18870172146a289ce2a6fac0a86595cbe0  Deezy_0.2.23_x64_en-US.msi

Full changelog

Deezy v0.2.22

Choose a tag to compare

@PierrunoYT PierrunoYT released this 10 Sep 19:34

Deezy 0.2.22 introduces a new logo and improves download reliability, catalog loading, and playback.

Highlights

  • New look: a violet D monogram with a download-arrow cutout, used throughout the app, splash screen, tray, and Windows installers.
  • Complete albums and playlists: catalog loaders now follow API pagination, including artist discographies. Failed later pages are reported instead of silently returning incomplete lists.
  • Recover interrupted downloads: saved interrupted transfers appear as paused after restarting. Resume starts a fresh download from the beginning; pending queue entries are not persisted.
  • Safer history: clearing history preserves active and queued rows without deleting music. History saves now use atomic file replacement.

Fixes and improvements

  • Late cancellation responses no longer overwrite a completed download's status.
  • Notification permission and delivery no longer occupy a completed download's queue slot.
  • Switching previews no longer lets an older playback failure stop the new track.
  • Built-in themes clear custom color overrides, and stale theme loads cannot replace a newer selection.
  • Older artist and playlist requests no longer replace the currently selected details.
  • Custom folder templates preserve literal metadata and handle slashes, Unicode release dates, Windows device names, and invalid numeric tags safely.
  • Stale automatic login results cannot replace a newer account session.
  • HTTP error bodies are rejected, redirect chains are bounded, and gateway request URLs are omitted from error messages.
  • Settings, layout, and tray initialization clean up asynchronous listeners correctly.
  • Requested-quality and quality-label translations are available across all six supported languages.

Windows downloads

Both installers are for Windows x64 and include version 0.2.22:

  • Deezy_0.2.22_x64-setup.exe — NSIS installer; recommended for most users.
  • Deezy_0.2.22_x64_en-US.msi — MSI installer.

To upgrade, fully quit Deezy from the system tray, then run one installer. Deezy does not include an automatic updater. macOS and Linux users can build from the v0.2.22 tag.

Development and validation

  • Added focused frontend regression tests and backend coverage for pagination, HTTP responses, and filename edge cases.
  • Documented architecture, testing, and release steps in the development guide.
  • Validation: 17 frontend tests and 15 Rust tests passed; Svelte/TypeScript checks and production frontend builds passed. Both Windows installers were built, and the application and MSI version metadata were verified as 0.2.22.

SHA-256 checksums

9e895cea03067547486c4d903133e2e585dfc75a272b5ef625dd92121ffc3ae7  Deezy_0.2.22_x64-setup.exe
abb396f89cd452c4a3552a73857f5f5d39d5e1ac5c4e4b30f121c6fcdcc9740d  Deezy_0.2.22_x64_en-US.msi

Full changelog

Deezy v0.2.21

Choose a tag to compare

@PierrunoYT PierrunoYT released this 20 Aug 15:45

Changed

  • Dependency security updates — Updated the Svelte, SvelteKit, Vite, Tauri, and supporting frontend packages, with secure overrides for vulnerable transitive dependencies. bun audit now reports no known frontend vulnerabilities.

Security

  • Restricted local-file access — Renderer requests can read or edit only audio and cover files approved through Deezy's native pickers or located in the configured download folder. File-reveal and output-folder operations use the same trusted-path checks.
  • Validated remote resources — Backend requests and redirects are limited to HTTPS Deezer and Deezer CDN hosts, preventing untrusted media or API URLs from reaching internal or unrelated services.
  • Resource limits — Added size and entry limits for remote API/media responses, editable audio and cover files, settings, custom themes, and download history to prevent excessive memory or disk use.

Chores

  • Amp orb lifecycle — Added executable .agents/setup and .agents/resume scripts that provision Tauri system libraries, Bun, Rust, frontend packages, and Cargo dependencies in a fresh Amp orb.

Deezy v0.2.20

Choose a tag to compare

@PierrunoYT PierrunoYT released this 07 Aug 16:40

Added

  • Optional credential-store fallback — Deezy can store the ARL in settings.json when the OS credential store is unavailable or disabled with DEEZY_NO_KEYRING, and clearly warns when plaintext storage is active. On Unix, the fallback file is restricted to owner-only permissions.

Fixed

  • Download response validation — Downloads now reject unsuccessful HTTP responses, empty streams, and responses over the safety limit instead of publishing corrupt error bodies as completed audio.
  • Safe download shutdown — Exiting Deezy now cancels active work, waits for temporary-file and copy-fallback cleanup, and prevents partial output from being left under a completed filename during a normal quit.
  • Queue pause and duplicate handling — Paused queued tracks remain available to resume, the tray Resume action stays enabled, and tracks cannot be queued again while resolving or writing tags.
  • Atomic settings updates — Renderer settings changes now patch backend state under one lock, preserving search history and preventing stale theme, locale, notification, and download-setting snapshots from overwriting newer changes.
  • Tag warning visibility — Metadata-writing failures are captured by the always-mounted application layout and remain visible on completed downloads.
  • Cover-art memory limits — The tag editor accepts only valid JPEG or PNG replacement artwork up to 20 MiB and avoids base64-expanding oversized embedded covers.
  • Disabled notification races — Turning notifications off now clears pending notifications and prevents in-flight permission checks or queued deliveries from showing notifications after they have been disabled.

Security

  • Private fallback credentials — Settings files containing a plaintext ARL reject symlinks and are not used on Unix unless owner-only permissions can be established and verified.
  • Validated credential replacement — A replacement ARL is authenticated before it is persisted; failed keyring or settings writes preserve or restore the previous credential instead of silently destroying a working login.
  • Keyring-first persistence — Successful credential-store saves write only redacted settings to disk, and existing keyring credentials remain authoritative over stale plaintext after an interrupted operation.
  • Session refresh isolation — A download refreshing an older session can no longer replace a newer authenticated client.

Deezy v0.2.19

Choose a tag to compare

@PierrunoYT PierrunoYT released this 14 Jul 17:17

Fixed

  • Concurrent download file collisions – Downloads now reserve temporary and final filenames atomically, preventing simultaneous tracks with the same destination name from overwriting or interfering with each other.
  • Cross-filesystem finalization – Added a no-clobber copy fallback for filesystems that do not support hard links, including cleanup of incomplete destination files when finalization fails.
  • Download activity tracking – Kept the queue manager authoritative for active download counts so progress events cannot introduce incorrect or negative counts.
  • Cancellation cleanup – Download cancellation registrations are now removed on every completion path, and duplicate active track IDs are rejected safely.
  • Shutdown history persistence – Pending debounced download-history updates are flushed before the application exits, including tray-initiated exits.
  • Number input CSS warning – Added the standard appearance property alongside -moz-appearance in the tag editor.

Changed

  • Async runtime responsiveness – Moved blocking file writing, metadata tagging, settings, history, theme, and credential-store operations away from Tokio worker threads where appropriate.
  • Frontend IPC typing – Replaced remaining untyped settings and tray payloads with shared TypeScript interfaces, including settings updates, folder structures, and tray state.
  • Focused module structure – Split the large command handler, Deezer client, and search view files into smaller modules organized by responsibility without changing their public behavior.

Deezy v0.2.18

Choose a tag to compare

@PierrunoYT PierrunoYT released this 24 Jun 13:36

Added

  • Custom folder templates – Added a custom folder structure option with placeholders for artist, album, title, track number, disc number, release date, and release year.
  • Release checklist – Added manual release documentation covering version bumps, verification, installer builds, tags, and GitHub release uploads.

Notes

  • Auto-updater support was removed before this release, so no latest.json updater metadata is included.

Deezy v0.2.17

Choose a tag to compare

@PierrunoYT PierrunoYT released this 05 May 13:50

Added

  • Mac Installer – Added official macOS installer bundle (.dmg) for Apple Silicon (aarch64).

Changed

  • README – Rewritten to be user-focused; technical and developer documentation moved to a separate local file.