# Changelog

## Version 29.3 - 2026-07-22

- fix: Spotify library missing due to malformed auth header
- fix: heap-buffer-over-read in httpd
- fix: Add support for Spotify audiobooks
- fix: Minor web UI improvements

## Version 29.2 - 2026-04-28

- same as 29.1.1, only released due to RPi packaging issues with version number

## Version 29.1.1 - 2026-04-15

- fix: 29.1 broke some older AirPlay speakers ("Missing or invalid public key")
- fix: "Computer" always being selected in Apple Remote
- fix: Minor web UI improvements

## Version 29.1 - 2026-04-15

- fix: Samsung and Sonos Era speakers via support for Airplay 2 PTP timing
- fix: shairport-sync Airplay 2 mode via support for PTP timing
- fix: ipv6 on MacOS and BSD
- fix: if bind_address is configured, use it for all services
- fix: better mpd support of swmpc (fix sort tags and missing fields)
- fix: security (races conditions, segfaults, sql injection, timing attacks)
- fix: iTunes/Apple Music with password
- fix: artwork for radio statios sometimes not updating
- fix: playback not starting in the web UI Files page
- new: Airplay 2 is now default
- new: support artwork for non-library items, e.g. from Spotify search
- new: set speaker offset via web UI
- new: option to skip startup Spotify rescan
- new: option to set Airplay speakers as "exclusive"
- new: deprecate config file playback offset and websocket interface
- new: add option for music-assistant/cliairplay to set playback start time

## Version 29.0 - 2025-09-12

- fix: client name showing as blank when pairing with MacOS
- fix: Spotify playback error "Could not find track data"
- fix: prevent OwnTone from hanging when a tcp connection can't be made
- fix: use libmount to detect filesystem mount events (previously undetected)
- fix: build errors with libcurl 7
- fix: build for platforms without fcopyfile() or copy_file_range()
- fix: ffmpeg, libplist and libxml2 deprecations
- fix: null-pointer dereference bug when handling dacp request
- new: support for "empty" operand in smart playlists
- new: Spotify OAuth redirection to github page instead of owntone.local
- web UI 3.0:
    - enhanced styling, layout consistency, colours streamlined
    - improve mobile responsiveness, simplify settings pages
    - added support for dark/light mode switching
    - switch to Bulma 1.0
    - fix Spotify search results not paginating correctly
    - fix translation inconsistencies and errors
    - add page to control outputs
    - add followed artists to the Spotify music page
    - add the cover artwork of Spotify playlists in the modal dialog
    - display artist visuals from Spotify
    - show cover of Spotify playlists
    - switch to Spotify Web SDK

## Version 28.12 - 2025-02-22

- fix: possible deadlock during Spotify scan
- fix: armv7 compile warnings
- fix: stop playback when last queue item removed
- fix: "Invalid token" when authorising Spotify
- fix: mpd enable/disable erroneously toggles
- fix: cover art not being displayed in album lists
- new: logging includes thread info
- new: support for ListenBrainz

## Version 28.11 - 2025-01-26

- fix: retrieval of artwork from online sources
- fix: mpd speaker selection
- fix: autoconf warnings
- fix: Apple Music/iTunes not working on Airplay host
- web UI: Now Playing does not stop play progress updates when pausing
- web UI: add ability to access the server externally
- new: internet radio "Streamurl" options
- new: support libevent as WS server instead of libwebsockets
- new: template for VSCode
- new: mpd updates, version 0.23.0, e.g. getvol, readpicture, albumart
- new: API for setting skip_count and play_count directly

## Version 28.10 - 2024-09-12

