Skip to content

Releases: immerle/immerle

v0.0.14

Choose a tag to compare

@ermos ermos released this 20 Oct 10:54
88937c8

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

Choose a tag to compare

@ermos ermos released this 19 Oct 15:47
fe3b373

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

Choose a tag to compare

@ermos ermos released this 16 Oct 13:17
8fce7a9

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

Choose a tag to compare

@ermos ermos released this 10 Oct 22:16
9e95f6e

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

Choose a tag to compare

@ermos ermos released this 08 Oct 21:35
1edac1b

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

Full Changelog: v0.0.9...v0.0.10

v0.0.9

Choose a tag to compare

@ermos ermos released this 18 Jul 22:37
f3d3b1d

What's Changed

  • fix(release): attach iml archives and fix the EAS Android build by @ermos in #254

Full Changelog: v0.0.8...v0.0.9

v0.0.8

Choose a tag to compare

@ermos ermos released this 18 Jul 22:20
1b58748

What's Changed

  • feat(purchases): import your own Bandcamp purchases by @ermos in #252
  • feat(release): ship iml, desktop and Android builds instead of a raw server binary by @ermos in #253

Full Changelog: v0.0.7...v0.0.8

v0.0.7

Choose a tag to compare

@ermos ermos released this 18 Jul 20:06
c1fdc04

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...
Read more

v0.0.6

Choose a tag to compare

@ermos ermos released this 10 Jul 22:43
b82ecb9

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

Choose a tag to compare

@ermos ermos released this 21 Jun 09:29
7cec295

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