Files
soulseek-rs-modded/CHANGELOG.md
T

12 KiB

Changelog

All notable changes to this project will be documented in this file.

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

[Unreleased]

18.0.0 - 2026-09-08

Added

  • (lib) carry audio attributes in browse and folder listings
  • (lib) read audio attributes from shared files at scan time
  • (lib) join the distributed search network as a leaf
  • (lib) decode distributed frames and announce a parentless stance

Fixed

  • (lib) free a silent parent's slot and pace the moves we report
  • (lib) harden the distributed leaf against hostile and slow parents
  • (lib) count the ID3 tag once and honour CRC frames when probing an MP3
  • (lib) parse what a peer sent before acting on its close
  • (lib) retire a dialling actor at once and drain the socket while retired
  • (stress) serve a browse that lands while an offer awaits its answer
  • (lib) keep a replaced peer connection open for the reply in flight
  • (lib) let an unanswered upload offer expire

Other

  • Merge branch 'develop'
  • (lib) keep the actors inside the crate and mark the growing enums
  • (lib) export the ConnectionType parse error and document what hosts can still match
  • (lib) move the peer actor's tests to their own file
  • gate pull requests on the stress benchmark losing no work

17.0.0 - 2026-09-07

Added

  • (lib) report each finished upload's rate to the server
  • (lib) surface server announcements as messages from "server"
  • (lib) answer UserInfoRequest with our slots and queue
  • (lib) answer FolderContentsRequest with the folder's listing

Fixed

  • (lib) keep the log level in an atomic and let hosts change it
  • (lib) compress peer listings and reject a bad zlib checksum
  • (lib) report a download's rate from the bytes actually read
  • (lib) keep the server connection alive with TCP keepalive
  • (lib) advertise real slot, speed and queue figures in search replies
  • (lib) route on the full four-byte message code
  • (lib) give each search its own token
  • (lib) cap a search reply at 150 files

Other

  • (lib) split the server actor's value types and tests out
  • (lib) lowercase each shared path once at scan time
  • (lib) read downloads in 64 KiB slices
  • Merge pull request #69 from michel/lib/user-info

16.0.0 - 2026-09-07

Added

  • (tui) scroll long names in every list and page through popups and chat
  • (tui) results across the top, with panes you can hide, zoom and Tab through

Other

  • Merge remote-tracking branch 'origin/develop'
  • (tui) fold the keys overlay onto LogView and dedupe the pane lookups

15.0.0 - 2026-09-06

Added

  • (tui) scroll long result names and page through results
  • cancel a download from the TUI, the CLI, and the daemon

Other

  • Merge branch 'develop'
  • Merge branch 'develop' into feat/tui-results-navigation
  • (tui) bound the name scroll walk by the column width

14.2.1 - 2026-09-03

Fixed

  • (daemon) reconnect after the server session drops

Other

  • Merge branch 'develop'

14.2.0 - 2026-09-01

Added

  • (daemon) publish room member statistics over RPC and the CLI
  • (tui) dismiss a finished download with d
  • (lib) watch and unwatch users (WatchUser 5 / UnwatchUser 6)

Fixed

  • (cli) keep room users text output a bare roster
  • slotsfull is occupancy, not free slots, and cover it end to end

Other

  • release v14.1.2
  • Merge remote-tracking branch 'origin/develop' into feat/room-member-stats
  • (e2e) cover watching against soulfind, and read the reply as written

14.1.2 - 2026-08-18

Other

  • drop bot wording in favor of client

14.1.1 - 2026-08-17

Fixed

  • (peer) survive download token races on the listener path
  • (peer) wait for the transfer token before the download lookup

Other

  • Merge pull request #44 from michel/issue-42-download-token-races

14.1.0 - 2026-08-14

Added

  • (tui) wrap long chat messages instead of clipping them
  • (tui) navigate and confirm while filtering search results

Other

  • rustfmt in chat wrap test
  • (client) dedupe peer registration and order eviction by id

14.0.1 - 2026-08-13

Fixed

  • (client) survive the review findings on the thread-flood fix
  • (client) bound the threads a peer flood can create
  • (peer) handle UploadDenied so refused downloads fail fast
  • (peer) forward UploadFailed to the download store
  • (actor) leave Disconnected state behind after every disconnect

Other

  • Merge branch 'develop': peer failure forwarding and thread-flood fixes

14.0.0 - 2026-08-10

Fixed

  • survive busy sessions without exhausting file descriptors
  • (lib) cap what a search collects

Other

  • Merge branch 'develop': fd-exhaustion fixes
  • (daemon) answer search polls with counts instead of copies

13.0.0 - 2026-07-29

