Repository navigation
Releases: immerle/immerle
Releases Β· immerle/immerle
Release list
v0.0.14
What's Changed
- feat(search): surface public Spotify playlists as on-demand playlists by @ermos in #326
- fix(playlists): link Spotify playlist tracks already in the library by @ermos in #327
- fix(playlists): show covers on unresolved on-demand tracks and refresh rows once resolved by @ermos in #328
- feat(admin): merge tracks into Library and turn settings into grouped collapsible sections by @ermos in #329
Full Changelog: v0.0.13...v0.0.14
v0.0.13
What's Changed
- fix(providers): allow private endpoints when creating an HTTP provider from URL by @ermos in #318
- fix(deps): Update module golang.org/x/image to v0.47.0 by @renovate[bot] in #315
- fix(deps): Update all non-major dependencies by @renovate[bot] in #314
- fix(db): widen int4 columns to bigint on Postgres by @ermos in #319
- feat(stream): adaptive streaming quality and progressive transcoding by @ermos in #321
- fix(subsonic): expose the downloads dir as a music folder with an int id by @ermos in #322
- fix(subsonic): expose playlist cover art so clients show generated covers by @ermos in #323
- fix(playback): prune stale local tracks from queues by @David-H-Afonso in #306
- fix(playback): keep building the queue when a track was deleted from the catalog by @ermos in #324
- chore(deps): Pin postgres Docker tag to b0f9560 by @renovate[bot] in #313
- fix(covers): fall back to English for generated cover labels like the UI does by @ermos in #325
Full Changelog: v0.0.12...v0.0.13
v0.0.12
What's Changed
- fix(deps): Update module golang.org/x/sync to v0.24.0 by @renovate[bot] in #303
- chore(deps): Pin dependencies by @renovate[bot] in #298
- chore(deps): let the Expo SDK own its packages and fix govulncheck on Go 1.27 by @ermos in #304
- fix(deps): Pin dependencies by @renovate[bot] in #299
- chore(deps): Update module golang.org/x/crypto to v0.56.0 [SECURITY] by @renovate[bot] in #305
- fix(db): use BYTEA for provider_cache.response so migrations run on Postgres by @ermos in #311
- feat(search): remove recent searches by @David-H-Afonso in #308
Full Changelog: v0.0.11...v0.0.12
v0.0.11
What's Changed
- docs: add app screenshots to the README and docs site by @ermos in #289
- chore(deps): bump Go to 1.26.9 to fix stdlib vulnerabilities by @ermos in #291
- fix(ondemand): reuse an already downloaded song instead of downloading it again by @ermos in #290
- fix(scanner): read multi-value ID3v2 artist frames without concatenating them by @ermos in #292
- chore(deps): update minor and patch dependencies without breaking changes by @ermos in #293
- ci(iml): build the Linux CLI as pure Go and drop the ALSA headers by @ermos in #294
- fix(iml): add a search focus mode and find the liked songs playlist by @ermos in #295
- fix(playback): rework cross-device sync around a single active device by @ermos in #296
- chore(ui): align Expo SDK packages with expo install --fix by @ermos in #297
Full Changelog: v0.0.10...v0.0.11
v0.0.10
What's Changed
- fix(ui): patch flash-list's Kotlin event dispatch for RN 0.86 compat by @ermos in #255
- fix(ui): bound session-restore network calls so native falls back offline by @ermos in #256
- fix(ui): boot instantly from cached session, timeout every request globally by @ermos in #257
- feat(autoplaylists): ReccoBeats-powered "DΓ©couvertes" recommendation playlist by @ermos in #259
- feat(i18n): translate server-generated playlist names by @ermos in #260
- fix(ui): resolve unresolved playlist tracks in place during playback by @ermos in #258
- feat(scrobble): server-side ListenBrainz scrobbling by @ermos in #249
- feat(autoplaylists): materialize ListenBrainz's Daily/Weekly Jams and Weekly Exploration by @ermos in #261
- feat: move social icon into the account menu, add a member directory by @ermos in #263
- fix(ui): restore the cast-target dropdown on web by @ermos in #262
- docs: restructure into category sections and refresh content by @ermos in #264
- feat(scrobble): add Last.fm scrobbling and unify scrobble settings by @ermos in #265
- feat(autoplaylists): add a Last.fm similarity-based discovery mix by @ermos in #266
- chore(renovate): bulk non-major updates and disable automerge by @ermos in #272
- chore(renovate): ignore the private immerle image by @ermos in #273
- fix(deps): Update module golang.org/x/image to v0.45.0 [SECURITY] by @renovate[bot] in #274
- chore(deps): Update dependency electron to v41 [SECURITY] by @renovate[bot] in #275
- fix(deps): bump Go to 1.26.6 and patch Trivy-flagged dependencies by @ermos in #278
- feat(auth): throttle brute-force password logins per username and IP by @ermos in #277
- fix(docs): align Docusaurus packages on 3.10.2 to fix the /api/ build by @ermos in #279
- fix(i18n): localize navigation, playback labels and shared formatters by @David-H-Afonso in #268
- docs: refresh README and docs for recent features by @ermos in #280
- fix(scanner): prune empty albums and orphan artists after a full scan by @ermos in #281
- fix(ondemand): keep stats of evicted downloads and never evict a starred album by @ermos in #284
- fix(playlists): skip tracks deleted mid-sync instead of failing the replace by @ermos in #285
- fix(audio): seek position lost on reload until manual seek by @ermos in #267
- fix(player): apply the saved volume to an engine created before hydration by @ermos in #286
- fix(ui): release focus from hidden stack screens and ignore 0px FlashList layouts by @ermos in #287
- fix(ui): fail fast to the offline fallback when the server is unreachable by @ermos in #288
New Contributors
- @renovate[bot] made their first contribution in #274
- @David-H-Afonso made their first contribution in #268
Full Changelog: v0.0.9...v0.0.10
v0.0.9
v0.0.8
v0.0.7
What's Changed
- fix(core): include field details in admin bootstrap validation error by @ermos in #164
- chore(ui): pin yarn packageManager and sync expo-generated gitignore by @ermos in #165
- feat(federation): pull subscribed-instances playlists and resolve tracks lazily by @ermos in #166
- fix(federation): forward a playlist's dynamic mosaic cover to the hub by @ermos in #167
- fix(playlists): resolve on-demand tracks before adding them to a playlist by @ermos in #168
- fix(core): backfill a partial album from providers that only implement Search by @ermos in #169
- fix(api): fall back an album's cover to its own id in the native API by @ermos in #170
- fix(player): disable seeking while a track is streaming progressively by @ermos in #171
- feat(player): upgrade remote tracks to local seeking once downloaded by @ermos in #172
- feat(playback): sync last-played state across devices and add playback transfer by @ermos in #174
- fix(player): stop dimming the full-screen seek bar on remote tracks by @ermos in #173
- chore(core): remove dead CatalogService.EnqueueDownload by @ermos in #175
- chore(core): drop PrunableLog interface, use ProviderLogRepo directly by @ermos in #176
- chore(api): drop FederationStatusProvider interface, use *federation.Service directly by @ermos in #177
- chore(api): drop RadioToggle interface, use *core.SettingsService directly by @ermos in #178
- chore(ui): remove dead admin transcode-profile/settings slice by @ermos in #179
- chore(ui): remove unused ArtistRow component by @ermos in #180
- chore(ui): remove unused randomHex util by @ermos in #181
- chore(ui): remove unused useArtists hook and client.getArtists by @ermos in #182
- chore(ui): remove unused useGenres hook and client.getGenres by @ermos in #183
- chore(ui): remove unused useJamState hook by @ermos in #184
- chore(ui): remove unused useClient selector by @ermos in #185
- fix(api): stop leaking internal errors and harden SSRF/signature checks by @ermos in #186
- fix(subsonic): stop leaking credentials in cover URLs and fix response bugs by @ermos in #187
- fix(core): propagate password-change errors and bound LDAP cache by @ermos in #188
- fix(app): add panic recovery, tighten CORS defaults, and fix outbox retry handling by @ermos in #189
- fix(federation): validate redirect targets and bound response reads by @ermos in #190
- fix(persistence): prevent playlist corruption and outbox claim race by @ermos in #191
- test(httputil): cover SSRF guard, client IP and token extraction by @ermos in #192
- test(db): cover connection setup, migrations and rebind helpers by @ermos in #193
- test(federation): cover hub Client requests, errors and redirect guard by @ermos in #194
- test(logging): cover level parsing and handler format selection by @ermos in #195
- test(models): cover remote cover-id encode/decode round trip by @ermos in #196
- test(server): cover graceful shutdown and listen-error paths by @ermos in #197
- feat(federation): add feed cursor and resolved-payload storage by @ermos in #198
- feat(federation): add read-only feed socket client by @ermos in #199
- feat(federation): push playlist sync over the socket, answer replay requests by @ermos in #200
- feat(federation): close the feed socket on Unlink by @ermos in #201
- Fix hub-playlist track resolution and toast UX by @ermos in #202
- fix(federation): drop unfollowed instance's playlists unless subscribed by @ermos in #203
- fix(federation): fall back to local artist+title match before provider search by @ermos in #204
- fix(server): don't treat a shutdown grace timeout as a fatal error by @ermos in #205
- feat(cli): force quit on a second SIGINT/SIGTERM by @ermos in #206
- fix(core): match noisy hub titles against a provider's canonical title by @ermos in #207
- feat(importer): fetch Spotify playlists directly, no hub needed by @ermos in #208
- fix(devices): point Connected devices at real device sessions by @ermos in #209
- feat(playqueue): remote-control command channel + playback sync fixes by @ermos in #210
- fix(spotifyweb): add doc comment on exported NewClient by @ermos in #212
- feat: live admin log viewer (JSON logs, SSE stream, search/filter) by @ermos in #211
- fix(audio): update play/pause icon immediately on toggle by @ermos in #213
- fix(ui): fix unresponsive cast-target button on native by @ermos in #214
- fix(ui): always refetch the cast-target list on open by @ermos in #215
- refactor(ui): invalidate every cache a mutation's data actually affects by @ermos in #216
- feat(halloffame): personal top-tracks ranking with drag-and-drop reordering by @ermos in #217
- fix(ui): back button, safe-area and loading skeleton on hero headers by @ermos in #218
- feat(ui): declutter mobile header and pin local songs in playlists tab by @ermos in #219
- fix(ui): scroll the playlists tab as a single list on mobile by @ermos in #220
- feat(ui): add discreet quick-access shortcuts to the homepage by @ermos in #221
- fix(ui): use a plain title+back header on the radio home screen by @ermos in #222
- fix(ui): give the radio country/favorites screen a hero header by @ermos in #223
- fix(ui): give the radio home screen the same hero header as country pages by @ermos in #224
- feat(ui): animated dancefloor-style launch screen by @ermos in #225
- feat(ui): show an offline banner on Home linking to local downloads by @ermos in #226
- feat(charts): sync curated Spotify chart playlists weekly by @ermos in #227
- fix(core): deprioritize alternate versions in remote track matching by @ermos in #228
- feat(charts): auto-generate a flag/globe cover for each chart playlist by @ermos in #229
- feat(charts): serve chart covers through a generic /cover/generator builder by @ermos in #230
- feat(search): unify global search into one relevance-ranked list with public playlists by @ermos in #231
- feat(discovery): auto-generated genre/decade playlists + personal listening lists by @ermos in #232
- fix(playback): sync shuffle/repeat mode across devices by @ermos in #233
- fix(playback): support remote shuffle/repeat commands across devices by @ermos in #235
- feat(search): include radio stations in the global search by @ermos in #236
- chore: prune noisy comments and translate French to English by @ermos in #234
- feat(jam): add Jam invites, redesign the profile page, fix SSE connection cost by @ermos in #237
- feat(social)!: remove friend/friendship feature by @ermos in #238
- refactor(ui): remove logout from header dropdown by @ermos in #239
- feat(iml): add terminal music client for immerle servers by @ermos in #241
- feat(providers): playlist browsing + ISRC storage, wired into search by @ermos in #240
- feat(iml): add repeat and shuffle by @ermos in #242
- feat(iml): responsive full-screen TUI by @ermos in #243
- feat(ui): hide smart p...
v0.0.6
What's Changed
- fix(api): unescape chi path params so remote ids resolve by @ermos in #144
- feat(lockscreen): now playing by @ermos in #145
- fix(search): show loading on retype and stop caching results by @ermos in #146
- feat(playlists): owner-editable covers (upload or designed) by @ermos in #149
- refactor(federation): hub client from OpenAPI + link/unlink UX by @ermos in #150
- feat(federation): discovery + instance subscriptions, dedicated admin page by @ermos in #151
- feat: generic async outbox worker + public-playlist hub sync by @ermos in #152
- chore: rename website repository by @ermos in #153
- fix(ui): pin legacy-peer-deps so npm ci doesn't choke on typescript 6 by @ermos in #156
- fix(security): bump Go to 1.26.5 to fix crypto/tls ECH privacy leak by @ermos in #157
- feat(audio): migrate to @rntp/player v5 for New Architecture support by @ermos in #154
- fix(router): hide back-button title text to stop showing "(tabs)" by @ermos in #155
- feat(auth): bootstrap first admin from ADMIN_USERNAME/ADMIN_PASSWORD by @ermos in #159
- fix(security): bump golang.org/x/crypto to v0.52.0 by @ermos in #158
- docs: cover on-demand catalog, social, import and federation by @ermos in #160
- docs: merge DOCS.md into the docs site, add a Developers section by @ermos in #161
- fix(docker): give npm cache mount a fresh id and lock sharing by @ermos in #162
- chore(docker): bump UI build to Node 24 by @ermos in #163
Full Changelog: v0.0.5...v0.0.6
v0.0.5
What's Changed
- feat(import): import Deezer playlists by @ermos in #67
- fix(macos): gatekeeper dmg by @ermos in #69
- feat(library): user-uploaded "local" music with a virtual playlist by @ermos in #68
- feat(library): admin track management by @ermos in #70
- chore(persistence): remove unused GetTracks by @ermos in #71
- chore(ui): bump undici to 6.27.0 (CVE-2026-12151) by @ermos in #77
- docs(setup): explain why first-run admin setup is token-free by default by @ermos in #78
- chore(models): remove unused Folder type by @ermos in #76
- refactor(scanner): use filepath.Base in baseNameNoExt by @ermos in #75
- refactor(subsonic): dedup index builders with a generic helper by @ermos in #73
- chore(core): remove unused RemoteSearchArtists by @ermos in #72
- refactor(subsonic): drop dead format param from audioContentType by @ermos in #74
- refactor(core): extract search orchestration into a shared LibraryService by @ermos in #82
- feat(wrapped): year-in-review stats with admin toggle by @ermos in #79
- refactor(core): extract artist/album detail into LibraryService by @ermos in #83
- refactor(core): extract list endpoints into LibraryService by @ermos in #84
- refactor(core): extract favorites/rating/scrobble into PlaybackService by @ermos in #85
- refactor(core): extract playlist CRUD into PlaylistService by @ermos in #86
- refactor(core): extract user administration into UserService by @ermos in #87
- refactor(core): extract shares into ShareService by @ermos in #88
- refactor(core): extract play-queue sync into PlayQueueService by @ermos in #89
- refactor(core): route getSong/getArtists/getIndexes through LibraryService by @ermos in #90
- feat(rest): REST API foundation under /api/v1 with pilot resources by @ermos in #91
- feat(radio): internet radio stations (built-in + custom) by @ermos in #80
- feat(immerle): catalog browse β songs, albums list, genres, search by @ermos in #92
- feat(immerle): favorites, ratings and scrobble mutations by @ermos in #93
- feat(immerle): saved play queue and now-playing feed by @ermos in #94
- feat(immerle): personal playlist CRUD by @ermos in #95
- feat(media): shared media server; REST stream/download/cover by @ermos in #96
- feat(immerle): admin user management and self password change by @ermos in #97
- feat(immerle): share links CRUD by @ermos in #98
- feat(smart-playlists): rule-based dynamic playlists by @ermos in #81
- feat(immerle): surface per-user track annotations in catalog views by @ermos in #99
- chore: audit deadcode by @ermos in #100
- feat(immerle): end a Jam session (DELETE /jam/{id}, host only) by @ermos in #101
- feat(media): public cover art + signed short-lived stream URLs by @ermos in #102
- feat(immerle): list favorites (GET /me/favorites) by @ermos in #103
- feat(immerle): list songs by genre (GET /songs?genre=) by @ermos in #104
- feat(ui): browse catalog over the native REST API (Phase 1) by @ermos in #105
- feat(ui): catalog search over the native REST API (Phase 2) by @ermos in #107
- refactor(persistence): build SQL with the melody builder by @ermos in #106
- feat(immerle): end a Jam from the UI (host only) by @ermos in #108
- refactor(persistence): use melody v2.1.0 raw escape hatches by @ermos in #110
- feat(media): size signed-URL TTL for whole-queue player minting (15m -> 6h) by @ermos in #111
- feat(ui): media native by @ermos in #112
- feat(ui): playlist CRUD over the native REST API (Phase 4) by @ermos in #113
- refactor(persistence): use melody v2.1.1 NOT IN for radio prune by @ermos in #114
- feat(ui): per-user state over the native REST API (Phase 5) by @ermos in #115
- feat(ui): admin user management over the native REST API (Phase 6) by @ermos in #116
- feat(ui): native password login with a personal API token (Phase 7) by @ermos in #117
- fix(db): out-of-order migrations by @ermos in #118
- refactor(ui): delete the dead Subsonic client (Phase 8) by @ermos in #119
- fix(ui): redirect authenticated users away from /login and /setup by @ermos in #120
- fix(ui): prefill server URL on direct /login and /setup by @ermos in #121
- fix(ui): show the radio station cover in the player by @ermos in #122
- feat(offline): advertise offlineDownloads capability with admin toggle by @ermos in #123
- feat(web): PWA β installable web app + offline app shell (W6) by @ermos in #125
- feat(offline): downloads core β registry + native download service (W6) by @ermos in #126
- chore(openapi): regenerate spec for /admin/offline endpoint by @ermos in #127
- fix(ui): show like status on the player for radios by @ermos in #128
- fix(catalog): fall back album cover to its first track's by @ermos in #124
- feat: offline playback by @ermos in #129
- fix(ui): radio disable controls by @ermos in #130
- feat(offline): download UI β track menu action + manage screen (W6) by @ermos in #131
- feat(auth): optional LDAP simple-bind authentication by @ermos in #133
- feat(metadata): composer + BPM + ReplayGain on tracks by @ermos in #132
- feat(podcasts): Subsonic podcast API + native REST + directory providers by @ermos in #134
- chore(security): bump Go toolchain to 1.26.4 by @ermos in #135
- fix(docs): use bracketed admonition titles for Docusaurus 3 by @ermos in #137
- fix(db): resolve duplicate goose migration version 24/25 by @ermos in #136
- fix(lint): gofmt ldap_test.go map alignment by @ermos in #138
- feat(admin): replace playlist sidebar with admin nav menu on desktop by @ermos in #139
- feat(player): karaoke lyrics via native REST + shared parser by @ermos in #140
- feat(mobile): global mobile header + player above the tab bar by @ermos in #141
- fix(expo): go native modules by @ermos in #142
- fix(docker): bump build image to go 1.26 by @ermos in #143
Full Changelog: v0.0.4...v0.0.5