- fix: playlist scanner ignoring lines starting with non-ascii chars
- fix: last seconds of a track sometimes being skipped
- fix: Apple Music password-based auth
- fix: missing file scan when modified multiple times within a second
- fix: Roku M1001 crash
- fix: speakers changing IP addresses (error "Got RR type A size 16")
- fix: playlist rename not registered
- fix: problems with DAAP and old dates ("Integer value too large")
- fix: compability with ffmpeg 7 (fixes build error)
- web UI: many smaller improvements, e.g. sort by release date
- web UI: traditional Chinese translation
- new: ALAC transcoding for RSP/DAAP streaming
- new: ability to save id3 metadata
- config: change "trusted_networks" to have new value "lan" as default
- config: new option to announce a MPD httpd plugin (stream from server)
- config: set ipv6 to disabled by default due to unknown Airplay issue
- config: deprecate "cache_path", replaced by "cache_dir"
- dependency: libxml2 instead of mxml

## Version 28.9 - 2024-01-18

- web UI improvements:
    - display lyrics metadata
    - toggle Spotify on/off in some views
    - many minor improvements
- use compressed ALAC for Airplay for bandwidth + fixes esp32 issue
- don't merge Spotify albums with local albums
- handle playlist with Unicode BOM
- json API add tracks to queue returns info on added tracks
- replace syscall with gettid, syscall deprecated on MacOS
- fix issue where m3u genre doesn't override despite m3u_override = true
- fix possible crash from use-after-free
- fix FreeBSD possible crash
- fix crash when keys of incorrect length are used for legacy pairing

## Version 28.8

- fix MacOS bind error: "Protocol wrong type for socket"
- fix BSD build error (no SYS_gettid)
- fix ALAC missing end tag causing ffmpeg decoder warnings
- fix crash if Spotify AP resolver is unavailable
- fix duplicates if file within library is replaced
- fix fatal error due to mutex being zeroed

## Version 28.7

- fix compability with ffmpeg 6
- web UI improvements:
    - easier volume sliders
    - incorrect display of genre
    - Chinese translation
    - fix removing RSS podcasts
    - sort by rating for composer, genre and artist tracks
    - (and much more)
- changes to artwork search orders (easier static artwork for pipes)
- major refactor of the http server improving mp3 streaming
- support for m3u8 playlist files
- allow mixed ipv4/ipv6 mdns
- fix issue with device name capitalization (TuneAero issue)
- drop support for libevent < 2.1.4

## Version 28.6

- German translation of web UI
- web UI: fix error messages not displaying
- fix low resolution Spotify artwork
- fix incorrect display of date released pre 1970
- fix for Denon speakers when pausing
- support password authentication for Airplay 2
- support for user config ffmpeg audio filters

## Version 28.5

- French translation of web UI
- improved web UI loading of images
- add support for Airplay 2 password based auth
- fix some Airplay speakers turning on by themselves
- fix parsing of CRLF and NOT in smart playlists and allow larger sizes
- fix possible crash after Avahi restart
- fix for Remote - play item from 'up next' when stopped
- use configured bind_address to set mdns network interface

## Version 28.4

- fix broken Spotify after libspotify sunset
- remove antlr3 dependency, use bison/flex instead
- improve search by supporting diacritics and Unicode case folding
- add support for new output: Roku/Soundbridge RCP
- switch to MkDocs for documentation
- smart playlists fixups and new "this week" param
- fix 'add next' when in queue shuffle mode
- web UI improvements:
    - migration to Vue 3 and Vite
    - honor "radio_playlists" config setting
    - display of search results for composers and playlists
    - add album / track count to genre and composer pages
    - fix incorrect sorting of album/artist searches
    - minor UI fixes
- fix for Spotify config option album_override
- improved Spotify scan performance
- generic browse endpoints for the json api
- fix slow shutdown with some libwebsocket versions

## Version 28.3

- web UI improvements, e.g.:
    - composer views
    - partial scan (e.g. only update RSS feeds)
    - fix http stream button not clickable in mobile view
    - fix Spotify playlists not showing
    - handling of not playable Spotify tracks
    - handling of podcast play counts
