Skip to content

v0.9.0

Latest

Choose a tag to compare

@Thomasevano Thomasevano released this 13 Aug 09:57

0.9.0 (2026-08-13)

⚠ BREAKING CHANGES

  • deps: the frontend now requires the Inertia v3 client, Vite 8, and @sveltejs/vite-plugin-svelte 7.
  • deps: requires Node.js 24 or above.

Features

  • listen-later: show link fetch progress (11a17c2), closes #45
  • ui: mobile-first library and touch targets (7b08741)

Bug Fixes

  • a11y: announce a sort change (9936eb7), closes #36 #56
  • a11y: announce the state the duplicate dialog resolves to (7e0ce6a), closes #36 #56
  • a11y: bring the palette to WCAG AA in light and dark (b7aad49), closes #36
  • a11y: give a result option its artists (3b77328), closes #36 #56
  • a11y: head each row with its title (71285bb), closes #36 #56
  • a11y: head every column with its own name (6cae89a), closes #36 #56
  • a11y: hold the columns menu open on a tick (2041c0a), closes #36 #56
  • a11y: honour prefers-reduced-motion on every animated surface (061af45)
  • a11y: keep the row badges from reading as pictures (31261e1), closes #36 #56
  • a11y: kill the tap delay on interactive controls (cd358d4), closes #36
  • a11y: let a menu paint before it takes focus (990086a), closes #36 #56
  • a11y: let the platform draw the selects (f653ea0), closes #36 #56
  • a11y: let the results listbox own its options (60cc2d4), closes #36 #56
  • a11y: let the select triggers say what they hold (ba5d2d6), closes #36 #56
  • a11y: name a result option by what it prints (45ce718), closes #36 #56
  • a11y: name every row menu after its item (21e07a3), closes #36 #56
  • a11y: name the dialog a reader lands on (60f8719), closes #36 #56
  • a11y: name the item each menu action acts on (d5d9049), closes #36 #56
  • a11y: name what the delete dialog will remove (e4a3d18), closes #36 #56
  • a11y: put the artists in every list toast (e10d114), closes #36 #56
  • a11y: say "artists" where a duplicate needs the whole set (de51506), closes #36
  • a11y: say when an item is marked listened (25e7a4e), closes #36 #56
  • a11y: say which key reaches the search results (58fba3a), closes #36 #56
  • a11y: say which row a control belongs to (547192e), closes #36 #56
  • ci: declare a build decision for core-js (b529988)
  • search: pulse a skeleton block for the cover while results load (82e89fd)
  • types: check Svelte frontend (f3e13dc), closes #52
  • ui: correct mobile list controls (e121908)
  • ui: correct the default mobile sort label (51c4500)
  • ui: hide the column chooser on mobile (04ebb5b)
  • ui: make library page mobile-first (3a1480e)
  • ui: refine mobile cards and list controls (9001b91)
  • ui: widen max container width to screen-2xl (091eaf3)

Performance Improvements

  • link: stop searching for cover art the platform already supplied (1634366)
  • search: cache MusicBrainz search results in memory (29a3386)
  • search: derive cover art urls instead of fetching them per result (f8ee406)
  • ui: render added items before external links resolve (482f09a)

Miscellaneous Chores

Build System

  • deps: adopt Inertia v3 (917a2e3)
  • deps: upgrade to AdonisJS v7 (e5d64e8)