๐ ๏ธ Note on the 1.41.0 jump: The 1.41.0 tag exists as an internal Draft release on GitHub โ it was used to wire up and verify the Cachix substituter pipeline and never went public. 1.42.0 is the first public release after 1.40.0 and consolidates everything that was prepared for 1.41.0 plus the work landed on top in the days since.
โ๏ธ Cachix is live for NixOS users. The
psysonic.cachix.orgsubstituter is now actually fed by every release. Earlier 1.40.x runs were silently skipping the cache push (see Fixed below), so the first user to ask for a given output paid the full compile cost. Starting with 1.42.0,nix run github:Psychotoxical/psysonicand the NixOS module both pull the prebuilt closure straight from Cachix โ no local Rust + symphonia + libopus build required.
Added
-
Mini player โ feature-complete second cut (Issue #162, by @Psychotoxical): The early-alpha mini from the internal 1.41.0 prep gets the rest of the workflow it was missing.
- Expandable queue panel with full track list, search-style overlay scrollbar (no width-eating gutter), drag-to-reorder using the existing PsyDnD system, and a localized right-click context menu (Play now / Remove from queue / Open album / Go to artist / Favorite / Song info โ all forwarded to the main window via Tauri events so the source-of-truth playerStore stays consistent).
- Custom in-page titlebar on Windows + Linux with a drag region, the current track title and the queue / pin / open-main / close action icons. macOS keeps the native traffic-lights titlebar so the system look is preserved. The lower toolbar from the alpha is gone โ its four buttons live in the titlebar now.
- Persistent geometry: window position, expanded-queue height and queue-open state all survive an app restart. Position is written to
<app_config_dir>/mini_player_pos.jsonon every move (throttled), and re-applied after each show โ Linux WMs (Mutter/KWin) re-centre hidden windows on show, so without re-applying the position would be lost on the second open. - User-bindable keyboard shortcut in Settings โ Shortcuts (
open-mini-player, default unbound). The same chord toggles between main and mini regardless of which window has focus. - Layout polish: cover shrinks 112 โ 84 px, the right column gets title / artist / transport in a single block, progress + toolbar take full width.
- Live theme / font / language sync: changes in the main window propagate to an open mini via the shared localStorage
storageevent โ no need to close + re-open the mini after rebinding a shortcut or switching themes. - Always-on-top reliability fix: WMs that silently ignore
set_always_on_top(true)when the flag is "already true" (KWin, certain Mutter releases) get a forced false โ true cycle so the constraint is actually re-evaluated. The frontend also re-asserts the pin state on mount and on focus, so the user no longer has to click the pin button twice for it to stick.
-
Player bar โ click-to-toggle duration / remaining time (contributed by @kveld9, PR #212): Click the time read-out in the player bar to swap between total duration (
3:45) and remaining time (-2:34). Updates live, persisted tothemeStore.showRemainingTime. A small swap icon (โ) and hover highlight signal the interaction. -
Queue โ ReplayGain in tech strip, expandable badge (Issue #195, originally by @cucadmuh in PRs #196 / #201 โ UX iteration by @Psychotoxical on cucadmuh's feedback): Tracks with ReplayGain metadata now show a small
RG โpill at the end of the codec/bitrate/sample-rate strip. Hover reveals the values via tooltip; click expands a second line ("ReplayGain ยท T -8.9 dB ยท A -11.0 dB ยท Peak 0.998") that is persisted across sessions. Hides itself for tracks without RG metadata. -
Changelog โ sidebar banner + dedicated
/whats-newpage (by @Psychotoxical): The auto-popup modal that nagged the user on first launch after each update is replaced by a discreet sidebar banner. Clicking it opens a full/whats-newpage that renders the latest CHANGELOG section in app โ no separate Markdown viewer, no broken links to GitHub. -
Favorites โ genre column + Top Favorite Artists row (Issue #87, by @Psychotoxical): The Favorites tracklist now has a toggleable Genre column (alongside the existing Album column and multi-genre filter). A new horizontally scrolling "Top Favorite Artists" row sits between Radio Stations and Songs, aggregated from starred tracks and sorted by star count. Clicking an artist card narrows the song list to that artist.
-
Compilation filter on All Albums (Issue #65, by @Psychotoxical): A tri-state toggle in the Albums page header (All / Only compilations / Hide compilations) that reads the OpenSubsonic
isCompilationtag exposed by Navidrome 0.61+. Client-side filter, no additional server calls. Translated into all 8 supported locales. -
Sticky header on Albums, New Releases, Artists (by @Psychotoxical): The header row with search/sort/genre/year controls now pins to the top while scrolling, so filters stay reachable without jumping back up. Works the same on all three browse pages.
-
Device Sync โ album artist on both panels (by @Psychotoxical): Album entries in both the library (left) and on-device (right) panels now display
Album ยท Artistinline, so sampler discs and self-titled albums are no longer guesswork. Playlists unchanged. -
NixOS โ first-class flake install guide (contributed by @cucadmuh, PRs #209 / #210): A new top-level
nixos-install.mdwalks through adding Psysonic as a flake input, installing viaenvironment.systemPackages/home.packages, and wiring up the publicpsysonic.cachix.orgsubstituter so every NixOS user pulls prebuilt binaries. README links to it directly. -
README โ AppImage in the Linux install options + Cachix badge (by @Psychotoxical): The Linux install section now lists AppImage alongside
.deb,.rpm, AUR and Nix flakes. A Cachix badge on the README header signals that NixOS users get prebuilt binaries.
Changed
-
Genre filter โ portal popover (by @Psychotoxical): The inline tagbox + dropdown (capped at 60 entries, ate header space when expanded) is replaced by a compact button that opens a portal-rendered popover with a search field and the full scrollable list of genres. Selected genres sort to the top. Used on Albums, New Releases, Random Albums and Favorites.
-
Year filter โ portal popover (by @Psychotoxical): The From/To number inputs in the Albums header became a single button with a popover mirroring the genre filter pattern. When the filter is active, the button shows the range (e.g.
2020โ2024) in accent colour. -
Sort picker โ portal dropdown (by @Psychotoxical): The two sort buttons on Albums (
AโZ (Album),AโZ (Artist)) collapse into one dropdown button showing the current choice. GenericSortDropdowncomponent, reusable for other pages. -
Device Sync โ album/playlist meta inline (by @Psychotoxical):
BrowserRowrenders secondary info inline with aยทseparator in muted colour instead of a separate right-aligned column, matching the on-device panel's format. -
README โ Arch/AUR fold-up (by @Psychotoxical): The Arch / AUR install instructions are folded into the Linux install section so the README stops scrolling forever.
Fixed
-
Player bar โ black-flash on WebKitGTK (by @Psychotoxical): Linux users occasionally saw the entire player bar paint fully black for one frame when an unrelated layer elsewhere on the page invalidated.
contain: layout paintmakes the bar its own paint boundary so it can no longer be pulled into a surrounding dirty rect. No-op on platforms that don't exhibit the flash (Wayland-with-GPU, Chromium webviews on Windows / macOS). -
Player bar โ time-toggle tooltip uses the in-app TooltipPortal (follow-up to PR #212, by @Psychotoxical): The new time-swap control was rendering the native browser
title=tooltip (unstyled OS popup, ignored by every other control). Switched todata-tooltip="โฆ"so it matches every other player-bar tooltip. -
Fullscreen player โ lyrics menu toggle + readability (by @Psychotoxical): Re-clicking the mic icon now actually closes the lyrics settings panel instead of the outside-click handler closing it and the click re-opening it โ the trigger button is excluded from the outside-check. The panel itself is now a solid surface (no backdrop blur, near-opaque background, higher-contrast button text) so settings remain readable over the busy fullscreen background.
-
i18n โ ArtistCardLocal album count (contributed by @cucadmuh): Local artist cards were rendering the album count with hardcoded German (
Album/Alben). Switched to the existing plural-awareartists.albumCountkey which already covers all 8 locales including Russian Slavic plurals. -
Release CI โ Cachix never receiving the psysonic closure (by @Psychotoxical):
cachix-actioninstalls its post-build hook viaNIX_USER_CONF_FILES, but the Determinate Nix daemon that runs the actual builds reads the system nix.conf โ so the hook never fired. Only a couple of early prep paths ever reached the cache, never the compiledpsysonicoutput. The release workflow now pushes the full closure explicitly afternix build; Cachix dedupes against paths already present, so redundancy is cheap.
Contributors
- @kveld9 โ click-to-toggle duration / remaining time in the player bar.
- @cucadmuh โ i18n fix for ArtistCardLocal, ReplayGain UX feedback that drove the expandable badge, NixOS install guide, README polish.