- support for Spotify podcasts
- updates for ffmpeg 5
- better Spotify logout
- user "usermark" field for user flagging of various track states
- fix for 0-byte files crashing ffmpeg
- fix metadata pipe deadlock and artwork memleak-on-error
- better handling of Spotify disconnects
- fix rare Airplay pairing error
- many minor error handling fixes

## Version 28.2

- add Spotify integration that doesn't depend on libspotify
- partial support for AirPlay events (Homepod buttons)
- web UI upgraded, now 1.1.0:
    - show "comment" field in track details
    - drop double login to Spotify when not using libspotify
- easier install by letting 'make install' add user and service files
- preserve existing conf file when running 'make install'
- support for "comment" field when making smart playlists
- fix support for dacp device-volume
- fix issue where source file sort tags where ignored
- fix for Roku (RSP) artist display issue
- fix bug when 'bind_address' option is used
- fix for CVE-2021-38383
- fix some minor time-of-check time-of-use bugs

## Version 28.1

- fix incompability in 28.0 with Debian Buster's libwebsockets 2.0

## Version 28.0

- rename forked-daapd to OwnTone + new logo
- fix web UI slow updates due to websockets 3.x changes
- support for ALAC sort tags
- support for remote pls/m3u with https streams
- add /api/queue?id=now_playing json API shortcut
- fix possible crash on Pulseaudio error callback
- fix possible segfault-on-exit
- fix websockets not working on FreeBSD
- refactor how the server binds to sockets (use dual stack ipv4/6)
- configurable interface/address binding

## Version 27.4

- fix web server path traversal vulnerability

## Version 27.3

- support for AirPlay 2 speakers, incl. compressed ALAC
- web UI upgraded, now v0.8.5:
    - new design/layout
    - optimize "Recently added"
    - Spotify search dialogue improvements
    - drop separate admin web page, now integrated in main web
    - podcast deletion
    - make Radio a top level item
    - show release dates
    - new sorting options
    - prevent browser caching of playlists
    - additional settings
- improved Chromecast streaming (retransmisson, adaptive etc.)
- JSON api support for updating metadata of queue items
- JSON api new fields, e.g. time_added, time_played and seek
- fix for some Chromecasts disconnecting
- new algorithm for more natural ALSA volume adjustments
- new nickname option for AirPlay and Chromecast
- mpd fixes (nextsong, multiple commands)
- charset flexibility when getting ICY metadata from streams
- adaptive probing of radio streams
- libplist and libsodium now required
- fixes for library update events
- fixes to speaker selection and unintentional volume changes
- fix some minor memleaks
- support shairport-sync metadata pipe flush event
- misc logging fixup

## Version 27.2

- web UI upgraded to v0.7.2:
    - show cover artwork in album pages and lazy loading of artwork
    - show playlist folders
    - use sass/scss for css files
    - add "Radio" tab to the music section
    - add settings for artwork sources
    - add pop up dialog for Remote pairing requests
    - support adding/removing podcast subscriptions
    - support marking all new podcast episodes/all episodes as played
    - support searching by smart pl queries
    - skip buttons for audiobooks and podcasts
    - show localized times/dates
    - generate colored placeholder image if cover artwork is missing
    - show "cast" icon for Chromecast outputs
    - styling changes of the navbars and moving the volume controls
- new speaker selection logic (persist user choice even after failure)
- speaker autoselect no longer enabled by default
- removed old admin page, not necessary any more
- fix/workaround for Apple TV's and HomePods that disconnect
- support for RSS feeds
- support for nested smart playlists (playlist folders)
- support for online artwork sources e.g. Discogs, Coverartarchive
- support for radio StreamUrl's that point to json with metadata
- fix incorrect artwork shown for unknown album/artists
- fix issue parsing shairport-sync progress metadata
- fix missing Spofity logout option
- fix for embedded artwork not working with ffmpeg 4.3+
- some smart PL improvements, e.g. support for more tags
- config option for Airplay timing/control ports (eases firewalling)
- quicker loading of radio streams (smaller probing)
- workaround for mxml 2.10 significant memleak
- some fixes for Roku (RSP)
- drop libspotify for artwork, doesn't work any more
- documentation improvements

