1 line
61 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Linux/FreeBSD DAAP (iTunes) and MPD media server with support for AirPlay devices (multiroom), Apple Remote (and compatibles), Chromecast, Spotify and internet radio. "><meta name=author content="OwnTone maintainers"><link href=https://owntone.github.io/owntone-server/changelog/ rel=canonical><link href=../development/ rel=prev><link href=../json-api/ rel=next><link rel=icon href=../assets/favicon.ico><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.6.2"><title>Changelog - OwnTone</title><link rel=stylesheet href=../assets/stylesheets/main.d7758b05.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../assets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#changelog class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=.. title=OwnTone class="md-header__button md-logo" aria-label=OwnTone data-md-component=logo> <img src=../assets/logo.svg alt=logo> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> OwnTone </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Changelog </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media=(prefers-color-scheme) data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zm-9.15 3.96h2.3L12 9z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=white data-md-color-accent=teal aria-label="Switch to dark mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_2 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=black data-md-color-accent=teal aria-label="Switch to system preference" type=radio name=__palette id=__palette_2> <label class="md-header__button md-icon" title="Switch to system preference" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/owntone/owntone-server title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg> </div> <div class=md-source__repository> owntone/owntone-server </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=.. class=md-tabs__link> Home </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../getting-started/ class=md-tabs__link> Documentation </a> </li> <li class=md-tabs__item> <a href=../json-api/ class=md-tabs__link> JSON API </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=.. title=OwnTone class="md-nav__button md-logo" aria-label=OwnTone data-md-component=logo> <img src=../assets/logo.svg alt=logo> </a> OwnTone </label> <div class=md-nav__source> <a href=https://github.com/owntone/owntone-server title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg> </div> <div class=md-source__repository> owntone/owntone-server </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=.. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2 checked> <label class=md-nav__link for=__nav_2 id=__nav_2_label tabindex> <span class=md-ellipsis> Documentation </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=true> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Documentation </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../getting-started/ class=md-nav__link> <span class=md-ellipsis> Getting Started </span> </a> </li> <li class=md-nav__item> <a href=../installation/ class=md-nav__link> <span class=md-ellipsis> Installation </span> </a> </li> <li class=md-nav__item> <a href=../configuration/ class=md-nav__link> <span class=md-ellipsis> Configuration </span> </a> </li> <li class=md-nav__item> <a href=../building/ class=md-nav__link> <span class=md-ellipsis> Building </span> </a> </li> <li class=md-nav__item> <a href=../library/ class=md-nav__link> <span class=md-ellipsis> Library </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2_6> <label class=md-nav__link for=__nav_2_6 id=__nav_2_6_label tabindex=0> <span class=md-ellipsis> Control </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_6_label aria-expanded=false> <label class=md-nav__title for=__nav_2_6> <span class="md-nav__icon md-icon"></span> Control </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../control-clients/mobile/ class=md-nav__link> <span class=md-ellipsis> Mobile Device </span> </a> </li> <li class=md-nav__item> <a href=../control-clients/desktop/ class=md-nav__link> <span class=md-ellipsis> Desktop </span> </a> </li> <li class=md-nav__item> <a href=../control-clients/web/ class=md-nav__link> <span class=md-ellipsis> Browser </span> </a> </li> <li class=md-nav__item> <a href=../control-clients/cli-api/ class=md-nav__link> <span class=md-ellipsis> API and CLI </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2_7> <label class=md-nav__link for=__nav_2_7 id=__nav_2_7_label tabindex=0> <span class=md-ellipsis> Audio Outputs </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_7_label aria-expanded=false> <label class=md-nav__title for=__nav_2_7> <span class="md-nav__icon md-icon"></span> Audio Outputs </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../audio-outputs/airplay/ class=md-nav__link> <span class=md-ellipsis> AirPlay </span> </a> </li> <li class=md-nav__item> <a href=../audio-outputs/chromecast/ class=md-nav__link> <span class=md-ellipsis> Chromecast </span> </a> </li> <li class=md-nav__item> <a href=../audio-outputs/local-audio/ class=md-nav__link> <span class=md-ellipsis> Local Audio </span> </a> </li> <li class=md-nav__item> <a href=../audio-outputs/mobile/ class=md-nav__link> <span class=md-ellipsis> Mobile Device </span> </a> </li> <li class=md-nav__item> <a href=../audio-outputs/web/ class=md-nav__link> <span class=md-ellipsis> Web </span> </a> </li> <li class=md-nav__item> <a href=../audio-outputs/roku/ class=md-nav__link> <span class=md-ellipsis> Roku </span> </a> </li> <li class=md-nav__item> <a href=../audio-outputs/streaming/ class=md-nav__link> <span class=md-ellipsis> Streaming </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../media-clients/ class=md-nav__link> <span class=md-ellipsis> Media Clients </span> </a> </li> <li class=md-nav__item> <a href=../artwork/ class=md-nav__link> <span class=md-ellipsis> Artwork </span> </a> </li> <li class=md-nav__item> <a href=../playlists/ class=md-nav__link> <span class=md-ellipsis> Playlists and Radio </span> </a> </li> <li class=md-nav__item> <a href=../smart-playlists/ class=md-nav__link> <span class=md-ellipsis> Smart Playlists </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2_12> <label class=md-nav__link for=__nav_2_12 id=__nav_2_12_label tabindex=0> <span class=md-ellipsis> Services Integration </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_12_label aria-expanded=false> <label class=md-nav__title for=__nav_2_12> <span class="md-nav__icon md-icon"></span> Services Integration </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../integrations/spotify/ class=md-nav__link> <span class=md-ellipsis> Spotify </span> </a> </li> <li class=md-nav__item> <a href=../integrations/lastfm/ class=md-nav__link> <span class=md-ellipsis> LastFM </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2_13> <label class=md-nav__link for=__nav_2_13 id=__nav_2_13_label tabindex=0> <span class=md-ellipsis> Advanced Setup </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_13_label aria-expanded=false> <label class=md-nav__title for=__nav_2_13> <span class="md-nav__icon md-icon"></span> Advanced Setup </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../advanced/outputs-alsa/ class=md-nav__link> <span class=md-ellipsis> ALSA </span> </a> </li> <li class=md-nav__item> <a href=../advanced/outputs-pulse/ class=md-nav__link> <span class=md-ellipsis> PulseAudio </span> </a> </li> <li class=md-nav__item> <a href=../advanced/radio-streams/ class=md-nav__link> <span class=md-ellipsis> Radio Streams </span> </a> </li> <li class=md-nav__item> <a href=../advanced/remote-access/ class=md-nav__link> <span class=md-ellipsis> Remote Access </span> </a> </li> <li class=md-nav__item> <a href=../advanced/multiple-instances/ class=md-nav__link> <span class=md-ellipsis> Multiple Instances </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../development/ class=md-nav__link> <span class=md-ellipsis> Development </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Changelog </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Changelog </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#version-2811-2025-01-26 class=md-nav__link> <span class=md-ellipsis> Version 28.11 - 2025-01-26 </span> </a> </li> <li class=md-nav__item> <a href=#version-2810-2024-09-12 class=md-nav__link> <span class=md-ellipsis> Version 28.10 - 2024-09-12 </span> </a> </li> <li class=md-nav__item> <a href=#version-289-2024-01-18 class=md-nav__link> <span class=md-ellipsis> Version 28.9 - 2024-01-18 </span> </a> </li> <li class=md-nav__item> <a href=#version-288 class=md-nav__link> <span class=md-ellipsis> Version 28.8 </span> </a> </li> <li class=md-nav__item> <a href=#version-287 class=md-nav__link> <span class=md-ellipsis> Version 28.7 </span> </a> </li> <li class=md-nav__item> <a href=#version-286 class=md-nav__link> <span class=md-ellipsis> Version 28.6 </span> </a> </li> <li class=md-nav__item> <a href=#version-285 class=md-nav__link> <span class=md-ellipsis> Version 28.5 </span> </a> </li> <li class=md-nav__item> <a href=#version-284 class=md-nav__link> <span class=md-ellipsis> Version 28.4 </span> </a> </li> <li class=md-nav__item> <a href=#version-283 class=md-nav__link> <span class=md-ellipsis> Version 28.3 </span> </a> </li> <li class=md-nav__item> <a href=#version-282 class=md-nav__link> <span class=md-ellipsis> Version 28.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-281 class=md-nav__link> <span class=md-ellipsis> Version 28.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-280 class=md-nav__link> <span class=md-ellipsis> Version 28.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-274 class=md-nav__link> <span class=md-ellipsis> Version 27.4 </span> </a> </li> <li class=md-nav__item> <a href=#version-273 class=md-nav__link> <span class=md-ellipsis> Version 27.3 </span> </a> </li> <li class=md-nav__item> <a href=#version-272 class=md-nav__link> <span class=md-ellipsis> Version 27.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-271 class=md-nav__link> <span class=md-ellipsis> Version 27.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-270 class=md-nav__link> <span class=md-ellipsis> Version 27.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-265 class=md-nav__link> <span class=md-ellipsis> Version 26.5 </span> </a> </li> <li class=md-nav__item> <a href=#version-264 class=md-nav__link> <span class=md-ellipsis> Version 26.4 </span> </a> </li> <li class=md-nav__item> <a href=#version-263 class=md-nav__link> <span class=md-ellipsis> Version 26.3 </span> </a> </li> <li class=md-nav__item> <a href=#version-262 class=md-nav__link> <span class=md-ellipsis> Version 26.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-261 class=md-nav__link> <span class=md-ellipsis> Version 26.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-260 class=md-nav__link> <span class=md-ellipsis> Version 26.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-250 class=md-nav__link> <span class=md-ellipsis> Version 25.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-242 class=md-nav__link> <span class=md-ellipsis> Version 24.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-241 class=md-nav__link> <span class=md-ellipsis> Version 24.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-240 class=md-nav__link> <span class=md-ellipsis> Version 24.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-234 class=md-nav__link> <span class=md-ellipsis> Version 23.4 </span> </a> </li> <li class=md-nav__item> <a href=#version-233 class=md-nav__link> <span class=md-ellipsis> Version 23.3 </span> </a> </li> <li class=md-nav__item> <a href=#version-232 class=md-nav__link> <span class=md-ellipsis> Version 23.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-231 class=md-nav__link> <span class=md-ellipsis> Version 23.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-230 class=md-nav__link> <span class=md-ellipsis> Version 23.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-222 class=md-nav__link> <span class=md-ellipsis> Version 22.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-221 class=md-nav__link> <span class=md-ellipsis> Version 22.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-220 class=md-nav__link> <span class=md-ellipsis> Version 22.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-210 class=md-nav__link> <span class=md-ellipsis> Version 21.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-200 class=md-nav__link> <span class=md-ellipsis> Version 20.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-019 class=md-nav__link> <span class=md-ellipsis> Version 0.19 </span> </a> </li> <li class=md-nav__item> <a href=#version-018 class=md-nav__link> <span class=md-ellipsis> Version 0.18 </span> </a> </li> <li class=md-nav__item> <a href=#version-017 class=md-nav__link> <span class=md-ellipsis> Version 0.17 </span> </a> </li> <li class=md-nav__item> <a href=#version-016 class=md-nav__link> <span class=md-ellipsis> Version 0.16 </span> </a> </li> <li class=md-nav__item> <a href=#version-015 class=md-nav__link> <span class=md-ellipsis> Version 0.15 </span> </a> </li> <li class=md-nav__item> <a href=#version-014 class=md-nav__link> <span class=md-ellipsis> Version 0.14 </span> </a> </li> <li class=md-nav__item> <a href=#version-013 class=md-nav__link> <span class=md-ellipsis> Version 0.13 </span> </a> </li> <li class=md-nav__item> <a href=#version-012 class=md-nav__link> <span class=md-ellipsis> Version 0.12 </span> </a> </li> <li class=md-nav__item> <a href=#version-011 class=md-nav__link> <span class=md-ellipsis> Version 0.11 </span> </a> </li> <li class=md-nav__item> <a href=#version-010 class=md-nav__link> <span class=md-ellipsis> Version 0.10 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../json-api/ class=md-nav__link> <span class=md-ellipsis> JSON API </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#version-2811-2025-01-26 class=md-nav__link> <span class=md-ellipsis> Version 28.11 - 2025-01-26 </span> </a> </li> <li class=md-nav__item> <a href=#version-2810-2024-09-12 class=md-nav__link> <span class=md-ellipsis> Version 28.10 - 2024-09-12 </span> </a> </li> <li class=md-nav__item> <a href=#version-289-2024-01-18 class=md-nav__link> <span class=md-ellipsis> Version 28.9 - 2024-01-18 </span> </a> </li> <li class=md-nav__item> <a href=#version-288 class=md-nav__link> <span class=md-ellipsis> Version 28.8 </span> </a> </li> <li class=md-nav__item> <a href=#version-287 class=md-nav__link> <span class=md-ellipsis> Version 28.7 </span> </a> </li> <li class=md-nav__item> <a href=#version-286 class=md-nav__link> <span class=md-ellipsis> Version 28.6 </span> </a> </li> <li class=md-nav__item> <a href=#version-285 class=md-nav__link> <span class=md-ellipsis> Version 28.5 </span> </a> </li> <li class=md-nav__item> <a href=#version-284 class=md-nav__link> <span class=md-ellipsis> Version 28.4 </span> </a> </li> <li class=md-nav__item> <a href=#version-283 class=md-nav__link> <span class=md-ellipsis> Version 28.3 </span> </a> </li> <li class=md-nav__item> <a href=#version-282 class=md-nav__link> <span class=md-ellipsis> Version 28.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-281 class=md-nav__link> <span class=md-ellipsis> Version 28.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-280 class=md-nav__link> <span class=md-ellipsis> Version 28.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-274 class=md-nav__link> <span class=md-ellipsis> Version 27.4 </span> </a> </li> <li class=md-nav__item> <a href=#version-273 class=md-nav__link> <span class=md-ellipsis> Version 27.3 </span> </a> </li> <li class=md-nav__item> <a href=#version-272 class=md-nav__link> <span class=md-ellipsis> Version 27.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-271 class=md-nav__link> <span class=md-ellipsis> Version 27.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-270 class=md-nav__link> <span class=md-ellipsis> Version 27.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-265 class=md-nav__link> <span class=md-ellipsis> Version 26.5 </span> </a> </li> <li class=md-nav__item> <a href=#version-264 class=md-nav__link> <span class=md-ellipsis> Version 26.4 </span> </a> </li> <li class=md-nav__item> <a href=#version-263 class=md-nav__link> <span class=md-ellipsis> Version 26.3 </span> </a> </li> <li class=md-nav__item> <a href=#version-262 class=md-nav__link> <span class=md-ellipsis> Version 26.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-261 class=md-nav__link> <span class=md-ellipsis> Version 26.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-260 class=md-nav__link> <span class=md-ellipsis> Version 26.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-250 class=md-nav__link> <span class=md-ellipsis> Version 25.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-242 class=md-nav__link> <span class=md-ellipsis> Version 24.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-241 class=md-nav__link> <span class=md-ellipsis> Version 24.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-240 class=md-nav__link> <span class=md-ellipsis> Version 24.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-234 class=md-nav__link> <span class=md-ellipsis> Version 23.4 </span> </a> </li> <li class=md-nav__item> <a href=#version-233 class=md-nav__link> <span class=md-ellipsis> Version 23.3 </span> </a> </li> <li class=md-nav__item> <a href=#version-232 class=md-nav__link> <span class=md-ellipsis> Version 23.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-231 class=md-nav__link> <span class=md-ellipsis> Version 23.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-230 class=md-nav__link> <span class=md-ellipsis> Version 23.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-222 class=md-nav__link> <span class=md-ellipsis> Version 22.2 </span> </a> </li> <li class=md-nav__item> <a href=#version-221 class=md-nav__link> <span class=md-ellipsis> Version 22.1 </span> </a> </li> <li class=md-nav__item> <a href=#version-220 class=md-nav__link> <span class=md-ellipsis> Version 22.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-210 class=md-nav__link> <span class=md-ellipsis> Version 21.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-200 class=md-nav__link> <span class=md-ellipsis> Version 20.0 </span> </a> </li> <li class=md-nav__item> <a href=#version-019 class=md-nav__link> <span class=md-ellipsis> Version 0.19 </span> </a> </li> <li class=md-nav__item> <a href=#version-018 class=md-nav__link> <span class=md-ellipsis> Version 0.18 </span> </a> </li> <li class=md-nav__item> <a href=#version-017 class=md-nav__link> <span class=md-ellipsis> Version 0.17 </span> </a> </li> <li class=md-nav__item> <a href=#version-016 class=md-nav__link> <span class=md-ellipsis> Version 0.16 </span> </a> </li> <li class=md-nav__item> <a href=#version-015 class=md-nav__link> <span class=md-ellipsis> Version 0.15 </span> </a> </li> <li class=md-nav__item> <a href=#version-014 class=md-nav__link> <span class=md-ellipsis> Version 0.14 </span> </a> </li> <li class=md-nav__item> <a href=#version-013 class=md-nav__link> <span class=md-ellipsis> Version 0.13 </span> </a> </li> <li class=md-nav__item> <a href=#version-012 class=md-nav__link> <span class=md-ellipsis> Version 0.12 </span> </a> </li> <li class=md-nav__item> <a href=#version-011 class=md-nav__link> <span class=md-ellipsis> Version 0.11 </span> </a> </li> <li class=md-nav__item> <a href=#version-010 class=md-nav__link> <span class=md-ellipsis> Version 0.10 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1 id=changelog>Changelog<a class=headerlink href=#changelog title="Permanent link">&para;</a></h1> <h2 id=version-2811-2025-01-26>Version 28.11 - 2025-01-26<a class=headerlink href=#version-2811-2025-01-26 title="Permanent link">&para;</a></h2> <ul> <li>fix: retrieval of artwork from online sources</li> <li>fix: mpd speaker selection</li> <li>fix: autoconf warnings</li> <li>fix: Apple Music/iTunes not working on Airplay host</li> <li>web UI: Now Playing does not stop play progress updates when pausing</li> <li>web UI: add ability to access the server externally</li> <li>new: internet radio "Streamurl" options</li> <li>new: support libevent as WS server instead of libwebsockets</li> <li>new: template for VSCode</li> <li>new: mpd updates, version 0.23.0, e.g. getvol, readpicture, albumart</li> <li>new: API for setting skip_count and play_count directly</li> </ul> <h2 id=version-2810-2024-09-12>Version 28.10 - 2024-09-12<a class=headerlink href=#version-2810-2024-09-12 title="Permanent link">&para;</a></h2> <ul> <li>fix: playlist scanner ignoring lines starting with non-ascii chars</li> <li>fix: last seconds of a track sometimes being skipped</li> <li>fix: Apple Music password-based auth</li> <li>fix: missing file scan when modified multiple times within a second</li> <li>fix: Roku M1001 crash</li> <li>fix: speakers changing IP addresses (error "Got RR type A size 16")</li> <li>fix: playlist rename not registered</li> <li>fix: problems with DAAP and old dates ("Integer value too large")</li> <li>fix: compability with ffmpeg 7 (fixes build error)</li> <li>web UI: many smaller improvements, e.g. sort by release date</li> <li>web UI: traditional Chinese translation</li> <li>new: ALAC transcoding for RSP/DAAP streaming</li> <li>new: ability to save id3 metadata</li> <li>config: change "trusted_networks" to have new value "lan" as default</li> <li>config: new option to announce a MPD httpd plugin (stream from server)</li> <li>config: set ipv6 to disabled by default due to unknown Airplay issue</li> <li>config: deprecate "cache_path", replaced by "cache_dir"</li> <li>dependency: libxml2 instead of mxml</li> </ul> <h2 id=version-289-2024-01-18>Version 28.9 - 2024-01-18<a class=headerlink href=#version-289-2024-01-18 title="Permanent link">&para;</a></h2> <ul> <li>web UI improvements:<ul> <li>display lyrics metadata</li> <li>toggle Spotify on/off in some views</li> <li>many minor improvements</li> </ul> </li> <li>use compressed ALAC for Airplay for bandwidth + fixes esp32 issue</li> <li>don't merge Spotify albums with local albums</li> <li>handle playlist with Unicode BOM</li> <li>json API add tracks to queue returns info on added tracks</li> <li>replace syscall with gettid, syscall deprecated on MacOS</li> <li>fix issue where m3u genre doesn't override despite m3u_override = true</li> <li>fix possible crash from use-after-free</li> <li>fix FreeBSD possible crash</li> <li>fix crash when keys of incorrect length are used for legacy pairing</li> </ul> <h2 id=version-288>Version 28.8<a class=headerlink href=#version-288 title="Permanent link">&para;</a></h2> <ul> <li>fix MacOS bind error: "Protocol wrong type for socket"</li> <li>fix BSD build error (no SYS_gettid)</li> <li>fix ALAC missing end tag causing ffmpeg decoder warnings</li> <li>fix crash if Spotify AP resolver is unavailable</li> <li>fix duplicates if file within library is replaced</li> <li>fix fatal error due to mutex being zeroed</li> </ul> <h2 id=version-287>Version 28.7<a class=headerlink href=#version-287 title="Permanent link">&para;</a></h2> <ul> <li>fix compability with ffmpeg 6</li> <li>web UI improvements:<ul> <li>easier volume sliders</li> <li>incorrect display of genre</li> <li>Chinese translation</li> <li>fix removing RSS podcasts</li> <li>sort by rating for composer, genre and artist tracks</li> <li>(and much more)</li> </ul> </li> <li>changes to artwork search orders (easier static artwork for pipes)</li> <li>major refactor of the http server improving mp3 streaming</li> <li>support for m3u8 playlist files</li> <li>allow mixed ipv4/ipv6 mdns</li> <li>fix issue with device name capitalization (TuneAero issue)</li> <li>drop support for libevent &lt; 2.1.4</li> </ul> <h2 id=version-286>Version 28.6<a class=headerlink href=#version-286 title="Permanent link">&para;</a></h2> <ul> <li>German translation of web UI</li> <li>web UI: fix error messages not displaying</li> <li>fix low resolution Spotify artwork</li> <li>fix incorrect display of date released pre 1970</li> <li>fix for Denon speakers when pausing</li> <li>support password authentication for Airplay 2</li> <li>support for user config ffmpeg audio filters</li> </ul> <h2 id=version-285>Version 28.5<a class=headerlink href=#version-285 title="Permanent link">&para;</a></h2> <ul> <li>French translation of web UI</li> <li>improved web UI loading of images</li> <li>add support for Airplay 2 password based auth</li> <li>fix some Airplay speakers turning on by themselves</li> <li>fix parsing of CRLF and NOT in smart playlists and allow larger sizes</li> <li>fix possible crash after Avahi restart</li> <li>fix for Remote - play item from 'up next' when stopped</li> <li>use configured bind_address to set mdns network interface</li> </ul> <h2 id=version-284>Version 28.4<a class=headerlink href=#version-284 title="Permanent link">&para;</a></h2> <ul> <li>fix broken Spotify after libspotify sunset</li> <li>remove antlr3 dependency, use bison/flex instead</li> <li>improve search by supporting diacritics and Unicode case folding</li> <li>add support for new output: Roku/Soundbridge RCP</li> <li>switch to MkDocs for documentation</li> <li>smart playlists fixups and new "this week" param</li> <li>fix 'add next' when in queue shuffle mode</li> <li>web UI improvements:<ul> <li>migration to Vue 3 and Vite</li> <li>honor "radio_playlists" config setting</li> <li>display of search results for composers and playlists</li> <li>add album / track count to genre and composer pages</li> <li>fix incorrect sorting of album/artist searches</li> <li>minor UI fixes</li> </ul> </li> <li>fix for Spotify config option album_override</li> <li>improved Spotify scan performance</li> <li>generic browse endpoints for the json api</li> <li>fix slow shutdown with some libwebsocket versions</li> </ul> <h2 id=version-283>Version 28.3<a class=headerlink href=#version-283 title="Permanent link">&para;</a></h2> <ul> <li>web UI improvements, e.g.:<ul> <li>composer views</li> <li>partial scan (e.g. only update RSS feeds)</li> <li>fix http stream button not clickable in mobile view</li> <li>fix Spotify playlists not showing</li> <li>handling of not playable Spotify tracks</li> <li>handling of podcast play counts</li> </ul> </li> <li>support for Spotify podcasts</li> <li>updates for ffmpeg 5</li> <li>better Spotify logout</li> <li>user "usermark" field for user flagging of various track states</li> <li>fix for 0-byte files crashing ffmpeg</li> <li>fix metadata pipe deadlock and artwork memleak-on-error</li> <li>better handling of Spotify disconnects</li> <li>fix rare Airplay pairing error</li> <li>many minor error handling fixes</li> </ul> <h2 id=version-282>Version 28.2<a class=headerlink href=#version-282 title="Permanent link">&para;</a></h2> <ul> <li>add Spotify integration that doesn't depend on libspotify</li> <li>partial support for AirPlay events (Homepod buttons)</li> <li>web UI upgraded, now 1.1.0:<ul> <li>show "comment" field in track details</li> <li>drop double login to Spotify when not using libspotify</li> </ul> </li> <li>easier install by letting 'make install' add user and service files</li> <li>preserve existing conf file when running 'make install'</li> <li>support for "comment" field when making smart playlists</li> <li>fix support for dacp device-volume</li> <li>fix issue where source file sort tags where ignored</li> <li>fix for Roku (RSP) artist display issue</li> <li>fix bug when 'bind_address' option is used</li> <li>fix for CVE-2021-38383</li> <li>fix some minor time-of-check time-of-use bugs</li> </ul> <h2 id=version-281>Version 28.1<a class=headerlink href=#version-281 title="Permanent link">&para;</a></h2> <ul> <li>fix incompability in 28.0 with Debian Buster's libwebsockets 2.0</li> </ul> <h2 id=version-280>Version 28.0<a class=headerlink href=#version-280 title="Permanent link">&para;</a></h2> <ul> <li>rename forked-daapd to OwnTone + new logo</li> <li>fix web UI slow updates due to websockets 3.x changes</li> <li>support for ALAC sort tags</li> <li>support for remote pls/m3u with https streams</li> <li>add /api/queue?id=now_playing json API shortcut</li> <li>fix possible crash on Pulseaudio error callback</li> <li>fix possible segfault-on-exit</li> <li>fix websockets not working on FreeBSD</li> <li>refactor how the server binds to sockets (use dual stack ipv4/6)</li> <li>configurable interface/address binding</li> </ul> <h2 id=version-274>Version 27.4<a class=headerlink href=#version-274 title="Permanent link">&para;</a></h2> <ul> <li>fix web server path traversal vulnerability</li> </ul> <h2 id=version-273>Version 27.3<a class=headerlink href=#version-273 title="Permanent link">&para;</a></h2> <ul> <li>support for AirPlay 2 speakers, incl. compressed ALAC</li> <li>web UI upgraded, now v0.8.5:<ul> <li>new design/layout</li> <li>optimize "Recently added"</li> <li>Spotify search dialogue improvements</li> <li>drop separate admin web page, now integrated in main web</li> <li>podcast deletion</li> <li>make Radio a top level item</li> <li>show release dates</li> <li>new sorting options</li> <li>prevent browser caching of playlists</li> <li>additional settings</li> </ul> </li> <li>improved Chromecast streaming (retransmisson, adaptive etc.)</li> <li>JSON api support for updating metadata of queue items</li> <li>JSON api new fields, e.g. time_added, time_played and seek</li> <li>fix for some Chromecasts disconnecting</li> <li>new algorithm for more natural ALSA volume adjustments</li> <li>new nickname option for AirPlay and Chromecast</li> <li>mpd fixes (nextsong, multiple commands)</li> <li>charset flexibility when getting ICY metadata from streams</li> <li>adaptive probing of radio streams</li> <li>libplist and libsodium now required</li> <li>fixes for library update events</li> <li>fixes to speaker selection and unintentional volume changes</li> <li>fix some minor memleaks</li> <li>support shairport-sync metadata pipe flush event</li> <li>misc logging fixup</li> </ul> <h2 id=version-272>Version 27.2<a class=headerlink href=#version-272 title="Permanent link">&para;</a></h2> <ul> <li>web UI upgraded to v0.7.2:<ul> <li>show cover artwork in album pages and lazy loading of artwork</li> <li>show playlist folders</li> <li>use sass/scss for css files</li> <li>add "Radio" tab to the music section</li> <li>add settings for artwork sources</li> <li>add pop up dialog for Remote pairing requests</li> <li>support adding/removing podcast subscriptions</li> <li>support marking all new podcast episodes/all episodes as played</li> <li>support searching by smart pl queries</li> <li>skip buttons for audiobooks and podcasts</li> <li>show localized times/dates</li> <li>generate colored placeholder image if cover artwork is missing</li> <li>show "cast" icon for Chromecast outputs</li> <li>styling changes of the navbars and moving the volume controls</li> </ul> </li> <li>new speaker selection logic (persist user choice even after failure)</li> <li>speaker autoselect no longer enabled by default</li> <li>removed old admin page, not necessary any more</li> <li>fix/workaround for Apple TV's and HomePods that disconnect</li> <li>support for RSS feeds</li> <li>support for nested smart playlists (playlist folders)</li> <li>support for online artwork sources e.g. Discogs, Coverartarchive</li> <li>support for radio StreamUrl's that point to json with metadata</li> <li>fix incorrect artwork shown for unknown album/artists</li> <li>fix issue parsing shairport-sync progress metadata</li> <li>fix missing Spofity logout option</li> <li>fix for embedded artwork not working with ffmpeg 4.3+</li> <li>some smart PL improvements, e.g. support for more tags</li> <li>config option for Airplay timing/control ports (eases firewalling)</li> <li>quicker loading of radio streams (smaller probing)</li> <li>workaround for mxml 2.10 significant memleak</li> <li>some fixes for Roku (RSP)</li> <li>drop libspotify for artwork, doesn't work any more</li> <li>documentation improvements</li> </ul> <h2 id=version-271>Version 27.1<a class=headerlink href=#version-271 title="Permanent link">&para;</a></h2> <ul> <li>web UI upgraded to v0.6.0: settings page, display more Spotify data</li> <li>support for volumeup, volumedown and mutetoggle DACP commands</li> <li>support for multiple ALSA devices</li> <li>suppress repeated logging of same message to avoid log file bloat</li> <li>fix opening too many files due to looping with shairport-sync</li> <li>fix for genres with single quotes in name</li> <li>fix for incorrect update of time_added metadata</li> <li>fix some small memleaks and missing cleanup</li> </ul> <h2 id=version-270>Version 27.0<a class=headerlink href=#version-270 title="Permanent link">&para;</a></h2> <ul> <li>no fixed resampling to 44100/16, play source quality if possible</li> <li>Chromecast: quick start, better quality (48000/16 Opus encoded)</li> <li>performance enhancements: Remote and iTunes will load quicker</li> <li>alsa sync with variable sample rate, avoiding audible "clicks"</li> <li>web UI upgraded to v0.5.6, e.g. play non-library tracks, saving queue</li> <li>fix for Pebble mpd client (and possibly others)</li> <li>fix issue with some HLS radio stations</li> <li>support for https streams</li> <li>fix for artwork showing dithered</li> <li>ICY metadata in forked-daapd's mp3 stream</li> <li>support for Spotify collaborative playlists</li> <li>support for Shairport artwork via pipe</li> <li>configurable mp3 streaming quality</li> <li>json api improvements, e.g. for toggling speakers</li> <li>json api/web ui: Relative seeking</li> <li>support for some http seeking</li> <li>fix for macOS Catalinas Apple Music</li> </ul> <h2 id=version-265>Version 26.5<a class=headerlink href=#version-265 title="Permanent link">&para;</a></h2> <ul> <li>json api/web ui: file view</li> <li>web ui: artwork support</li> <li>web ui: "Add next" and genre tab</li> <li>Airplay connection test improvements</li> <li>support for https streams in m3u's</li> <li>use Spotify web api for artwork instead of libspotify</li> <li>option to make Airplay devices permanent or excluded</li> <li>support for tracks and disc items in smart playlists</li> <li>db refactor, fix issues with play count, time played etc</li> <li>json api: more options available when adding items to the queue</li> <li>json api: player/toggle</li> <li>mpd version 0.20 support + support for "listfiles" command</li> <li>fix double http auth decline issue</li> </ul> <h2 id=version-264>Version 26.4<a class=headerlink href=#version-264 title="Permanent link">&para;</a></h2> <ul> <li>automatic rating</li> <li>fix issue in 26.3 causing invalid time_skipped values in the db</li> <li>improved fallback to ipv4 if ipv6 fails</li> <li>fix issue returning too many queue items to clients</li> <li>fix missing prompt for library password</li> </ul> <h2 id=version-263>Version 26.3<a class=headerlink href=#version-263 title="Permanent link">&para;</a></h2> <ul> <li>fix AirPlay 2 devices (e.g. Sonos Beam and Airport Express)</li> <li>fix mdns problems with ATV4 and ipv6</li> <li>fix possible segfault if null user-agent</li> <li>new metadata: Skip Count and Times Skipped (incl iTunes XML mapping)</li> <li>iTunes XML mapping of Play Count and Play Date</li> <li>fix for crashes when client provides no User-Agent</li> <li>logging improvements</li> </ul> <h2 id=version-262>Version 26.2<a class=headerlink href=#version-262 title="Permanent link">&para;</a></h2> <ul> <li>fix for db indexes not being used on fresh installs</li> </ul> <h2 id=version-261>Version 26.1<a class=headerlink href=#version-261 title="Permanent link">&para;</a></h2> <ul> <li>player web interface</li> <li>support for Airplay speaker control commands</li> <li>add non-library items (e.g. radio stations) to the queue</li> <li>fix for keeping connection alive towards some devices e.g. old ApEx's</li> <li>extension of the JSON API</li> <li>under-the-hood improvements of Spotify integration</li> <li>fix for Android "Remote for iTunes"</li> <li>fix ffmpeg segfault when jpeg encoding</li> <li>performance improvements + misc</li> </ul> <h2 id=version-260>Version 26.0<a class=headerlink href=#version-260 title="Permanent link">&para;</a></h2> <ul> <li>added web interface</li> <li>added JSON API</li> <li>new mpd commands (e.g. sticker, urlhandlers, playlistfind)</li> <li>support for adding non-library urls to the playback queue</li> <li>support for id3 grouping tags</li> <li>support for filesystems with ACL's</li> <li>use Spotify web api to load all playlists</li> <li>improved client authentication options</li> <li>only rescan playlists if changed -&gt; faster startup</li> <li>fix bug related to dacp/daap client revision number handling</li> <li>fix bugs related to import of iTunes XML playlists</li> <li>restore ATV4/tvOS11 support by removing requirement for timing_port</li> <li>fixes for Hyperfine Remote</li> <li>improve database performance</li> <li>make sure daemons listen on both ipv4 and ipv6 (for BSD)</li> <li>ffmpeg/transcoding refactored for new ffmpeg API</li> <li>and more...</li> </ul> <h2 id=version-250>Version 25.0<a class=headerlink href=#version-250 title="Permanent link">&para;</a></h2> <ul> <li>improved playback resilience</li> <li>substitute packet skipping (producing audio "clicks") with start/stop</li> <li>support for MacOSX with macports and Bonjour mDNS</li> <li>Airplay device verification for Apple TV 4 w/tvOS 10.2 (uses libsodium)</li> <li>support for Spotify web api (saved tracks/albums + Discover Weekly)</li> <li>automatic playback of pipes + support for Shairport metadata pipes</li> <li>added pipe audio output (fifo)</li> <li>persistent queues (queue remains across server restart)</li> <li>support for browser based clients</li> <li>mpd sendmessage: set individual speaker volume, remote pairing</li> <li>mpd add <a href=http://path-to-radiostream>http://path-to-radiostream</a> (i.e. add non-library items)</li> <li>new options, e.g. exclude speakers from list</li> <li>fix for shuffle mode</li> <li>fix broken PNG artwork rescaling</li> <li>use friendly Chromecast name in speaker list</li> <li>support for libav/ffmpeg dual installs</li> <li>refactoring - added the input and library interface</li> <li>performance improvements</li> <li>and other fixing up...</li> </ul> <h2 id=version-242>Version 24.2<a class=headerlink href=#version-242 title="Permanent link">&para;</a></h2> <ul> <li>Pulseaudio support (can be used for Bluetooth speakers)</li> <li>new pipe/"fifo" audio output</li> <li>fix misc Chromecast audio bugs</li> <li>fix for Apple tvOS10 disconnecting after some minutes</li> <li>enable CORS headers</li> <li>LastFM scrobbling during regular DAAP streaming</li> <li>smart playlist support for file modification time</li> <li>misc MPD improvements, e.g. new outputsvolume command</li> <li>ignore ipv6 link-local addresses (announced by e.g. ATV4)</li> <li>better inter-thread command handling</li> <li>improved cache performance and use of gzip</li> <li>fix possible segfault on http timeouts</li> <li>fix possible segfault when adding items during playback</li> </ul> <h2 id=version-241>Version 24.1<a class=headerlink href=#version-241 title="Permanent link">&para;</a></h2> <ul> <li>support for Monkey's audio</li> <li>fix build problems on some platforms (e.g. OpenWrt)</li> </ul> <h2 id=version-240>Version 24.0<a class=headerlink href=#version-240 title="Permanent link">&para;</a></h2> <ul> <li>support for Chromecast audio</li> <li>support more idv3 tags (eg. date released)</li> <li>support more DAAP tags (eg. datereleased, hasbeenplayed)</li> <li>fix problem with playlists not shown in correct order in Remote</li> <li>autoselect devices based on priorities + keep devices selected</li> <li>fix multiple FreeBSD filescanner bugs (like too many open files)</li> <li>ALSA audio refurbished (prevent underrun/overrun, better AirPlay sync)</li> <li>improved mpd command support (eg. lsinfo, move, queue autoplay start)</li> <li>better mpd performance</li> <li>timing changes to keep input and output in sync with player timer</li> <li>prevent cache bloat (unscaled artwork or artwork for deleted tracks)</li> <li>more intelligent Spotify artwork retrieval</li> <li>artwork handling refactored</li> <li>add generic output interface</li> <li>add systemd service file</li> <li>support for OSS4 dropped</li> <li>support for old ffmpeg dropped</li> <li>misc minor bugfixing</li> </ul> <h2 id=version-234>Version 23.4<a class=headerlink href=#version-234 title="Permanent link">&para;</a></h2> <ul> <li>fix freeze problem on network stream disconnects</li> <li>support for mp3 streaming</li> <li>better ipv6 handling</li> <li>option to hide singles from album/artist lists</li> <li>misc MPD improvements, incl. new commands and zeroconf support</li> <li>queue handling and transcoding refactored</li> <li>libavresample/libswresample dependency changed to libavfilter</li> <li>improved pairinghelper.sh script</li> </ul> <h2 id=version-233>Version 23.3<a class=headerlink href=#version-233 title="Permanent link">&para;</a></h2> <ul> <li>fix issue where volume gets set to -1 on startup of raop devices</li> <li>plug various minor memleaks</li> <li>audiobook improvements, eg resuming playback from saved position</li> <li>live icy metadata</li> <li>libevent 1 support removed</li> <li>LastFM performance improvement</li> <li>drop legacy ffmpeg stuff</li> <li>drop legacy flac, musepack and wma scanner</li> </ul> <h2 id=version-232>Version 23.2<a class=headerlink href=#version-232 title="Permanent link">&para;</a></h2> <ul> <li>fix db lock, m3u and Windows Phone bugs</li> <li>improvements for Spotify and mpd</li> <li>fixing bugs as always</li> <li>sorting of genres and composers</li> </ul> <h2 id=version-231>Version 23.1<a class=headerlink href=#version-231 title="Permanent link">&para;</a></h2> <ul> <li>support for more mpd commands</li> </ul> <h2 id=version-230>Version 23.0<a class=headerlink href=#version-230 title="Permanent link">&para;</a></h2> <ul> <li>add support for the mpd protocol</li> <li>add support for smart playlists</li> <li>playlist and internet stream overhaul</li> </ul> <h2 id=version-222>Version 22.2<a class=headerlink href=#version-222 title="Permanent link">&para;</a></h2> <ul> <li>fix for iTunes 12.1</li> <li>fix misc bugs</li> </ul> <h2 id=version-221>Version 22.1<a class=headerlink href=#version-221 title="Permanent link">&para;</a></h2> <ul> <li>artwork cache</li> <li>some Spotify fixing up</li> </ul> <h2 id=version-220>Version 22.0<a class=headerlink href=#version-220 title="Permanent link">&para;</a></h2> <ul> <li>queue handling improvements</li> <li>added DAAP cache, good for low-power devices like the RPi</li> <li>support for LastFM scrobbling</li> <li>support for .pls playlists</li> <li>added compability with ffmpeg libswresample</li> <li>added options to modify the operation of the SQLite database</li> <li>stop init-rescan/full-rescan from running twice</li> <li>fix misc local audio problems</li> <li>fix some FreeBSD sound timing problems</li> <li>fix segfault on invalid utf8 while sorting</li> <li>fix misc bugs</li> </ul> <h2 id=version-210>Version 21.0<a class=headerlink href=#version-210 title="Permanent link">&para;</a></h2> <ul> <li>filescanner performance enhancements (db transactions)</li> <li>support for queue editing</li> <li>support for showing history</li> <li>compability with libevent 2</li> <li>compability with libav 10</li> <li>support for Spotify</li> <li>fix for Seafile libraries</li> <li>support for permission changes in a library (IN_ATTRIB)</li> <li>some DAAP changes to align with iTunes</li> <li>properly show media kind shares in iTunes</li> <li>support for named pipes/fifos</li> <li>natural sorting and better handling of capitalization</li> <li>introduce .init-rescan and .full-rescan triggers</li> <li>fix for XBMC (libshairplay) crash</li> <li>fix missing songartistid (fixes some remotes)</li> <li>fix bug in m3u scanner</li> <li>ICY metadata fixes</li> </ul> <h2 id=version-200>Version 20.0<a class=headerlink href=#version-200 title="Permanent link">&para;</a></h2> <ul> <li>includes patch against timeouts</li> <li>configurable artwork file names</li> <li>support for Remote 3 and 4</li> <li>preference for album artist if it is available</li> <li>bug fix for certain Airport Express models</li> <li>bug fix for AirFoil Speakers</li> <li>added support for internet radio with m3u</li> <li>fixed fatal error when stopping player</li> <li>m3u and iTunes playlist scanner improvements</li> <li>improved compability with Hyperfine Remote for Android</li> <li>speaker selection and m3u bug fixes</li> <li>Shoutcast (icy) metadata support for internet radio</li> <li>fix for Apple TV update 6.0</li> <li>fix artwork memory leak</li> <li>basic support for podcasts, compilations and audiobooks</li> <li>user can tell file scanner to ignore certain file types</li> <li>fix for metadata on non-Apple airplay devices</li> <li>configurable library names</li> <li>sorting changes, ignore The/A/An</li> <li>fix for TunesRemote SE</li> <li>force library rescan with .force-rescan</li> <li>fix for the Retune remote on Android</li> <li>fix for AirBubble speakers (shairport)</li> <li>support for artwork in iTunes</li> <li>fixed ffmpeg/libav logging</li> <li>logging and documentation adjustments</li> <li>autoselect AirPlay device if none selected</li> <li>support for embedded artwork</li> <li>config option to disable startup scan</li> <li>config option for max volume for AirPlay devices</li> <li>support for embedded platforms without hi-res timers</li> <li>fix for WMA files</li> <li>fixes for video playback</li> <li>other fixes: non apple players, ffmpeg/libav updates...</li> </ul> <h2 id=version-019>Version 0.19<a class=headerlink href=#version-019 title="Permanent link">&para;</a></h2> <ul> <li>more libav 0.7 updates.</li> <li>database speedups.</li> <li>fix for iTunes 30-minute timeout.</li> <li>fixes, big and small.</li> </ul> <h2 id=version-018>Version 0.18<a class=headerlink href=#version-018 title="Permanent link">&para;</a></h2> <ul> <li>add config knob for ALSA mixer channel name.</li> <li>do not elevate privileges for reopening the log file; log file will now be owned by the user forked-daapd runs as.</li> <li>fixes, big and small.</li> </ul> <h2 id=version-017>Version 0.17<a class=headerlink href=#version-017 title="Permanent link">&para;</a></h2> <ul> <li>support for libav 0.7</li> <li>fixes, big and small.</li> </ul> <h2 id=version-016>Version 0.16<a class=headerlink href=#version-016 title="Permanent link">&para;</a></h2> <ul> <li>fix issue with non-UTF-8 metadata while scanning.</li> <li>use proper file size in HTTP streaming code.</li> <li>fix DAAP songlist bug with sort tags.</li> <li>small code fixes.</li> </ul> <h2 id=version-015>Version 0.15<a class=headerlink href=#version-015 title="Permanent link">&para;</a></h2> <ul> <li>add support for sending metadata to AppleTV during AirTunes streaming.</li> <li>support DOS-encoded Remote pairing files.</li> <li>rework album_artist_sort handling.</li> <li>enable RAOP to queue RTSP requests.</li> <li>speedup DAAP &amp; RSP filters processing.</li> <li>speedup DAAP songlist generation.</li> <li>artwork can handle and send out both PNG and JPEG.</li> <li>fixes, big and small.</li> </ul> <h2 id=version-014>Version 0.14<a class=headerlink href=#version-014 title="Permanent link">&para;</a></h2> <ul> <li>sort headers/tags handling improvements.</li> <li>better handling of tags for TV shows.</li> <li>better handling of DRM-afflicted files.</li> <li>configurable IPv6 support.</li> <li>fix scanning of URL files.</li> <li>fixes, big and small.</li> </ul> <h2 id=version-013>Version 0.13<a class=headerlink href=#version-013 title="Permanent link">&para;</a></h2> <ul> <li>add Remote v2 support; Remote v1 is not supported anymore.</li> <li>add per-speaker volume support.</li> <li>implement RAOP retransmission.</li> <li>implement per-device quirks in RAOP.</li> <li>improve compatibility with 802.11g AirPort Express.</li> <li>improve mDNS address resolution, making IPv4 usable again.</li> <li>fix Murmur Hash bug on 32bit platforms.</li> <li>add support for JPEG artwork and alternative filenames.</li> <li>disable session expiration that was causing issues.</li> <li>FFmpeg 0.6 support.</li> <li>fixes, big and small.</li> </ul> <h2 id=version-012>Version 0.12<a class=headerlink href=#version-012 title="Permanent link">&para;</a></h2> <ul> <li>add AirTunes v2 streaming.</li> <li>add Remote support.</li> <li>add gzipped replies.</li> <li>add IPv6 support.</li> <li>check for UTF-8 correctness of metadata.</li> <li>fixes, big and small.</li> </ul> <h2 id=version-011>Version 0.11<a class=headerlink href=#version-011 title="Permanent link">&para;</a></h2> <ul> <li>support iTunes 9.</li> <li>add iTunes XML playlist scanner.</li> <li>add support for TV shows.</li> <li>add FreeBSD and GNU/kFreeBSD support.</li> <li>add support for DAAP groups.</li> <li>add support for artwork.</li> <li>rework metdata extraction, better support for ID3 tags.</li> <li>database code rework.</li> <li>preliminary support for Remote (pairing, browsing).</li> <li>fixes, big and small.</li> </ul> <h2 id=version-010>Version 0.10<a class=headerlink href=#version-010 title="Permanent link">&para;</a></h2> <ul> <li>initial release.</li> </ul> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/owntone/owntone-server target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <script id=__config type=application/json>{"base": "..", "features": ["navigation.tabs", "navigation.top"], "search": "../assets/javascripts/workers/search.f8cc74c7.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src=../assets/javascripts/bundle.f13b1293.min.js></script> <script src=../assets/extra.js></script> </body> </html>