Changelog

Pulled straight from the project's CHANGELOG.md. The format follows Keep a Changelog; versions follow SemVer.

Changelog

All notable changes to Bòcan are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

2.17.1 (2026-09-21)

Right-clicking a song inside an album now always brings up its menu. After you opened an album from the Albums grid, a right-click on one of its songs could do nothing at all until you had clicked a song first, which made it look random.

For developers

Fixed

2.17.0 (2026-09-20)

Deleting a song, or removing one from the library, no longer rebuilds the whole songs list. The list keeps your place, so you can work down a long list and delete as you go instead of being thrown back to the top after every one. Removing several songs at once now happens in a single pass rather than one redraw per song, and the songs you did not touch stay selected. If a song cannot be removed, Bòcan now tells you instead of leaving it in the list without a word. An artist’s page also keeps up: remove the last song of an album there and the album leaves the page straight away.

Sorting the songs list now sorts all the way down instead of stopping at the column you clicked. Click Artist and each artist’s albums stay together with their tracks in order, rather than the songs falling wherever the import happened to leave them. Every column works this way: sort by play count and the songs sharing a count are grouped by artist and album, so a half-played album reads as an album. Your choice is remembered the next time you open Bòcan.

The lyrics items in the Track menu now keep up with what is happening. Clear Lyrics becomes available as soon as lyrics arrive for the song that is playing, and greys out again once you clear them, instead of waiting for the next song. Fetch Lyrics greys out while a fetch is under way, so it cannot be started twice.

Downloading a podcast episode now shows how far it has got. The small download mark beside an episode fills as the file arrives, and hovering over it reads out the percentage, so a long episode on a slow connection no longer just sits there saying it is downloading.

When a scrobbling service is refusing submissions, Bòcan now waits the full backoff before trying again. A timer left over from an earlier wait could end the next one early, so it sometimes retried sooner than intended against a service that had asked it to slow down.

Up Next now marks missing songs reliably. When a song in a restored queue can no longer be found on disk, its row is greyed out. That marking only reached whichever copy of the list happened to be listening first, so the full screen view could disagree with the main window, and after you left Up Next and came back the marking stopped arriving at all until the next restart.

Phone Sync no longer treats finishing a song as a library change. Playing a song used to tell your phone that the library had changed, so the phone fetched the whole list again and found nothing different, and on a Mac preparing smaller copies of your songs that also started a fresh pass over the library. Both now wait for a change the phone can actually see, such as an edit, a rating or a new song. If you sync chosen playlists rather than everything, nothing changes, because a smart playlist can be built on play counts.

Songs from a Subsonic server now download with far less work for your Mac. A large lossless song starts a little sooner, and the download no longer competes with the song that is already playing.

The keyboard shortcut list in Help now includes Immersive Mode. The shortcut worked all along, but the list did not mention it, so the only way to find it was the View menu.

For developers

Added

Fixed

Changed

2.16.0 (2026-09-16)

The play bar now says what it is playing. Under the title sits a row of small coloured boxes for the format, the bitrate, the sample rate, the bit depth and the channels of the current song, and hovering over any of them explains what that fact means. Streams and podcasts show what their own source reports. Narrow the window and the row keeps the boxes that fit.

Songs with more than two channels, such as 5.1 mixes in Apple Lossless, AAC, FLAC or Dolby Digital Plus, now play with every channel folded into stereo. Before, such a song at your output’s own sample rate stopped with an error, and one at another rate played only the front pair with the surround channels silent. Bòcan does not render Dolby Atmos objects; it plays the mix as stereo.

Songs with more than two channels now get a correct loudness value the next time they are analysed. Bòcan measured the first two channels of the file, which in most surround layouts are not the left and right pair, so a mix carried mostly in the surround channels could measure as near silence and get the wrong volume. It now measures the same stereo fold it plays. Loudness values measured before this release for such songs were wrong; analyse those songs again to replace them.

Dolby Digital and Dolby Digital Plus files with no container, the raw kind that end in .ac3, .eac3 or .ec3, are now found by a library scan and play. They carry no tags, so they are named after the file and show their real length, sample rate and channel count. A song in an MP4 container whose sound the system decoder refuses is now offered to the built-in decoder before Bòcan gives up on it.