## Version 27.1

- web UI upgraded to v0.6.0: settings page, display more Spotify data
- support for volumeup, volumedown and mutetoggle DACP commands
- support for multiple ALSA devices
- suppress repeated logging of same message to avoid log file bloat
- fix opening too many files due to looping with shairport-sync
- fix for genres with single quotes in name
- fix for incorrect update of time_added metadata
- fix some small memleaks and missing cleanup

## Version 27.0

- no fixed resampling to 44100/16, play source quality if possible
- Chromecast: quick start, better quality (48000/16 Opus encoded)
- performance enhancements: Remote and iTunes will load quicker
- alsa sync with variable sample rate, avoiding audible "clicks"
- web UI upgraded to v0.5.6, e.g. play non-library tracks, saving queue
- fix for Pebble mpd client (and possibly others)
- fix issue with some HLS radio stations
- support for https streams
- fix for artwork showing dithered
- ICY metadata in forked-daapd's mp3 stream
- support for Spotify collaborative playlists
- support for Shairport artwork via pipe
- configurable mp3 streaming quality
- json api improvements, e.g. for toggling speakers
- json api/web ui: Relative seeking
- support for some http seeking
- fix for macOS Catalina’s Apple Music

## Version 26.5

- json api/web ui: file view
- web ui: artwork support
- web ui: "Add next" and genre tab
- Airplay connection test improvements
- support for https streams in m3u's
- use Spotify web api for artwork instead of libspotify
- option to make Airplay devices permanent or excluded
- support for tracks and disc items in smart playlists
- db refactor, fix issues with play count, time played etc
- json api: more options available when adding items to the queue
- json api: player/toggle
- mpd version 0.20 support + support for "listfiles" command
- fix double http auth decline issue

## Version 26.4

- automatic rating
- fix issue in 26.3 causing invalid time_skipped values in the db
- improved fallback to ipv4 if ipv6 fails
- fix issue returning too many queue items to clients
- fix missing prompt for library password

## Version 26.3

- fix AirPlay 2 devices (e.g. Sonos Beam and Airport Express)
- fix mdns problems with ATV4 and ipv6
- fix possible segfault if null user-agent
- new metadata: Skip Count and Times Skipped (incl iTunes XML mapping)
- iTunes XML mapping of Play Count and Play Date
- fix for crashes when client provides no User-Agent
- logging improvements

## Version 26.2

- fix for db indexes not being used on fresh installs

## Version 26.1

- player web interface
- support for Airplay speaker control commands
- add non-library items (e.g. radio stations) to the queue
- fix for keeping connection alive towards some devices e.g. old ApEx's
- extension of the JSON API
- under-the-hood improvements of Spotify integration
- fix for Android "Remote for iTunes"
- fix ffmpeg segfault when jpeg encoding
- performance improvements + misc

## Version 26.0

- added web interface
- added JSON API
- new mpd commands (e.g. sticker, urlhandlers, playlistfind)
- support for adding non-library urls to the playback queue
- support for id3 grouping tags
- support for filesystems with ACL's
- use Spotify web api to load all playlists
- improved client authentication options
- only rescan playlists if changed -> faster startup
- fix bug related to dacp/daap client revision number handling
- fix bugs related to import of iTunes XML playlists
- restore ATV4/tvOS11 support by removing requirement for timing_port
- fixes for Hyperfine Remote
- improve database performance
- make sure daemons listen on both ipv4 and ipv6 (for BSD)
- ffmpeg/transcoding refactored for new ffmpeg API
- and more...

## Version 25.0

