This release brings significant UI changes with the new topbar and new fullscreen player, and it also introduces a preview version of "Rufin Connect", which is a cross-device sync engine that will be used for... our upcoming Android version! The Android version will become a native player just like the desktop version is; it will be a standalone app. Rufin Connect will let you sync logins and local folders and continue the music. I intend to keep the feature parity close by reusing existing Rust code (with UniFFI Kotling bindings) and make this ready by the next major release. There is also a Matrix chat for Rufin now, you can drop in to say hi!
-
Rufin Connect works by reading and writing to a profile folder. The communication is end-to-end encrypted, and you confirm that both devices encrypt and decrypt by confirming the emojis shown on both devices match during pairing. You have multiple options to configure sync between these devices. By default, Rufin can discover a device on the local network and connect to it; these folders become stored locally. If you want persistent synchronization, you can configure WebDAV/Samba directly from inside the app (or reuse existing configuration if you have it as a source); you can point something like SyncThing to this folder, or you can use an Iroh relay/self-host a personal one. I could only test this myself so much; so I would appreciate any issues with this getting reported. In the future, I intend to use p2panda so that any kind of p2p relay works (i2p, onion network, etc.).
-
This also becomes the official release of Controller with more fixes and an updated web UI interface, including removing the JS requirement; so the site becomes usable with JS disabled as well.
-
The new topbar handles various problems for us. It now provides visual parity cross-platform since Windows/MacOS needed a separate tray, which is now gone. It also makes room for growing controls, some of which I have moved here. We also now have a proper persistent search bar, which can show recent searches and results in place without needing to go to the search route.
-
We now have a lot of themes, including Catppuccin flavors and accent colors. You can also create a custom theme.
-
The fullscreen player gets a brand new look and multiple layout options. It can show a dynamic background or a blurred version of the album artwork. It also gets a new tab for related tracks.
-
An item that waited in the backlog for quite a bit of time: activity overview. You can see your monthly/yearly (preparing for the future) activity in Rufin and export it as a PNG!
-
The visualizer now gets presets and styles and exposes multiple settings as configurable. By default, it now uses the resolved accent color of your theme.
-
Right sidebar is separated into modules: you can set the visualizer in the sidebar separately from the lyrics, hide the playback queue, and move each of these 3 up and down.
-
Local playback mapping that is used for metadata editing is hardened to handle some failure paths. The path is now also editable directly.
-
Playlist interoperability is increased. You can now keep imported playlist files in sync, so the same playlist file can be used between different players. You can also configure multiple options such as using relative or absolute paths or the format of playlist files, as we also support PLS/XSPF now.
-
Remote playlists can now be set private or public.
-
The context menu gets a submenu for Play so that you can now shuffle collections directly from the context menu without needing to enable shuffle mode.
-
Added French translation by Arnaud Constantin
-
Added Italian translation by Patrick Canal
Changelog
- ci(macos): keep Intel build-only and run verification on ARM by @screwys in #1080
- fix(nix): use standard CMake build hooks by @screwys in #1081
- chore(readme): add controller to top level description by @screwys in #1083
- fix(packaging): limit native bundles to media playback plugins by @screwys in #1084
- feat(ui): add shared topbar and separate player panels by @screwys in #1087
- chore(i18n): update translations by @weblate in #1088
- feat(web): support script-free control and stable page loading by @screwys in #1089
- fix(ui): keep preferences equalizer controls alive by @screwys in #1090
- chore(deps): update renovatebot/github-action action to v46.2.6 by @rufin-renovate, @screwys in #1086
- chore(deps): update rust crate mdns-sd to v0.21.2 by @rufin-renovate, @screwys in #1066
- fix(ui): let sidebar expand close right pane by @screwys in #1091
- chore(deps): update rust crate mdns-sd to v0.21.3 by @rufin-renovate in #1094
- chore(deps): update rust crate reqwest to v0.13.5 by @rufin-renovate in #1098
- chore(i18n): update translations by @weblate, @aguhadug in #1095
- feat(fullscreen): refine fullscreen player with multiple pane layouts by @screwys in #1099
- chore(i18n): update translations by @weblate in #1100
- fix(ui): stop detail view to automatically scroll on focus restoration by @screwys in #1101
- chore: add matrix chatroom link to readme by @screwys in #1102
- feat(ui): expand play button into a submenu and add new shuffle options by @screwys in #1103
- chore(i18n): update translations by @weblate in #1104
- fix(ui): adjust equalizer alignment by @screwys in #1106
- fix(ui): make fullscreen player open without waiting background color to apply by @screwys in #1107
- chore(i18n): update translations by @weblate, @Superredstone in #1105
- fix(library): make new albums in remotes update home by @screwys in #1108
- fix(ui): slow down the seekbar width changing speed by @screwys in #1110
- fix(lyrics): separate instrumental versions of songs from non-instrumental versions during fetching by @screwys in #1111
- chore(deps): update rust crate syn to v3 by @rufin-renovate in #950
- fix(history): reverse chronological order when toggling sort direction by @screwys in #1114
- chore(i18n): update translations by @weblate, @jakubcabal, @aguhadug, @Superredstone in #1116
- fix(sources): reconcile library updates and quiet automatic refreshes by @screwys in #1120
- chore(deps): update renovatebot/github-action action to v46.3.0 by @rufin-renovate, @screwys in #1118
- feat(library): support PLS/XSPF playlists, and expand playlist operations for interoperability by @screwys in #1121
- chore(i18n): update translations by @weblate, @aguhadug in #1122
- fix(web): make browser sessions persist by @screwys in #1123
- fix(player): reset playback preview and center lyrics loading by @screwys in #1124
- feat(ui): add visualizer presets and configuration options by @screwys in #1125
- chore(i18n): update translations by @weblate, @aguhadug in #1126
- chore: update readme by @screwys in #1127
- chore(deps): update rust crate winsafe to 0.0.29 by @rufin-renovate in #1020
- chore(i18n): update translations by @weblate, @aguhadug in #1128
- feat: add Rufin Connect by @screwys in #1129
- chore(i18n): update translations by @weblate in #1130
- docs: update screenshots and Flathub metadata by @screwys in #1131
- feat(search): add recent items and interactive topbar results by @screwys in #1132
- feat(playlists): add a separate dialog for remote playlists by @screwys in #1134
- chore(i18n): update translations by @weblate in #1133
- feat(player): improve sidebar layout, queue controls and appearance by @screwys in #1135
- chore(i18n): update translations by @weblate in #1136
- perf: reduce storage stalls across library and background work by @screwys in #1137
- fix: icon layout fixes by @screwys in #1138
- fix(playlists): remove redundant dialog by @screwys in #1139
- chore(i18n): update translations by @weblate in #1140
- fix(home): restore random albums in Explore by @screwys in #1141
- feat(ui): unify playback indicators and add sidebar queue setting by @screwys in #1142
- chore(i18n): update translations by @weblate, @aguhadug in #1145
- fix(local-access): allow path editing and defer matching until reload by @screwys in #1146
- chore(i18n): update translations by @weblate in #1147
- chore(deps): update rust crate lofty to v0.25.2 by @rufin-renovate, @screwys in #1144
- chore(deps): update renovatebot/github-action action to v46.3.1 by @rufin-renovate, @screwys in #1143
- feat(activity): add monthly and yearly listening overview by @screwys in #1148
- chore(i18n): update translations by @weblate, @aguhadug in #1149
- fix: correct relay toggling and startup readiness by @screwys in #1150
- feat: add private/public playlist separation for remote sources by @screwys in #1151
- chore(i18n): update translations by @weblate, @aguhadug in #1152
- feat(rows): limit now playing indicator FPS, and add a persistent button for context menu by @screwys in #1154
- chore(i18n): update translations by @weblate in #1153
- fix(performance): reduce repeated reads and idle work by @screwys in #1155
- feat(appearance): add custom themes and refine player styling by @screwys in #1156
- fix(settings): relax database and playback radio settings by @screwys in #1157
- chore(i18n): update translations by @weblate in #1158
- fix(updates): defer Windows installation until restart or quit by @screwys in #1159
- feat(discord): add playback badges and Flatpak setup guidance by @screwys in #1161
- chore(i18n): update translations by @weblate in #1160
- fix(ui): prevent search autofocus when changing pages by @screwys in #1162
- fix(activity): smooth listening overview period transitions by @screwys in #1163
- chore: update readme by @screwys in #1164
- fix(appearance): simplify theme previews and use explicit palettes by @screwys in #1165
- build(deps): replace vendored SMB with upstream 0.12.1 by @screwys in #1166
- chore(deps): update rust crate iroh to v1.2.0 by @rufin-renovate in #1168
- perf: bound collection loading and reduce repeated library work by @screwys in #1169
- chore(deps): update dependency sccache to v0.18.0 by @rufin-renovate, @screwys in #1167
- feat(ui): alignment and right sidebar improvements by @screwys in #1170
- chore(i18n): update translations by @weblate in #1171
- fix: fix folders & genres layouts and queries by @screwys in #1172
- chore(i18n): update translations by @weblate in #1173
- feat(listening-overview): allow an option to turn off automatic play by @screwys in #1174
- chore(i18n): update translations by @weblate, @aguhadug in #1175
Full Changelog: v0.15.4...v0.16.0