Added

  • (daemon) make the download folder a live setting in both modes
  • (daemon) make every window a view of one shared session
  • (daemon) say what to do next on startup, and prove multiple clients agree
  • (config) remember which daemon to use, and document the download box
  • (daemon) route commands and the TUI through a running daemon
  • (daemon) resident session, auth-gated control socket, and event fan-out
  • (daemon) wire protocol with a type-safe method vocabulary and a generated OpenRPC contract

Fixed

  • (daemon) version the contract by its protocol, not by the crate
  • (daemon) ask the OS for enough open files, and stop spinning when it says no
  • (daemon) a thread the OS refuses must not take the listener with it
  • (shares) let add and remove reach a running daemon
  • (daemon) correct the published contract and harden the control socket

Other

  • (daemon) match a reply by its id instead of taking the next line
  • cut what a whole-repo audit proved dead, padded, or hand-rolled
  • (skill) choose the track yourself; narrow the results instead of skipping them
  • (skill) make the cheap path the default and stop moving paths by hand
  • (skill) stream picks into transfers instead of batching them
  • (skill) raise the batch limits to what the client is actually built for
  • (skill) add the search ladder, and one budget both batch routes obey
  • (skill) teach the agent to fetch a list without getting the user banned
  • (skill) make the daemon the default way an agent works
  • (daemon) route the suite at its chokepoint and cover the protocol directly
  • (daemon) drive the whole CLI suite against a daemon, and fix what it caught
  • publish the daemon protocol and describe daemon mode in the README
  • (api) put a SessionApi seam between the commands, the TUI, and the client

12.0.0 - 2026-07-26

Added

  • lift the client's concurrency ceiling from ~15 peers to 1024

Fixed

  • (serve) report a queued upload even when it is served between two polls

Other

  • raise transfer defaults and stop uploads sleeping on their slot
  • add a code quality baseline
  • (lib) move the client tests into their own file

11.0.0 - 2026-07-26

Fixed

  • [breaking] make concurrent invocations work instead of silently seeing nothing (#22)

10.0.0 - 2026-07-26

Added

  • [breaking] wishlist, upload-queue privilege recognition, and search filters (#20)

9.1.0 - 2026-07-26

Added

  • resume an interrupted download instead of refetching it (#18)

9.0.0 - 2026-07-26

Added

  • install tab completion for bash, zsh, and fish (#16)

8.0.0 - 2026-07-26

Added

  • log in with soulseek-rs's own client major version (176) (#13)

7.1.0 - 2026-07-25

Added

  • (tui) give the panes the colour the demo promised

Fixed

  • (lib) give the login verdict the wait the caller already allows

7.0.0 - 2026-07-25

Added

  • (cli) ship the agent skill inside the binary
  • (cli) expose sharing, peer lookup and settings as one-shot commands
  • (cli) [breaking] replace the one-shot commands with a scriptable surface
  • (ui) theme the TUI with the soulseek-rs design system

Fixed

  • (peer) serve full browse listings + harden the listener; TUI transfer/UX work
  • (persist) use XDG paths on macOS
  • (peer) log disconnect cause; bind e2e browse listener on all interfaces

Other

  • link the website from the crates and the READMEs
  • clear the quality-scan findings
  • document the skills command and the scriptable surface
  • pin soulseek-rs-lib install snippets to 6

6.0.0 - 2026-07-24

Breaking changes

Library only. If you install the soulseek-rs binary there is nothing to do — these affect crates depending on soulseek-rs-lib 5.x. Sharing moved from a single optional directory to a list, which changed three public items.

  • ClientSettings::shared_directory: Option<String> is now shared_directories: Vec<String>. None becomes vec![], Some(dir) becomes vec![dir].
  • Client::shared_directory() -> Option<&str> is replaced by Client::shared_directories() -> Vec<String>. The new Client::set_shared_directories(Vec<String>) updates the set at runtime.
  • peer::upload_peer::serve_file takes two more parameters, bytes_sent: &AtomicU64 and cancel: &AtomicBool, which drive upload progress and cancellation. Pass freshly constructed values to keep the old behaviour.

Added

  • settings popup and uploads in the transfers pane
  • update shared directories at runtime
  • multiple shared directories
  • conventional default download and share folders
  • set aside unusable state files as .bak instead of overwriting
  • persist and restore TUI state across restarts
  • versioned JSON state stores for downloads, searches, rooms
  • in-TUI login/registration screen
  • password resolution via OS keychain and password_cmd
  • config.toml settings layer (CLI > env > file > defaults)
  • track uploads with progress and cancellation

Fixed

  • drop libdbus dependency from keyring Linux backend
  • clippy cleanups in upload tracking and share plumbing

Other

  • persistence e2e and registration-relogin e2e; lint clean