- improved playback resilience
- substitute packet skipping (producing audio "clicks") with start/stop
- support for MacOSX with macports and Bonjour mDNS
- Airplay device verification for Apple TV 4 w/tvOS 10.2 (uses libsodium)
- support for Spotify web api (saved tracks/albums + Discover Weekly)
- automatic playback of pipes + support for Shairport metadata pipes
- added pipe audio output (fifo)
- persistent queues (queue remains across server restart)
- support for browser based clients
- mpd sendmessage: set individual speaker volume, remote pairing
- mpd add http://path-to-radiostream (i.e. add non-library items)
- new options, e.g. exclude speakers from list
- fix for shuffle mode
- fix broken PNG artwork rescaling
- use friendly Chromecast name in speaker list
- support for libav/ffmpeg dual installs
- refactoring - added the input and library interface
- performance improvements
- and other fixing up...

## Version 24.2

- Pulseaudio support (can be used for Bluetooth speakers)
- new pipe/"fifo" audio output
- fix misc Chromecast audio bugs
- fix for Apple tvOS10 disconnecting after some minutes
- enable CORS headers
- LastFM scrobbling during regular DAAP streaming
- smart playlist support for file modification time
- misc MPD improvements, e.g. new outputsvolume command
- ignore ipv6 link-local addresses (announced by e.g. ATV4)
- better inter-thread command handling
- improved cache performance and use of gzip
- fix possible segfault on http timeouts
- fix possible segfault when adding items during playback

## Version 24.1

- support for Monkey's audio
- fix build problems on some platforms (e.g. OpenWrt)

## Version 24.0

- support for Chromecast audio
- support more idv3 tags (eg. date released)
- support more DAAP tags (eg. datereleased, hasbeenplayed)
- fix problem with playlists not shown in correct order in Remote
- autoselect devices based on priorities + keep devices selected
- fix multiple FreeBSD filescanner bugs (like too many open files)
- ALSA audio refurbished (prevent underrun/overrun, better AirPlay sync)
- improved mpd command support (eg. lsinfo, move, queue autoplay start)
- better mpd performance
- timing changes to keep input and output in sync with player timer
- prevent cache bloat (unscaled artwork or artwork for deleted tracks)
- more intelligent Spotify artwork retrieval
- artwork handling refactored
- add generic output interface
- add systemd service file
- support for OSS4 dropped
- support for old ffmpeg dropped
- misc minor bugfixing

## Version 23.4

- fix freeze problem on network stream disconnects
- support for mp3 streaming
- better ipv6 handling
- option to hide singles from album/artist lists
- misc MPD improvements, incl. new commands and zeroconf support
- queue handling and transcoding refactored
- libavresample/libswresample dependency changed to libavfilter
- improved pairinghelper.sh script

## Version 23.3

- fix issue where volume gets set to -1 on startup of raop devices
- plug various minor memleaks
- audiobook improvements, eg resuming playback from saved position
- live icy metadata
- libevent 1 support removed
- LastFM performance improvement
- drop legacy ffmpeg stuff
- drop legacy flac, musepack and wma scanner

## Version 23.2

- fix db lock, m3u and Windows Phone bugs
- improvements for Spotify and mpd
- fixing bugs as always
- sorting of genres and composers

## Version 23.1

- support for more mpd commands

## Version 23.0

- add support for the mpd protocol
- add support for smart playlists
- playlist and internet stream overhaul

## Version 22.2

- fix for iTunes 12.1
- fix misc bugs

## Version 22.1

- artwork cache
- some Spotify fixing up

## Version 22.0

- queue handling improvements
- added DAAP cache, good for low-power devices like the RPi
- support for LastFM scrobbling
- support for .pls playlists
- added compability with ffmpeg libswresample
- added options to modify the operation of the SQLite database
- stop init-rescan/full-rescan from running twice
- fix misc local audio problems
- fix some FreeBSD sound timing problems
- fix segfault on invalid utf8 while sorting
- fix misc bugs

## Version 21.0