The Channels row in Get Info and the track panel now names the layout, such as Stereo, 5.1 or 7.1, instead of showing a bare number. Hovering over it on a surround song says that the mix plays folded to stereo and that Dolby Atmos objects are not rendered.

Surround files that play through the built-in decoder, such as raw Dolby Digital Plus, TrueHD and multichannel Matroska, are now folded to stereo by the same mixer as every other file, so the same mix plays at the same loudness whichever way it was packaged. Loudness analysis now measures that same fold, and it now works for the formats the system cannot open on its own, such as Ogg Vorbis, Opus, WavPack, Monkey’s Audio, DSD, Matroska and TrueHD, which could not be analysed before.

A song in an MP4 container that the system decoder opens but cannot actually play, such as Opus in MP4, now plays through the built-in decoder instead of stopping with an error on its first moment.

For developers

Added

Fixed

2.15.0 (2026-09-13)

A podcast served over plain http from a computer on your home network now keeps refreshing after you subscribe. If one you added earlier stopped updating, add it again by its address: it picks up where it left off, with its episodes and settings.

Adding a podcast whose directory listing gives a plain-http feed address now works when the show is also served securely, which most are. When it is not, the message says the feed is unencrypted-only instead of showing an error number. We don’t support plain-http feeds from the internet, but an unencrypted home server is fine.

Saving tags works again when your music lives on an external drive or a network share. Bòcan wrote the new version of a file into a scratch area on the startup disk and then moved it into place, which the system refuses to do between two different drives, so every tag save on such a library failed even though the files were perfectly writable. The new version is now prepared next to the original, on the same drive.

Changing only the cover art no longer rewrites your audio files. Unless you have chosen to embed art into the files, the picture belongs to Bòcan alone, so saving it now touches nothing on disk but Bòcan’s own store. Art now saves on albums you cannot write to, such as read-only files or a network drive.

When saving tags or cover art fails, the message now says which file failed and why, such as the file being read-only, instead of an error code.

For developers

Added

Fixed

Changed

2.14.1 (2026-09-08)

The now-playing display no longer misses a queue change that lands in the first instants after launch while nothing is playing, which could leave it on “Not playing” until the next track change.

Immersive Mode and the visualizer no longer stutter twice a second while a song plays with the full Songs list open. The main window was quietly redrawing every row of the songs table on each playback tick; it now leaves the table alone until something in it actually changes. The table also stopped re-checking every one of its rows whenever anything else in the window updated, such as a synced lyric line changing, so those moments no longer cause a stutter either.

Phone Sync no longer leaves a converted song stuck as pending forever. If the phone lost a song after the Mac had already sent it (for example when Android stopped the app mid-transfer to save battery), the Mac now converts that song again the next time the phone asks for it, instead of answering busy on every sync.

This release pairs with Bòcan Music for Android 0.4.0, which carries the phone side of that fix: the phone now waits while the Mac converts the song again instead of giving up on it until the next sync. Install it from https://github.com/bocan/bocan-music-android/releases/tag/v0.4.0 so both ends match.

For developers

Fixed

Changed

2.14.0 (2026-09-05)

Experimental: Immersive Mode. Press Shift-Command-I, pick View, Enter Immersive Mode, or click the new three-column button in the toolbar, and Bòcan opens a full-screen window with nothing on it but the music: the oscilloscope running edge to edge in the Drift palette, and three cards over it with the artwork, title and player controls, the next ten songs in your queue (scroll for the rest), and the lyrics, synced where you have them. Esc brings you back. It is marked experimental on purpose: the visualizer behind the cards is heavier than the one in the side pane, and if it turns out to stutter on too many Macs the mode may change shape or be removed in a later update.

Phone Sync conversion no longer takes the whole app down on a file whose sound switches between stereo and mono part way through, which some damaged MP3s do. The converter now adapts mid-file and carries on, so a single odd track cannot stop every sync.

For developers

Added

Fixed

2.13.0 (2026-09-02)

Phone Sync can now shrink your music on the way to the phone. Pick a quality in Settings, from MP3 320 down to Opus 128, and anything bigger is converted before it syncs, so a lossless library fits in a fraction of the space. Each choice shows what your selection would cost the phone in storage, a progress line follows the conversion as it runs ahead of the sync, and your files on the Mac are never touched. Converted copies are made just in time and cleaned up once the phone has them, so the Mac does not fill up either: conversion stays a few gigabytes ahead of the phone, and the progress line says so while the next batch waits. A switch keeps the copies around if you would rather re-sync instantly, and with it on the whole selection converts up front.

