Release notes

Changelog.

What changed in each Suzumushi release.

v1.2.1

1 October 2026

Clean titles, mute, and seeking

current

Fixes wide and accented titles in the Player, makes muting glide instead of cutting, and finishes tracks cleanly when a seek reaches the end.

  • Shows every character of Japanese, Chinese, emoji, and accented titles and artist names in the Player.
  • Glides muting, unmuting, and volume changes over 8 ms instead of cutting the sound at once, while muted audio keeps its place.
  • Finishes the track when a seek reaches its end, even mid-restart, instead of reporting that it contains no audio.
  • Keeps held seeking silent until it settles, so an intermediate position never briefly plays.
  • Updates the Linux archive, AUR package, and stable Nix installation to 1.2.1.

v1.2.0

30 September 2026

A night meadow around Suzu

Suzu now dances in a night meadow: the music grows pastel stalks of light, paused lights drift away as fireflies, and a moon crosses the sky as the track plays.

  • Turns each of 32 frequency bands into a thin grass stalk tipped with a glowing light that the music throws up and gravity brings back, in pastels from peach for bass to mint for treble.
  • Lifts the lights off as blinking fireflies when you pause, drifting up among the stars, and glides them back to their stalks in a wave when you resume.
  • Opens a night sky above the title in a tall Player, with twinkling stars and a crescent moon that crosses it as the track plays.
  • Draws the progress line as a firefly's path through the dew, whose light glides continuously and blinks while paused.
  • Normalizes the spectrum to each track's loudness, so quiet and loud recordings move across the same range.
  • Updates the Linux archive, AUR package, and stable Nix installation to 1.2.0.

v1.1.8

30 September 2026

Quiet toggles and smooth seeking

Removes the crackling heard when play-pause is held or pressed rapidly, and fades every pause, resume, and seek instead of cutting abruptly.

  • Removes the static-like crackle when Space or play-pause is held or pressed rapidly, by keeping the audio device stream running through quick toggles.
  • Fades output in and out over 8 ms on every pause, resume, track start, seek, and stop, so none of them clicks.
  • Keeps held seeking quiet and restarts decoding once at the final position, instead of rebuilding the audio stream on every key repeat.
  • Updates the Linux archive, AUR package, and stable Nix installation to 1.1.8.

v1.1.7

30 September 2026

Controls that keep up

Keeps rapid play, pause, stop, and track changes in the order you pressed them, and fixes several edge cases found in a code audit.

  • Keeps play, pause, stop, and navigation in order when you press them faster than the audio worker answers, so pause then play resumes and a double play-pause returns to playing.
  • Keeps a paused player paused when you skip tracks again before the next one finishes loading, and lets play and pause during loading choose how the track starts.
  • Makes Previous return to the track before the one playing, even after the playing track was removed from the Queue.
  • Stops an ignored hidden folder beyond the scan depth limit from ending the scan early and hiding the tracks after it.
  • Keeps playback and seeking working after the folder Suzumushi was started from is deleted.
  • Reports muted volume as 0 to desktop controls and pauses when a desktop client sets the playback rate to 0, as MPRIS requires.
  • Strengthens scan-limit and command-timeout tests.
  • Updates the Linux archive, AUR package, and stable Nix installation to 1.1.7.

v1.1.6

23 September 2026

Keep playing through upgrades

Keeps playback, seeking, and metadata reads working when a package upgrade replaces the running executable.

  • Starts audio and metadata helpers from the running executable image, so an open session keeps working after an upgrade and helpers match the parent's protocol version.
  • Reports misused init arguments as argument errors and unsafe log storage as a root problem.
  • Checks queue item byte accounting at compile time and reuses shared bounded-text helpers.
  • Removes unused path-based scan entry points and stops counting file symlinks as mount decisions.
  • Consolidates overlapping tests and adds an upgrade regression that also runs in the Nix sandbox.
  • Updates the Linux archive, AUR package, and stable Nix installation to 1.1.6.

v1.1.5

15 September 2026

Playback fixes and code cleanup

Keeps audio channels aligned during underruns and preserves pause when seeking to a track's end.

  • Keeps stereo and multichannel output aligned when the decoder falls behind, by publishing and consuming complete audio frames.
  • Keeps playback paused when seeking exactly to the end of a track, including when advancing to the next track or repeating.
  • Separates browser/search, queue operations, and playback transitions into focused modules with clearer state ownership.
  • Simplifies audio worker steps, decoder header writes, and desktop volume rounding.
  • Strengthens logging shutdown, queue-drop, channel alignment, and decoded seek tests, and removes misleading assertions.
  • Updates stable Nix installation to v1.1.5 and adds a code map for contributors. Existing commands, configuration files, and saved sessions remain compatible.

v1.1.4

12 September 2026

Playback reliability

