* feat(audio): rust preview engine with secondary sink Adds a parallel rodio Sink on the existing OutputStream for 30s mid-track previews. Two new Tauri commands (audio_preview_play, audio_preview_stop) plus three events (audio:preview-start / -progress / -end). The main sink is paused with Sink::pause() and auto-resumed on preview end iff it was playing beforehand. * feat(playlists): migrate suggestion preview to rust audio engine Replaces the HTML5 <audio> path with the new rust preview engine. previewStore mirrors the engine's start/progress/end events so any tracklist row can render preview UI from a single source of truth. Spacebar redirects to stopPreview while a preview plays, hardware mediakeys are silently dropped (Q5), and tray clicks cancel the preview before forwarding the original action. * feat(albums): inline play + preview buttons in tracklist rows Track number stays static on hover instead of swapping to a play icon — the dedicated Play and Preview buttons in the title cell take over click-to-play and click-to-preview. Active+playing rows keep the eq-bars (also on hover), active+paused rows fall back to the static accent-coloured number. Pilot for the wider rollout to other tracklists. * feat(tracklists): roll out inline play + preview buttons Mirrors the AlbumTrackList pilot across the remaining track-row based lists: PlaylistDetail main tracks, Favorites, ArtistDetail top tracks, RandomMix (both genre-mix and filtered-songs lists). Track number stays static, the dedicated Play + Preview buttons in the title cell take over click-to-play and click-to-preview. * feat(settings): track preview toggle + configurable position and duration Adds an opt-out switch and two sliders to Settings → Audio: start position (0-90 % of track length, default 33 %) and preview duration (5-60 s, default 30 s). The progress-ring animation follows the duration via a CSS variable so the visual matches the engine's auto-stop. Disabling the feature hides every inline preview button via a single root-level data attribute, no per-row conditional rendering required. i18n keys added in all 8 locales. * fix(audio): cancel preview when main playback (re)starts audio_play, audio_play_radio, audio_resume and audio_stop did not know about the parallel preview sink, so clicking Play on a track that was currently being previewed left the preview running on top of the freshly started main playback. New helper clears the resume flag, bumps the preview generation, drops the sink and emits an 'interrupted' end event before any of those commands touches the main sink. * feat(settings): per-location track preview toggles Splits the single trackPreviewsEnabled toggle into a master + 6 per-location sub-toggles (suggestions, albums, playlists, favorites, artist, randomMix). Master remains the kill switch; sub-toggles are only honoured when master is on. Each tracklist container is marked with `data-preview-loc="<id>"` and hidden via scoped CSS when the matching root attribute is "off". startPreview now takes a location argument so the store can guard logic too. i18n added in all 8 locales. * fix(contextmenu): use ChevronsRight for Play Next to distinguish from preview
Psysonic
The Ultimate Desktop Client for Self-Hosted Music Libraries
Fast. Beautiful. Native. Feature-packed. Built primarily for Navidrome. Also compatible with Gonic, Airsonic, LMS and other Subsonic-compatible servers with partial feature support.
No telemetry • Native performance • Massive feature set • Community driven
Warning
Psysonic is under heavy active development. Bugs and rough edges are to be expected. We reserve the right to change, remove, or rework existing features at any time without prior notice.
Server Compatibility
Psysonic is optimized first and foremost for Navidrome.
Many advanced functions integrate directly with Navidrome APIs for the best possible experience. Other Subsonic-compatible servers generally work well, but some features may be limited depending on server capabilities.
Why Psysonic?
Most Subsonic clients feel like web wrappers.
Psysonic does not.
It is a true desktop experience built with Rust, Tauri v2, and React for users who care about speed, aesthetics, customization, and serious music library management.
If you host your own music, this is what the premium experience should feel like.
Core Features
Playback Engine
- Gapless playback
- Crossfade
- ReplayGain support
- Smart Loudness Normalization
- Infinite Queue
- Smart Radio sessions
- High responsiveness with low memory usage
Audio Tools
- 10-band Equalizer
- Presets
- AutoEQ headphone correction
- Per-device optimization
Library Power
- Lightning-fast search
- Albums / Artists / Tracks / Genres
- Ratings system
- Multi-select bulk actions
- Drag & drop playlist management
- Huge library friendly
Lyrics & Discovery
- Synced lyrics with seek support
- Auto-scroll sidebar lyrics
- Fullscreen lyric mode
- Last.fm scrobbling
- Similar artists / love tracks / stats
Personalization
- Huge theme collection
- Catppuccin / Nord inspired styles
- Glassmorphism effects
- Font customization
- Zoom controls
- Keybind remapping
- Theme Scheduler (day/night auto switch)
Power User Extras
- CLI controls
- USB / portable sync
- Backup & restore settings
- In-app auto updater
- LAN / remote auto switching
Orbit (Upcoming)
Listen Together. In Sync. Soon.
Currently in final development and testing. Orbit will introduce synchronized shared listening sessions directly inside Psysonic.
- Host-controlled playback
- Join via link
- Shared listening sessions
- Guest song suggestions
- Real-time queue interaction
Rolling out in an upcoming release. Community feedback will help shape the final experience.
Platforms
| OS | Support |
|---|---|
| Windows | Native Installer (certificate pending) |
| macOS | Signed DMG |
| Linux | AppImage / DEB / RPM / AUR (psysonic, psysonic-bin) / NixOS |
Supports 8 languages and growing.
Install
Linux
curl -fsSL https://raw.githubusercontent.com/Psychotoxical/psysonic/main/scripts/install.sh | sudo bash
Windows
Download the latest installer from Releases.
SmartScreen warnings may appear until the code-signing certificate is active.
macOS
Download the signed DMG from Releases.
Development
git clone https://github.com/Psychotoxical/psysonic.git
cd psysonic
npm install
npm run tauri:dev
Build release:
npm run tauri:build
Privacy First
- No telemetry
- No spyware nonsense
- No analytics harvesting
- Your library stays yours
Community
Join Discord, report bugs, suggest features, share themes, shape the future.
License
GNU GPL v3.0