- filescanner performance enhancements (db transactions)
- support for queue editing
- support for showing history
- compability with libevent 2
- compability with libav 10
- support for Spotify
- fix for Seafile libraries
- support for permission changes in a library (IN_ATTRIB)
- some DAAP changes to align with iTunes
- properly show media kind shares in iTunes
- support for named pipes/fifos
- natural sorting and better handling of capitalization
- introduce .init-rescan and .full-rescan triggers
- fix for XBMC (libshairplay) crash
- fix missing songartistid (fixes some remotes)
- fix bug in m3u scanner
- ICY metadata fixes

## Version 20.0

- includes patch against timeouts
- configurable artwork file names
- support for Remote 3 and 4
- preference for album artist if it is available
- bug fix for certain Airport Express models
- bug fix for AirFoil Speakers
- added support for internet radio with m3u
- fixed fatal error when stopping player
- m3u and iTunes playlist scanner improvements
- improved compability with Hyperfine Remote for Android
- speaker selection and m3u bug fixes
- Shoutcast (icy) metadata support for internet radio
- fix for Apple TV update 6.0
- fix artwork memory leak
- basic support for podcasts, compilations and audiobooks
- user can tell file scanner to ignore certain file types
- fix for metadata on non-Apple airplay devices
- configurable library names
- sorting changes, ignore The/A/An
- fix for TunesRemote SE
- force library rescan with .force-rescan
- fix for the Retune remote on Android
- fix for AirBubble speakers (shairport)
- support for artwork in iTunes
- fixed ffmpeg/libav logging
- logging and documentation adjustments
- autoselect AirPlay device if none selected
- support for embedded artwork
- config option to disable startup scan
- config option for max volume for AirPlay devices
- support for embedded platforms without hi-res timers
- fix for WMA files
- fixes for video playback
- other fixes: non apple players, ffmpeg/libav updates...

## Version 0.19

- more libav 0.7 updates.
- database speedups.
- fix for iTunes 30-minute timeout.
- fixes, big and small.

## Version 0.18

- add config knob for ALSA mixer channel name.
- do not elevate privileges for reopening the log file; log file
	  will now be owned by the user forked-daapd runs as.
- fixes, big and small.

## Version 0.17

- support for libav 0.7
- fixes, big and small.

## Version 0.16

- fix issue with non-UTF-8 metadata while scanning.
- use proper file size in HTTP streaming code.
- fix DAAP songlist bug with sort tags.
- small code fixes.

## Version 0.15

- add support for sending metadata to AppleTV during AirTunes streaming.
- support DOS-encoded Remote pairing files.
- rework album_artist_sort handling.
- enable RAOP to queue RTSP requests.
- speedup DAAP & RSP filters processing.
- speedup DAAP songlist generation.
- artwork can handle and send out both PNG and JPEG.
- fixes, big and small.

## Version 0.14

- sort headers/tags handling improvements.
- better handling of tags for TV shows.
- better handling of DRM-afflicted files.
- configurable IPv6 support.
- fix scanning of URL files.
- fixes, big and small.

## Version 0.13

- add Remote v2 support; Remote v1 is not supported anymore.
- add per-speaker volume support.
- implement RAOP retransmission.
- implement per-device quirks in RAOP.
- improve compatibility with 802.11g AirPort Express.
- improve mDNS address resolution, making IPv4 usable again.
- fix Murmur Hash bug on 32bit platforms.
- add support for JPEG artwork and alternative filenames.
- disable session expiration that was causing issues.
- FFmpeg 0.6 support.
- fixes, big and small.

## Version 0.12

- add AirTunes v2 streaming.
- add Remote support.
- add gzipped replies.
- add IPv6 support.
- check for UTF-8 correctness of metadata.
- fixes, big and small.

## Version 0.11

- support iTunes 9.
- add iTunes XML playlist scanner.
- add support for TV shows.
- add FreeBSD and GNU/kFreeBSD support.
- add support for DAAP groups.
- add support for artwork.
- rework metdata extraction, better support for ID3 tags.
- database code rework.
- preliminary support for Remote (pairing, browsing).
- fixes, big and small.

## Version 0.10

- initial release.