Preserves track endings, fixes paused playback and desktop controls, and adds stable Nix installation.

  • Preserves the end of tracks by waiting for buffered audio before closing playback.
  • Keeps next, previous, and seeking silent while playback is paused, including on native PipeWire.
  • Keeps desktop PlayPause and Play working after clearing the queue while a track remains active.
  • Applies the scan entry limit to rejected filenames as well as accepted paths.
  • Rejects malformed WAV channel counts and limits header inspection.
  • Adds stable Nix installation from the v1.1.4 tag, with package build and installation checks in CI.

v1.1.3

5 September 2026

Faster repeat startup

Reuses metadata between sessions and reduces background work.

  • Caches metadata for unchanged files, avoiding a new parser process for each cached track when the player reopens.
  • Bounds the private metadata cache to 4 MiB and 10,000 entries. Changed files are reparsed, and diagnose only reads the cache.
  • Stops the audio worker's periodic polling while no track is active.
  • Updates position-only now-playing state once per second while keeping control changes immediate.
  • Counts underruns when the decoder falls behind without counting normal end-of-track silence.
  • Removes duplicate playlist storage, unused fields and wrappers, and an unused reservation for a second library index.
  • Strengthens scanner, cache, state-write, and audio regression tests. Terminal tests now wait for readiness and clean up child processes after failed assertions.

v1.1.2

5 September 2026

Playback fixes

More reliable playback, seeking, and startup.

  • Stops previous playback before reporting a failed track change, so a missing next file cannot leave audio playing behind an error message.
  • Keeps playback progress and saved positions updating after successful seeks.
  • Renders valid tracks shorter than one millisecond without crashing.
  • Restarts completed tracks from the beginning when Play is pressed, including tracks with an unknown duration.
  • Preserves the next queue item when the playing item and earlier entries are removed.
  • Retains admitted tracks when library scanning reaches its entry or path limit, while enforcing the remaining resource limits.
  • Continues terminal startup after two seconds if the desktop session bus is unresponsive.
  • Updates rtrb to 0.3.5 for RUSTSEC-2026-0274.

v1.1.1

18 August 2026

Reliability

The release pipeline learned to guard against its own failures.

  • Materialises the pinned Rust toolchain before the release workflow's parallel cargo installs, eliminating the rustup download race that failed the 1.1.0 run.

v1.1.0

18 August 2026

Hardening

The player became more resilient against malformed audio and unruly devices.

  • Updated Symphonia to 0.6.1 for its malformed-input hardening and decoder fixes.
  • Limited cumulative metadata-helper work to one minute per scan, then continued discovery with filename-only entries and one visible warning.
  • Prefers the native PipeWire backend with RTKit scheduling when available, keeping ALSA as the fallback.
  • Plays 44.1 kHz tracks on a 48 kHz PipeWire graph by opening the output stream at the track's own rate.
  • Turns recoverable device errors into counted, logged reports instead of ending playback, and stops counting expected end-of-track padding as a dropout.

v1.0.2

13 August 2026

Polish

The finished player got a leaner, stricter release.

  • Made hard-linked paths share one verified asset, metadata parse, and Queue identity.
  • Removed temporary allocations from natural path sorting and reduced the release binary size.
  • Replaced metadata-helper sleep polling with Linux process-descriptor notification when available.
  • Added clean-checkout fuzz seeds and disabled Cargo publication for the application crate.

v1.0.1

12 August 2026

Spectrum

The Player learned to follow the shape of the sound.

  • Added a compact, dependency-free 16-band spectrum driven by the audio reaching the output device.
  • Kept stereo-width and opposite-polarity audio visible by combining independently filtered channel energy.
  • Made the spectrum fall quiet immediately when playback pauses or stops.

v1.0.0

12 August 2026

Stable

The complete local player, release pipeline, and Arch package.

  • Published the verified suzumushi-bin package to AUR.
  • Added session-only Library folder collapse without hiding search results or changing playback.
  • Made Enter play or pause outside Library and clarified previous and next controls.
  • Prevented the same underlying audio asset from entering the Queue twice while keeping playlist additions atomic.
  • Cleared informational footer notices after three seconds while preserving warnings and errors.

v0.4.0

10 August 2026

Desktop

The terminal player learned to speak to the Linux desktop.

  • Added MPRIS, global media keys, playerctl controls, and bounded metadata.
  • Finished the built-in key guide, failure states, and installed-binary QA.
  • Kept desktop actions routed through the same app-owned playback state.

v0.3.0

10 August 2026

Playback

Folders became a library, and Suzu began to dance.

  • Added the nested library, folder playlists, local search, and bounded Queue.
  • Added MP3, FLAC, WAV/PCM, and Ogg/Vorbis playback with seeking, shuffle, and repeat.
  • Added paused session restoration and the original terminal-native Suzu animation.

v0.2.0

10 August 2026

Foundation

The safe local foundation and terminal shell arrived.

  • Added strict root initialization, descriptor-relative scanning, private logs, and bounded parsing.
  • Added the keyboard-first terminal interface and the canonical suzumushi command.
  • Established the complete CI, security, MSRV, and fuzzing gates.