For developers

Added

2.12.0 (2026-08-31)

Deep Dive can now find an album or song on MusicBrainz by name when your files carry no MusicBrainz tags, instead of giving up. A match found this way is labelled in the report, and searches ignore stray spaces around names.

When you agree with a match, one click on Save to Tags writes the MusicBrainz id into the files themselves, with a backup kept, so the match survives rescans and is there for every other tool that reads your tags.

Search now understands release years. Type a year like 1984 over the album gallery and it filters down to the albums released that year, and a fuller date like 2004-06 narrows it to the month, when your files carry full release dates. Your chosen sort order stays exactly as it was.

For developers

Added

Fixed

2.11.0 (2026-08-29)

Deep Dive (off by default)

“Get Info” on any artist, album or song now has a Deep Dive tab: a short, readable report built from MusicBrainz and Wikipedia. For an artist you get a bio, current and past members with their years and instruments, and a full discography with the releases you already own ticked. For an album: label, catalogue number, format, country, release date, barcode, and the artist’s other releases from around the same time. For a song: who wrote it, its ISRC, when it was first released, every release it appears on, and a link to its AcoustID. Artists finally have a Get Info of their own (right-click any artist, or press ⌘I on an artist page), with an Info tab alongside the report. Reports are cached on your Mac for a week, so reopening one is instant and they still work offline.

It is deliverately off unless you turn it on, in Settings > Library.

Bòcan promises that, out of the box, the only thing it ever talks to is the update-checking feed, and Deep Dive can’t work without asking MusicBrainz and Wikipedia about the music you own. Turning it on sends MusicBrainz identifiers (or an artist’s name, for files that carry none) to those two sites, and starts a slow, one-off pass that looks up each artist in your library on MusicBrainz, one request every second and a half, to fill in sort names and “which Nirvana?” disambiguations. A quiet progress line above the library shows how far that has got. My 15000 tracks took about an hour and a half.

The Deep Dive tab explains all this and links to the switch while it’s off, and nothing is sent until you flip it. The privacy page has been updated to say exactly that.

If an artist’s files carry no MusicBrainz id, Deep Dive matches by name and tells you so; one click keeps that match, and a properly tagged file will override it later. If MusicBrainz asks us to slow down, the report quietly retries three times before giving up.

Your library, tidied underneath

A long audit of the database turned up a lot of information that was being read from your files and then dropped on the floor. It is now kept: artist sort names (so The Beatles file under B), MusicBrainz ids for artists, albums and songs, album release types (album, single, EP, live, compilation), track and disc totals per album, cover-art dimensions and where the art came from, the musical key of a track, podcast guests and credits, and your lyrics sync offset. A full rescan no longer wipes things Bòcan itself worked out, like ReplayGain and skip counts, and a couple of updates will ask for a one-time silent rescan to fill the new fields in. A few columns that nothing ever used have been removed.

Fixes

Added

Fixed

Changed

2.10.0 (2026-08-27)

Search works everywhere now as you’d expect it to. Until now, the search box only did anything in Songs, Albums, and Artists. Type in Genres, Composers, Radio, or Podcasts and it just sat there, dead. Now it filters every view it appears in: genre and composer lists, radio stations (by name or stream address), your podcast shows, the Continue Listening rail, and even the episode list inside a show. If nothing matches, you get a proper “no results” message instead of a mysteriously empty screen.

Escape always does something sensible too. Esc now peels back one layer at a time, wherever your keyboard focus happens to be: inside an album, it steps you back out; on a filtered view, it clears the search. Previously Esc would only clear a search if the search box itself still had focus, which felt broken the moment you clicked anywhere else.

And the rest. Updated docs, a security-scanner bump, and a sad note: in the README.md, we’ve marked Robert Kaye, founder of MusicBrainz and one of the giants Bòcan stands on, as “the late” in our credits as he passed earlier this year. His work powers the app’s tagging, lookup, and scrobbling to this day.

Added

Fixed

2.9.0 (2026-08-22)

Just a small one. The main fix is that history entries now carry the search query that was active alongside the destination. Drilling into a detail page still clears the search (the album page stays clean), but Esc / the mouse back button / the toolbar arrows restore the query the user left behind.

Also, the podcasts home view now has a Continue Listening rail, and the “Rebuild Full-Text Search Index” and “Export Diagnostics” buttons in Settings -> Advanced now work.

Added

2.8.0 (2026-08-17)

CUE sheets: I’ve refactored how these work. CUE sheets (files) are a bit of a legacy thing. The original idea is that if someone rips an entire CD to a single file, it can have a CUE sheet that lets you play the individual tracks within it. In practice, people just use them as playlists because single file rips are rare these days. So what I’ve done is this:

Internet radio and streaming:

Artwork

UI and window polish

Housekeeping

Added

Fixed

2.7.0 (2026-08-15)

The only user-visible change in this release is that now next/previous buttons move forward and backwards through the station lists. Behind the scenes, a lot of work went into making the E2E test suite more robust and comprehensive, including a new loopback fixture server for podcasts and ICY radio streams. The E2E suite now covers almost every surface of the app. In the process of building the E2E coverage, a few minor bugs were found and fixed, including a couple of gaps in queue restoration that could cause playback to stop unexpectedly.

Also, users relying on accessibility features should see a big improvement in the app’s accessibility identifiers, which are now complete and consistent across the entire UI. This will make it easier to navigate the app using assistive technologies.

Added

Fixed

2.6.2 (2026-08-09)

Fixed

2.6.1 (2026-08-09)

A big one: in-app updates now actually work on macOS 15. A hardcoded value in our release pipeline told Sparkle that every update required macOS 26, so anyone on Sequoia has been quietly informed they were “up to date” since the very first release. That’s fixed, both for this release and retroactively for the published feed, so if this update appeared out of nowhere after months of silence: hello, welcome back, you have some catching up to do.

Small polish. While a radio station or podcast plays, the title line in the player is now properly bright instead of dimmed like the subtitle under it. And the website got a cleanup: the front page no longer displays raw arrow codes and HTML where links should be, the feature cards sit in tidy balanced columns, and the screenshot strip lost its stray scrollbar.

Under the hood, a full dependency spring-clean. Every library Bòcan builds on is now at its latest release, including a Sparkle security patch and a major-version move of the cryptography package behind Phone Sync (verified byte-for-byte against the pairing test vectors, so paired phones notice nothing). The third-party notices file now reports true versions and credits three Apache-licensed components it had missed, and a weekly automated check now files an issue the moment any dependency falls behind, so none of this drifts quietly again.

### Fixed

2.6.0 (2026-08-08)

Internet radio, done properly. There’s a new Radio section in the sidebar where you can build your own station list: add a stream by hand, paste a .m3u or .pls playlist link into the Add Station sheet and every station inside gets offered with its name intact, or just drop (or import) a playlist file on Bòcan and its streams become stations instead of “missing tracks”. While a station plays, the song title arrives live from the stream and shows in the player and the macOS Now Playing widget, and the player’s info button tells you exactly what you’re hearing: codec, sample rate, channels, and the bitrate the station claims. Bòcan remembers each station’s details, so the info sheet works even offline. Radio never scrobbles, never pretends live audio can rewind, and reconnects by itself if a stream hiccups. There’s a starter pack of twelve stations to try. Thanks to @DanaturCode for requesting this one (#376) and pointing out that a playlist full of radio streams deserved better than becoming an empty playlist.

Getting around is quicker. The back and forward side buttons on your mouse should now walk your browsing history, just like a browser. The Escape key backs you out of whatever you’ve drilled into: an album returns to the artist you opened it from, then to Artists. Esc still does all its old jobs first, so leaving the search box, cancelling a rename, closing sheets, and exiting full screen all work exactly as before (#378).

And one small fix that felt bigger than it was: pressing Cmd+A while typing in the search field now selects your typed text, like every Mac app should, instead of quietly selecting every track in a list you weren’t looking at (#379). Both this and the navigation work were suggested by @go1968, so thanks Guy!

### Added

### Fixed

2.5.0 (2026-08-04)

New: Library Summary

Open Tools → Library Summary (⌘⇧Y) for six tabs that tell you the truth about your music collection. Everything is computed on your Mac, from data Bòcan already keeps. Nothing is sent anywhere.

Also in this release: fixed a bug where certain FLAC files (ones missing a length header) would fail analysis and could end playback instantly.

### Added

### Fixed

2.4.0 (2026-07-30)

### Added

### Fixed

### Changed

2.3.1 (2026-07-19)

### Fixed

2.3.0 (2026-07-19)

This one adds a new card-grid view mode to Artists, Genres, and Composers, and adds a new “View” menu to switch between the list and card-grid modes. The card-grid mode shows album art for each artist, genre, or composer, and lets you browse their details by clicking on the album art.

### Added

### Fixed

### Changed

2.2.0 (2026-07-18)

This one’s a community release: half of what’s below started life as a sharp-eyed issue or a pull request from users. Thank you both! THIS is why I make these things open source.

Smart playlists learned to sort. The Sort By setting in the rule editor now actually orders the playlist (it was being quietly thrown away before, and sorting by Artist or Album could even error out). Better still, sorting is no longer a single choice: build an ordered list of sort keys with priorities, like artist, then track number, then title, each ascending or descending. Track Number is a new sort key, and the column headers in a smart playlist’s track list are now clickable for on-the-fly re-sorting.

Regular playlists too, without losing your order. Click any column header in a manual playlist to browse it sorted. Your hand-arranged order is kept safe underneath: a Playlist Order button snaps right back to it, and drag-to-reorder politely pauses while a column sort is active so your saved order can never be scrambled.

Compilations stay together. Thanks to a great report from @lukesutton (#362): a compilation with no Album Artist tag used to shatter into one album per track artist. Files flagged as compilations now group under a single “Various Artists” album, and if your library was already split, it heals itself automatically on the next scan. No manual cleanup needed.

Clicking an artist works again. @0gnev tracked down exactly why clicking a row in the a view sometimes did nothing (#360) and sent a tidy fix, regression test included.

The scrubber stays put when you pause. Also @0gnev (#361): a quick play-then-pause could leave the progress bar showing a stale position, or zero. The paused position is now captured precisely, so playback resumes exactly where the scrubber says it will.

And a peek ahead: @lukesutton’s idea to browse Artists, Genres, and Composers as album-art card grids (#363) is fully specced and on the list for 2.3.0.

### Added

### Fixed

2.1.0 (2026-07-13)

### Added

### Fixed

2.0.0 (2026-07-12)

⚠ BREAKING CHANGES

This isn’t really breaking changes, but I’m building a free, open source Android companion and its pairing and sync protocol requires all track and episode files to have a content hash stored in the database. This release adds that content hash to all tracks and episodes, and adds a new sync_meta table to store the sync manifest generation state. If you are upgrading from v1.17.1 or earlier, Bòcan will automatically backfill all of your track and episode hashes in the background, and will also create the new sync_meta table.

Bòcan music will let you sync some or all of your music to you phone, let you play it in your car via Android Auto, and let you listen to your podcasts on the go. The sync protocol is end-to-end encrypted, and uses mutual TLS with a self-signed certificate to authenticate the server to the client. The Mac side generates a pairing code that you enter into the phone, and the Mac then generates a permanent key that is stored in the Keychain. The client can then use this permanent key to authenticate to the server without having to enter the pairing code again.

### Added

### Fixed

1.17.1 (2026-07-06)

### Fixed

1.17.0 (2026-07-06)

### Added

1.16.1 (2026-07-05)

### Fixed

1.16.0 (2026-07-05)

This release contains a lot of fixes for the metadata editor, including making sure that the cover art you apply to an album actually replaces the existing art, and that the track list shows the new art. It also makes sure that lyrics are actually written to disk when you choose “Embed in file”, and that stored lyrics are shown in the editor for non-playing tracks and in the Get Info lyrics tab.

### Added

### Fixed

1.15.0 (2026-07-01)

I’ve gone through the entire UI and made sure that all the browse lists (Albums, Artists, Genres, Composers, and Podcasts) now restore their scroll position when you return to them. You can even go into Artist view, then into an Album, and when you go back to the Artist view, it will restore your scroll position in the album list. This latter one was mostly a problem for Artists with eleventy thousand albums. I’m looking at you - The Beatles.

I’ve also added sort choosers to all grids and lists, so you can sort by name, date added, or other criteria. Finally, I’ve fixed a small UI issue where the visualizer toggle icon was too similar to the Identify Track icon.

### Added

### Fixed

1.14.1 (2026-06-28)

### Fixed

### Changed

1.14.0 (2026-06-28)

Many thanks to @go1968 and @rjp for their contributions to this release, which stops us loosing the existing song list, adds a sort-order chooser to the Albums grid, restores the album-grid scroll position on return from an album, and splits Play Album / View Album in the album grid.

### Added

### Fixed

1.13.0 (2026-06-28)

### Added

### Fixed

### Changed

1.12.1 (2026-06-23)

### Fixed

1.12.0 (2026-06-23)

Fixing a few podcast bugs, and importantly added a new Podcasting 2.0 feature podcast:podroll which shows a list of recommended podcasts at the top of a show’s show notes. This is a new namespace in the podcasting spec, and Bòcan now parses and persists these recommendations.

### Added

### Fixed

1.11.0 (2026-06-21)

Added podcast support to Bòcan, including subscriptions, episode downloads, transcripts, show notes, and playback. The Podcasts sidebar shows subscribed shows with unread counts and artwork, and the search sheet lets you find new shows via iTunes Search and Podcast Index. Each show has a detail sheet with a list of episodes, and you can download episodes for offline listening or stream them directly. The Now Playing view now supports podcasts with chapter markers and skip intervals.

### Added

### Fixed

### Changed

1.10.0 (2026-06-14)

Bòcan 1.10 moves the entire visualizer engine onto Metal, so every frame is drawn on the GPU and stays buttery smooth even on the busiest passages. Six visualizers now ship in the box: classic Spectrum Bars and Oscilloscope alongside four new ones, the scrolling Cascade spectrogram, the beat-rippling Halo, a frequency-warped Starfield, and the slow-burn Nebula. Cycle modes and color palettes right inside the visualizer, and let the music paint the window.

### Added

### Fixed

### Changed

1.9.0 (2026-06-09)

### Added

### Fixed

1.8.0 (2026-06-08)

### Added

### Fixed

1.7.1 (2026-06-02)

### Fixed

1.7.0 (2026-06-02)

This has been a hairy one. I’ve removed the Airplay feature as it didn’t work, and to make it work, I’d have had to entirely re-write the playback engine. You’ll have to just rely on Bluetooth I guess. On a more positive note, I’ve added a Logging Console under Help if you’d like to see the internals of how the app runs. Also fixed showing album art via the Dock for any Subsonic clients you may use.

### Added

### Fixed

1.6.0 (2026-06-01)

This release is heavily laden with fixes and minor improvements after a running a complex audit against the codebase. Of note is a redesigned settings panel.

### Added

### Fixed

### Changed

1.5.0 (2026-05-27)

### Added

### Fixed

1.4.0 (2026-05-25)

This release adds Subsonic / Navidrome / Airsonic servers as first-class sources alongside your local library. Federated search across every server, per-server status dots, offline banners with one-tap retry, and ⌘⇧1–⌘⇧9 to jump straight to a server.

### Added

### Fixed

### Changed

1.3.1 (2026-05-24)

### Fixed

1.3.0 (2026-05-21)

### Added

### Fixed

1.2.1 (2026-05-20)

### Fixed

1.2.0 (2026-05-18)

### Added

### Fixed

1.1.0 (2026-05-16)

### Added

### Fixed

1.0.1 (2026-05-15)

### Fixed

1.0.0 (2026-05-13)

⚠ BREAKING CHANGES

### Added

### Fixed

0.12.0 (2026-05-12)

### Added

### Fixed

0.11.0 (2026-05-11)

### Added

### Fixed

0.10.0 (2026-05-11)

### Added

### Fixed

0.9.4 (2026-05-11)

### Fixed

### Changed

0.9.3 (2026-05-10)

### Fixed

0.9.2 (2026-05-10)

### Fixed

0.9.1 (2026-05-10)

### Fixed

0.9.0 (2026-05-10)

### Added

### Fixed

0.8.0 (2026-05-10)

### Added

### Fixed

0.7.0 (2026-05-09)

### Added

### Fixed

### Changed

0.6.0 (2026-05-07)

### Added

### Fixed

0.5.1 (2026-05-06)

### Fixed

0.5.0 (2026-05-06)

### Added

### Fixed

0.4.0 (2026-05-04)

### Added

### Fixed

0.3.0 (2026-05-04)

### Added

### Fixed

### Changed

0.2.0 (2026-05-01)

### Added

### Fixed

### Changed