# Changelog

You can subscribe to release announcements by:

- Following [@funkwhale@fosstodon.org](https://fosstodon.org/@funkwhale) on Mastodon
- Subscribing to the following Atom feed: https://dev.funkwhale.audio/funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag

This changelog is viewable on the web at https://docs.funkwhale.audio/changelog.html.

<!-- towncrier -->

## 1.4.0 (2023-12-12)

Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html

Features:

- Add a management command to generate dummy notifications for testing
- Add atom1.0 to node info services (#2085)
- Add basic cypress testing
- Add NodeInfo 2.1 (#2085)
- Add support for Funkwhale UI library.
- Add support for Python 3.12
- Allow moderators to set moderation languages (#2085)
- Allow to set the instances server location (#2085)
- Cache radio queryset into redis. New radio track endpoint for api v2 is /api/v2/radios/sessions/{radiosessionid}/tracks (#2135)
- Create a testing environment in production for ListenBrainz recommendation engine (troi-recommendation-playground) (#1861)
- Generate all nginx configurations from one template
- New management command to update Uploads which have been imported using --in-place and are now
  stored in s3 (#2156)
- Only allow MusicBrainz tagged file on a pod (#2083)
- Prohibit the creation of new users using django's `createsuperuser` command in favor of our own CLI
  entry point. Run `funkwhale-manage fw users create --superuser` instead. (#1288)

Enhancements:

- Add custom logging functionality (#2155)
- Adding typesense container and api client (2104)
- Cache pip package in api docker builds (#2193)
- Connect loglevel and debug mode (#1538)
- Get api version from python package
- Log service worker registration error and add a warning about Firefox SW incompatibility in development mode
- Maintain api version using poetry
- Maloja: Submit album artists and duration and allow to disable server side metadata fixing
- Replace pytz with zoneinfo in the API
- Speed up linting and type-checking by using cache
- Split front large bundles into smaller chunks
- Support boolean config fields in plugins

Bugfixes:

- `postgres > db_dump.sql` cannot be used if the postgres container is stopped. Update command.
- Avoid troi radio to give duplicates (#2231)
- Do not cache all requests to avoid missing updates #2258
- Fix broken nginx templates for docker setup (#2252)
- Fix help messages for running scripts using funkwhale-manage
- Fix missing og meta tags (#2208)
- Fix multiarch docker builds #2211
- Fix regression that prevent static files from being served in non-docker-deployments (#2256)
- Fixed an issue where the copy button didn't copy the Embed code in the embed modal.
- Fixed an issue with the nginx templates that caused issues when connecting to websockets.
- Fixed development docker setup (2102)
- Fixed development docker setup (2196)
- Fixed embedded player crash when API returns relative listen URL. (#2163)
- Fixed issue with regular expression in embed.
- Make Artist ordering by name case insensitive
- Make sure build requirements for ujson are met
- Make sure embed codes generated before 1.3.0 are still working
- Make sure funkwhale_api package and metadata are available for docs
- Make sure meta tags link to embedded player correctly
- Merge nginx configs for docker production and development setups (#1939)
- Updated links to the Funkwhale website in the UI. (#2235)
- Use correct data field for rate limiting identity field (#2248)

Documentation:

- Add missing `has_mbid` requirement to quality filter spec.
- Add spec for user following.
- Added CoC link to nodeinfo endpoint spec.
- Added multi-artist support spec.
- Added new collections spec.
- Added NodeInfo 2.1 specification
- Archived the pre-1.0 changelog
- Updated nodeinfo spec to include usage statistics.
- Updated the Nodeinfo 2 spec to address feedback from implementation.

Other:

- Add build metadata script
- Don't run CI on branch containing stable or develop
- Fix CI deploy docs job after stable branch merge
- Format api container file
- Lint api code using pylint
- Make renovate not pinning the python version to the latest one
- Rename CHANGELOG to CHANGELOG.md
- Replace docs scripts with make
- Rework the CI pipeline
- Use buildx bake in docker job

Removal:

- Drop support for python3.7
- This release doesn't support Debian 10 anymore. If you are still on Debian 10, we recommend
  updating to a later version. Alternatively, install a supported Python version (>= Python 3.8). Python 3.11 is recommended.

Contributors to our Issues:

- AMoonRabbit
- Alexandra Parker
- ChengChung
- Ciarán Ainsworth
- Georg Krause
- Ghost User
- Johann Queuniet
- JuniorJPDJ
- Kasper Seweryn
- Kay Borowski
- Marcos Peña
- Mathieu Jourdan
- Nicolas Derive
- Virgile Robles
- jooola
- petitminion
- theit8514

Contributors to our Merge Requests:

- AMoonRabbit
- Alexander Dunkel
- Alexander Torre
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Kay Borowski
- Marcos Peña
- Mathieu Jourdan
- Philipp Wolfer
- Virgile Robles
- interfect
- jooola
- petitminion

Committers:

- Aitor
- Alexander Dunkel
- alextprog
- Aznörth Niryn
- Ciarán Ainsworth
- dignny
- drakonicguy
- Fun.k.whale Trad
- Georg krause
- Georg Krause
- Jérémie Lorente
- jo
- jooola
- josé m
- Julian-Samuel Gebühr
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Mathieu Jourdan
- Matteo Piovanelli
- Matyáš Caras
- MhP
- omarmaciasmolina
- petitminion
- Philipp Wolfer
- ppom
- Quentin PAGÈS
- rinenweb
- Thomas
- Transcriber allium

## 1.3.4 (2023-11-16)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Bugfixes:

- Remove dangling dependency howler

Documentation:

- Fix a redirect loop on documentation for moderators

Contributors to our Merge Requests:

- Georg Krause
- Thomas

Committers:

- Georg Krause

## 1.3.3 (2023-09-07)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Bugfixes:

- Revert changed logging to fix crashes

Contributors to our Issues:

- Alexandra Parker
- Aurelien Vaillant
- ChengChung
- Ciarán Ainsworth
- Georg Krause
- Johann Queuniet
- Kasper Seweryn
- Mathieu Jourdan
- Nicolas Derive
- Puniko Nyan
- Thomas
- petitminion
- philip ballinger

Contributors to our Merge Requests:

- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- jooola
- petitminion

## 1.3.2 (2023-09-01)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Enable sourcemaps for production builds
- Use logger composable instead of window.console

Bugfixes:

- Clear shuffled id list on queue clear (#2192)
- Fetch the nodeinfo endpoint from .well-known/nodeinfo when checking instance availability
- Fix instance checking its own availability (#2199)
- Fix multiarch docker builds #2211
- Fix ordering when querystring contains `+` prefix
  Resolve multiple updates to ordering fields
- Fix password reset via email
- Make podcast episode pagination reactive (#2205)
- Render HTML in podcast short description (#2206)
- Resolve race condition regarding axios when initializing the frontend
  Prevent sending same language setting to backend multiple times

Documentation:

- Fixed incorrect upgrade instructions link in docs.

Contributors to our Issues:

- Ciarán Ainsworth
- Georg Krause
- Kasper Seweryn
- Kay Borowski
- Marcos Peña
- Mathieu Jourdan
- Virgile Robles
- codl
- jooola
- petitminion
- tinglycraniumplacidly
- unkn0wwn52

Contributors to our Merge Requests:

- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Virgile Robles
- codl
- jooola
- petitminion

Committers:

- Ciarán Ainsworth
- codl
- Georg Krause
- jo
- Kasper Seweryn
- petitminion

## 1.3.1 (2023-06-27)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Bugfixes:

- Dynamically add report targets to the map to avoid missing keys (#2121)
- Fix location of the nginx config template for docker deployments (#2146)
- Fix pagination on search page (#2134)
- Fix Prune skipped uploads is OOM killed (#2136)
- Fixed Fomantic UI dropdown messing with Vue internals in radio builder (#2142)
- Fixed premature login redirect on podcast detail page (#2155)
- Fixed stale data in indexedDB after logout (#2133)
- Make sure dependency pins are working with pip install (Restores python3.7 support)
- Make sure embed codes generated before 1.3.0 are still working
- Make sure the SPA Manifest is fetched using the right protocol (#2151)
- Moved modals above all content (#2154)
- Raise SystemExit exception in API manage.py script
- Remove track from cache when it gets disposed outside of the cache handler (#2157)
- Standardize instanceUrl value in instance store (#2113)
- Fix for banner images not being served on pods.
- Fixed PWA Window theme color.

Documentation:

- Fix instructions for using custom nginx configurations in our documentation

Other:

- Don't run CI on branch containing stable or develop

Contributors to our Issues:

- AMoonRabbit
- Asier Iturralde Sarasola
- Bertille D.
- Casuallynoted
- Ciarán Ainsworth
- Daniel Jeller
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Mathieu Jourdan
- NaiveTub
- Ricardo
- Virgile Robles
- nouts
- petitminion

Contributors to our Merge Requests:

- AMoonRabbit
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- jooola
- petitminion

Committers:

- AMoonRabbit
- Georg Krause
- jo
- JuniorJPDJ
- Kasper Seweryn
- Moon Rabbit
- Petitminion

## 1.3.0 (2023-06-01)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Update instructions:

- If you are running the docker deployment, make sure to update our compose file.
  In this small example we show you how to save the old config and update it
  correctly:

  ```
  export FUNKWHALE_VERSION="1.3.0"
  cd /srv/funkwhale
  docker-compose down
  mv docker-compose.yml docker-compose.bak
  curl -L -o /srv/funkwhale/docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml"
  ```

  :::{note}
  If you need to customize your nginx template, e.g. to work around [problems with Docker's resolver](https://docs.funkwhale.audio/admin/external-storages.html#no-resolver-found), you can mount your
  custom nginx configuration into the container. Uncomment the commented volumes in the `nginx` section of your `docker-compose.yml`.
  Additionally you need to update the paths in `nginx/funkwhale.template`.
  Replace all occurrences of `/funkwhale` by `/usr/share/nginx/html`.
  This loads the templates from your `nginx` folder and overrides the template files in the Docker container.
  :::

  ```
  docker-compose up -d
  ```

- The Docker instructions now use the updated Docker compose plugin. If you previously used the `docker-compose` standalone installation, do the following while upgrading:

  1. Download the [Docker compose plugin](https://docs.docker.com/compose/install/linux/#install-using-the-repository)
  2. Stop your containers using the **docker-compose** syntax.

  ```sh
  docker compose down
  ```

  3. Bring the containers back up using the **docker compose** syntax.

  ```sh
  docker compose up -d
  ```

  After this you can continue to use the **docker compose** syntax for all Docker management tasks.

- Upgrade Postgres to version 15. [Make sure to migrate!](https://docs.funkwhale.audio/administrator/upgrade/docker.html#upgrade-the-postgres-container)
- With this update Funkwhale starts using poetry to maintain its dependencies. We therefore recommend
  removing the old virtualenv by running `rm -rf /srv/funkwhale/virtualenv`.

Features:

- Add a management command to create a new library for a user
- Add Gitpod configuration and guide
- Add Sentry SDK to collect #1479
- Prepare API for the upcoming version 2
- Rewrite player to be based on Web Audio API

Enhancements:

- Add a celery task to scan remote library (#1712)
- Add coverage report for Frontend Tests
- Add hint which serializer is used for OembedView (#1901)
- Add music visualizer (#1135)
- Add playable tracks to gitpod instance
- Add playlists radio to search page (#1968)
- Add proper serialization for TextPreviewView (#1903)
- Add python debug and test support for gitpod
- Add Serializer for SpaManifest endpoint
- Add support for python 3.11
- Added proper serializers for the rate-limit endpoint.
- Added type hints to the API.
- Adding support for play all radio in search result page (#1563)
- All administrator documentation has been rewritten to improve clarity and update outdated information.
- Allow arbitrary length names for artists, albums and tracks
- Allow installing the funkwhale_api package
- Allow using default browser dark mode and update UI dynamically on change
- Apply migrations on API container start (!1879)
- Automatically fetch next page of tracks (#1526)
- Build frontend natively for cross-arch docker images
- Change unmaintained PyMemoize library to django-cache-memoize
  to enable Python 3.10 support
- Cleaned up frontend docker container
- Cleanup Gitlab CI and Dockerfiles (!1796)
- Create the funkwhale-manage entrypoint in the api package
- Created migration guide for the deprecated all-in-one docker container.
- Don't buffer python stdout/err in docker
- Don't compile python byte code in docker
- Don't use poetry in production deployments
- Drop direct dependency on pyopenssl (#1975)
- Exclude /api/v1/oauth/authorize from the specs since its not supported yet (#1899)
- Fix openapi specs for user endpoints (#1892, #1894)
- Fix Serializer for inline channel artists (#1833)
- Fix specs for ListenViewSet (#1898)
- Handle PWA correctly and provide better cache strategy for album covers (#1721)
- Improve docker caching
- Improve specification of LibraryFollowViewSet (#1896)
- Install API python package in docker image
- Make CI always run all tests on protected branches.
- Make mutations endpoint appear in openapi specs
- Make Python 3.10 tests in CI mandatory
- Make sure ChannelViewSet always has a serializer (#1895)
- Migrate to new queue system from old localStorage keys
- Migrate to Vue 3
- Migrate to vue-i18n (#1831)
  Fix locale changing (#1862)
- Migrated to sphinx-design.
- New task checking if remote instance is reachable to avoid playback latence (#1711)
- OAuth Application client secrets are now hashed before storing them to the DB. Those are only displayed once from now on!
- Parameterize the default S3 ACL when uploading objects. (#1319)
- Pin Alpine package versions in API Dockerfile (fixes part of CI build issues).
- Prefer using the funkwhale-manage entrypoint
- Prevent running two pipelines for MRs
- Random and less listened radio filter out un-owned content on library section (#2007)
- Refactor node info endpoint to use proper serializers
- Refactor SettingsView to use a proper serializer
- Remove unnecessary or wrong `is` keyword usage from backend
- Rename OpenAPI schema's operation ids for nicer API client method names.
- Replace django-channels package with web socket implementation from @vueuse/core (#1715)
- Retry fetching new radio track 5 times if error occurred before resetting radio session (#2022)
- Rewrite embedded player to petite-vue
- Split DATABASE_URL into multiple configuration variables
- The ListenBrainz plugin submits the track duration
- Update Django OAuth Toolkit to version 2, ref #1944
- Update migration after django update (#1815)
- Update upload status when import fails (#1999)
- Updated the installation guides to make installation steps clearer.
- Upgrade docker base image to alpine 3.17
- Use proper serializer for Search endpoint (#1902)

Refactoring:

- Instead of requesting the right spa content from the API using a middleware we now serve the
  Frontend directly with nginx and only proxy-forward for API endpoints
- Replace django-rest-auth with dj-rest-auth (#1877)

Bugfixes:

- Allow enabling systemd funkwhale.target
- Allow playback of media from external frontend (#1937).
- Allow summary field of actors to be blank. This leaves actors valid that have a blank (`""`) summary field and allows follows from those.
- Catch ValueError on radio end (#1596)
- Channel overview was displaying foreign tracks (#1773) (1773)
- Docker setup: do not export the API port 5000 publicly
- Fix adding same track multiple times (#1933)
- Fix artist name submission in Maloja plugin
- Fix changing visualizer CORS error (#1934).
- Fix content form autofocus despite `autofocus` prop being set to `false` (#1924)
- Fix CSP header issues
- Fix CSP issue caused by django-channels package (#1752)
- Fix docker API image building with removing autobahn workaround version pin
- Fix docker builds on armv7
- Fix docker nginx entrypoint
- Fix editing playlist tracks (#1362)
- Fix embedded player not working on social posts (1946)
- Fix favorite button in queue
- Fix fetching pages of albums in album detail view (#1927)
- Fix front album tracks count translation
- Fix global keyboard shortcuts firing when input is focused (#1876)
- Fix lots of problems in debian installation guide
- Fix media directory nginx routing error in front docker container introduced in !1897
- Fix OAuth login (#1890)
- Fix play button in albums with multi-page volumes (#1928)
- Fix player closing when queue ends (#1931)
- Fix postgres connection details in docker setup
- Fix purging of dangling files #1929
- Fix remote search (#1857)
- Fix search by text in affected views (#1858)
- Fix timeout on spa manifest requests
- Fix track table showing all tracks and double pagination in some cases (#1923)
- Fix user requests and reports filtering (#1924)
- Fix validity issues in openapi/swagger spec files (#1171)
- Fixed an issue which caused links in Markdown forms to not render correctly. (#2023)
- Fixed login redirect (1736)
- Fixed mobile player element widths (#2054)
- Fixed remote subscription form in Podcast and search views (#1708)
- Fixed upload form VUE errors (#1738) (1738)
- Fixes an issue which made it possible to download all media files without access control (#2101)
- Fixes channel page (#1729) (1729)
- Fixes development environment set-up with docker (1726)
- Fixes embed player (#1783) (1783)
- Fixes service worker (#1634)
- Fixes track listenings not being sent when tab is not focused
- Hide create custom radio to un-authenticated users (#1720)
- Improve signal handling for service and containers
- Move api docker hardcoded env vars in the settings module
- Prefer str over dict for the CACHE_URL api setting

  This fix the ability to reuse the CACHE_URL with other settings such as
  CELERY_BROKER_URL.

- Remove trailing slash from reverse proxy configuration
- Remove unused Footer component (#1660)
- Remove usage of deprecated Model and Serializer fields (#1663)
- Resolved an issue where queue text with mouse over has dark text on dark background (#2058) (2058)
- Skip refreshing local actors in celery federation.refresh_actor_data task - fixes disappearing avatars (!1873)

Documentation:

- Add ability to translate documentation into multiple languages
- Add generic upgrade instructions to Docker postgres documentation (#2049)
- Add restore instructions to backup docs (#1627).
- Add systemd update instructions to Debian upgrade instructions (#1966)
- Added Nginx regeneration instructions to Debian update guide (#2050)
- Added virtualenv upgrade instructions for Debian (#1562).
- Cleaned up documentation
- Document the new login flow of the CLI-tool (#1800)
- Documented LOGLEVEL command (#1541).
- Documented the `NGINX_MAX_BODY_SIZE` .env variable (#1624).
- Fix broken links in CHANGELOG (#1976)
- Harden security for debian install docs
- Remove unnecessary postgres variable in Docker migration guide (#2124).
- Rewrote documentation contributor guide.
- Rewrote the architecture file (#1908)
- Rewrote the federation developer documentation (#1911)
- Rewrote the plugins documentation (#1910)
- Rewrote translators file
- Updated API developer documentation (#1912, #1909)
- Updated CONTRIBUTING guide with up-to-date documentation. Created layout in documentation hub.

Other:

- Add a CI job to check if changelog snippet is available
- Add CI broken links checker
- Add pre-commit hooks
  - flake8
  - black
  - isort
  - pyupgrade
  - prettier
  - codespell
- Add pre-commit to development tools
- Align the openapi spec to the actual API wherever possible
- Cache lychee checked urls for 1 day in CI
- Fix api tests warnings by renaming fixtures
- Fix permissions for build artifacts
- Fix shell scripts lint errors
- Format api pyproject.toml
- Format or fix files using pre-commit

  - Upgrade code to >=python3.7
  - Fix flake8 warnings
  - Fix spelling errors
  - Format files using black
  - Format files using isort
  - Format files using prettier

- Move api tools config to pyproject.toml
- Move database url composition from custom script to django settings
- Remove docker_all_in_one_release ci job
- Rename api composer/django/ dir to docker/
- Unpin asgiref in API dependencies
- Use vite for building the frontend, #1644

Deprecation:

- Deprecate the api manage.py script in favor of the funkwhale-manage entrypoint
- That's the last minor version series that supports python3.7. Funkwhale 1.4 will remove support for
  it. #1693
- The automatically generated `DATABASE_URL` configuration in the docker setup is deprecated, please
  configure either the `DATABASE_URL` environment variable or the `DATABASE_HOST`, `DATABASE_USER` and
  `DATABASE_PASSWORD` environment variables instead.

Removal:

- This release removes support for Python 3.6. Please make sure you update your python version before
  Updating Funkwhale!

Committers:

- Agate
- Aina Hernàndez Campaña
- AMoonRabbit
- Anton
- bruce diao
- Bruno Talanski
- ButterflyOfFire
- Çağla Pickaxe
- Ciarán Ainsworth
- Dignified Silence
- dignny
- Éilias McTalún
- EorlBruder
- Fedi Funkers
- Georg Krause
- ghose
- Henri Dickson
- Jacek Pruciak
- Jasper Bogers
- Jhoan Sebastian Espinosa Borrero
- jo
- jooola
- Julian Rademacher
- JuniorJPDJ
- Kasper Seweryn
- Keunes
- Kisel1337
- Laurin W
- Marcos Peña
- Matyáš Caras
- Michael Long
- nztvar
- oki
- Petitminion
- Philipp Wolfer
- poeppe
- Porrumentzio
- ppom
- Reinhard Prechtl
- Sky
- Sporiff
- Stuart Begley-Miller
- @ta
- Thomas
- Till Robin Zickel
- tobifroe
- wvffle

Contributors to our Issues:

- AMoonRabbit
- Agate
- Artem Anufrij
- ChengChung
- Ciarán Ainsworth
- Creak
- Eric Mesa
- Georg Krause
- Hans Bauer
- HurricaneDancer
- Jakob Schürz
- Jucgshu
- Julian-Samuel Gebühr
- JuniorJPDJ
- Kasper Seweryn
- Keunes
- Laser Lesbian
- Laurin W
- Marco
- Marcos Peña
- Martin Giger
- Mathieu Jourdan
- MattDHarding
- Meliurwen
- Micha Gläß-Stöcker
- MichaelBechHansen
- Nathan Mih
- Nicolas Derive
- Nolan Darilek
- Philipp Wolfer
- Porrumentzio
- Rodion Borisov
- Sam Birch
- Sky Leite
- TheSunCat
- Thomas
- Tobias Frölich
- Tony Wasserka
- Vincent Riquer
- Virgile Robles
- dddddd-mmmmmm
- gerry_the_hat
- getzze
- heyarne
- jake
- jooola
- jovuit
- nouts
- petitminion
- ppom
- pullopen
- resister
- silksow
- troll

Contributors to our Merge Requests:

- AMoonRabbit
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Laurin W
- Marcos Peña
- Mathieu Jourdan
- Nicolas Derive
- Philipp Wolfer
- Rodion Borisov
- Thomas
- Tobias Frölich
- getzze
- jooola
- mqus
- petitminion
- poeppe

## 1.2.10 (2023-03-17)

Bugfixes:

- Fixes a security vulnerability that allows to download all media files without access control #2101

Contributors to our Issues:

- Georg Krause
- JuniorJPDJ

Special thanks to Conradowatz for reporting the vulnerability

Committers:

- JuniorJPDJ

## 1.2.9 (2022-11-25)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Bugfixes:

- Ensure index.html files get loaded with UTF-8 encoding
- Fixed invitation reuse after the invited user has been deleted (#1952)
- Fixed unplayable skipped upload (#1349)

Committers:

- Georg Krause
- Marcos Peña
- Philipp Wolfer
- Travis Briggs

Contributors to our Issues:

- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Mathieu Jourdan
- Micha Gläß-Stöcker
- fuomag9
- gammelalf
- myOmikron
- petitminion

Contributors to our Merge Requests:

- Georg Krause
- JuniorJPDJ
- Marcos Peña
- Philipp Wolfer
- fuomag9

## 1.2.8 (2022-09-12)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Features:

- Add Sentry SDK to collect errors at the backend

Bugfixes:

- Fix exponentially growing database when using in-place-imports on a regular base #1676
- Fix navigating to registration request not showing anything (#1836)
- Fix player cover image overlapping queue list
- Fixed metadata handling for Various Artists albums (#1201)
- Fixed search behaviour in radio builder's filters (#733)
- Fixed unpredictable subsonic search3 results (#1782)

Committers:

- Ciarán Ainsworth
- Georg Krause
- Marcos Peña
- Mathias Koehler
- wvffle

Contributors to our Issues:

- AMoonRabbit
- Agate
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Kelvin Hammond
- Marcos Peña
- Meliurwen
- Micha Gläß-Stöcker
- Miv2nir
- Sam Birch
- Tolriq
- Tony Wasserka
- f1reflyyyylmao
- heyarne
- petitminion
- troll

Contributors to our Merge Requests:

- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- interru

## 1.2.7 (2022-07-14)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Bugfixes:

- Fixed libre.fm plugin not submitting scrobbles (#1817)

Committers:

- Georg Krause
- Marcos Peña

Contributors to our Issues:

- Ciarán Ainsworth
- Marcos Peña

Contributors to our Merge Requests:

- Georg Krause
- Marcos Peña

## 1.2.6 (2022-07-04)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Bugfixes:

- Channel overview was displaying foreign tracks (#1773)
- Fixed login form focusing reset password link instead of next input (#1373)
- Fixed missing album contextual menu (#1791)
- Fixed single listening submission when repeating a song (#1312)
- Fixed subsonic createPlaylist's endpoint doesn't update playlist (#1263)
- Resolve timeouts if nodeinfo and service actor is not known (#1714)

Other:

- Replaced references to #funkwhale-troubleshooting with #funkwhale-support

Committers:

- Georg Krause
- Marcos Peña
- Petitminion
- wvffle

Contributors to our Issues:

- jeweet
- wvffle
- Georg Krause
- Marcos Peña
- AMoonRabbit
- Micha Gläß-Stöcker
- Ciarán Ainsworth
- heyarne
- Agate
- JuniorJPDJ
- MichaelBechHansen
- ooZberg
- Esras .
- PhieF
- Petitminion

Contributors to our Merge Requests:

- wvffle
- Georg Krause
- Marcos Peña
- Petitminion

## 1.2.5 (2022-05-07)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Parameterize the default S3 ACL when uploading objects. (#1319)

Bugfixes:

- Fix stopped player to not show 00:00 when loading a track (#1432)
- Fixes channel page (#1729) (1729)

Committers:

- Georg Krause
- Marcos
- MattDHarding
- Stuart Begley-Miller

Contributors to our Issues:

- Agate
- Beto Dealmeida
- Cam Sweeney
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- Mathieu Jourdan
- MattDHarding
- Micha Gläß-Stöcker
- Stuart Begley-Miller
- Tony Wasserka
- jovuit
- petitminion
- pullopen

Contributors to our Merge Requests:

- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- MattDHarding
- PhieF
- Stuart Begley-Miller
- petitminion

## 1.2.4 (2022-04-23)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Hand cursor now displayed over artist and album cards

Bugfixes:

- Fixes docs' SMTP URI configuration (#1749) (1749)

Documentation:

- The documentation is now available in two versions: Develop and Stable

Contributors to our Issues:

- Beto Dealmeida
- Cam Sweeney
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- Mathieu Jourdan
- Micha Gläß-Stöcker
- petitminion

Contributors to our Merge Requests:

- Georg Krause
- JuniorJPDJ
- Marcos Peña
- petitminion

Committers:

- Georg Krause
- Marcos Peña
- MattDHarding

## 1.2.3 (2022-03-18)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Added support for all cover sources in the embedded player (#1697).
- Change unmaintained PyMemoize library to django-cache-memoize
  to enable Python 3.10 support

Bugfixes:

- Catch ValueError on radio end (#1596)
- Fix bug that prevents users from creating a new oauth application (#1706)
- Fix failed track adding to playlist being silent (#1020)
- Fix recently added radio not working has expected (#1674)
- Fixed an issue where you couldn't load the details page for tracks with no associated album (#1703)
- Fixed library visibility dropdown (#1384)
- In playlist editor can now click outside the trashcan but inside the button to delete entry (#1348)

Contributors to our Issues:

- Agate
- Baudouin Feildel
- Christoph Pomaska
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Mathieu Jourdan
- MattDHarding
- Micha Gläß-Stöcker
- dnikolov
- jovuit
- petitminion

Contributors to our Merge Requests:

- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- MattDHarding
- petitminion

Committers

- Ciaran Ainsworth
- Georg Krause
- JuniorJPDJ
- MattDHarding
- Petitminion
- Reinhard Prechtl

## 1.2.2 (2022-02-04)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Bugfixes:

- Fix an issue where the tracks tab in a library doesn't show any tracks (#1683)
- Fix an issue with the embedded player not showing any content (#1675)
- Fix broken instance description if it contains a line break #1673

Dependency Updates:

- Update dependency vue-template-compiler to 2.6.14
- Update dependency vue to ^2.6.14
- Update dependency vuex-persistedstate to ^2.7.1
- Update dependency vuedraggable to ^2.24.3
- Update dependency vue-lazyload to ^1.3.3
- Update dependency vue-plyr to ^5.1.3
- Update dependency vue-upload-component to ^2.8.22
- Update dependency vue-gettext to ^2.1.12
- Update dependency showdown to ^1.9.1
- Update dependency js-logger to ^1.6.1
- Update dependency register-service-worker to ^1.7.2
- Update dependency howler to ^2.2.3
- Update dependency fomantic-ui-css to ^2.8.8
- Update dependency diff to ^4.0.2
- Update dependency axios-auth-refresh to ^2.2.8

Contributors to our Issues:

- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- Mathieu Jourdan
- Micha Gläß-Stöcker
- Ricardo
- petitminion

Contributors to our Merge Requests:

- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña

Committers

- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Keunes
- Marcos Peña

## 1.2.1 (2022-01-06)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Bugfixes:

- Fix Pipeline for stable release builds (#1652)
- Fix remote content page (#1655)

Contributors to our Issues:

- Ciarán Ainsworth
- Georg Krause
- Jakob Schürz
- Mathieu Jourdan
- Micha Gläß-Stöcker
- petitminion

Contributors to our Merge Requests:

- Georg Krause

Committers:

- Dignified Silence
- Georg Krause
- JuniorJPDJ
- nztvar

## 1.2.0 (2021-12-27)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Due to a bug in our CI Pipeline, you need to download the frontend artifact here: https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download

If you are running the All-in-One-Container since a longer time, you probably need to manually migrate your database information. If that's the case, you will get a message like this:

`DETAIL: The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 13.5.`

Make sure the Funkwhale version is set to `1.1.4` in `docker-compose.yml`. Now you can run this command to dump the database into a file:

`docker-compose exec -T funkwhale pg_dump -c -U funkwhale > "db.dump"`

Now you can update the Funkwhale version in `docker-compose.yml` to `1.2.0`. Additionally you should save your `data` directory, eg by running `mv data data.bak && mkdir data`. Stop Funkwhale and start it again with the new version, by using `docker-compose down && docker-compose up -d`. This will initialize a fresh DB and applies all migrations. Now you can restore your database with the following command: `cat db.dump | docker-compose exec -T funkwhale psql -U funkwhale`. That's it, enjoy!

Features:

- Implemented awesome recently added radio (part of #1390)
- Rework the instance about page (#1376)
- Made changes to the track table to make it more visibly pleasing

Enhancements:

- Add linting for Frontend code (#1602)
- Add xmlns:content to feed schemas fixes #1535
- Add a Maloja plugin to submit listenings
- Add artist cover art in subsonic API response (#1528)
- Allow listen activities privacy level to be set public
- Allow running multi-container setup on non-root user inside docker (!1375) (fixes #1334)
- Change volume dynamic range from 60dB to 40dB (fixes #1544)
- Change Start Radio to Play Radio (#1400)
- Display toast when subsonic password is copied (#1496)
- Expose more metadata in Subsonic's getAlbumList endpoint (#623)
- ListenBrainz: Submit media player and submission client information
- Make "play in list" the default when interacting with individual tracks (#1274)
- Prevent an uncontrolled exception when uploading a file without tags, and prints user friendly message (1275)
- Remove deprecated JWT Authentication (#1108) (1108)
- Remove Raven SDK to report errors to Sentry (#1425) (1425)
- Replace psycopg2-binary with psycopg2 (#1513)

Bugfixes:

- Add worker-src to nginx header to prevent issues (#1489)
- Enable stepless adjustment of the volume slider (!1294)
- Fix an error in a Subsonic methods that return lists of numbers/strings like getUser
- Fix showing too long radio descriptions (#1556)
- Fix X-Frame-Options HTTP header for embed and force it to SAMEORIGIN value for other pages (fix #1022)
- Fix before last track starts playing when last track removed (#1485)
- Fix delete account button is not disabled when missing password (#1591)
- Fix omputed properties already defined in components data (#1649)
- Fix the all in one docker image building process, related to #1503
- Fix crash in album moderation interface when missing cover (#1474)
- Fix subsonic scrobble not triggering plugin hook (#1416)
- Improve formatting of RSS episode descriptions (#1405)
- Only suggest typed tag once if it already exists
- Partially fixed playing two tracks at same time (#1213)
- Revert changes that break mobile browser playback (#1509)
- Sanitize remote tracks' saving locations with slashes on their names (#1435)
- Show embed option for channel tracks (#1278)
- Store volume in logarithmic scale and convert when setting it to audio (fixes #1543)
- Use global Howler volume instead of setting it separately for each track (fixes #1542)

Documentation:

- Add email configuration to the documentation (#1481)
- Add server uninstallation documentation (\!1314)
- Document location of cli env file on macOS (\!1354)
- Fix broken backup documentation (#1345)
- Refactore installation documentation and other small documentation adjustments (\!1314)
- Add User documentation for built-in plugins

Other:

- Create stable branch, master is now deprecated and will be removed in 1.3 (#1476)

Committers:

- Alexandra Parker
- Alyssa Ross
- appzer0
- Arthur Brugière
- Asier Iturralde Sarasola
- bittin
- Blopware
- Brian McMillen
- Christoph Pomaska
- Ciaran Ainsworth
- Ciarán Ainsworth
- Classified
- Connor Hay
- Damian Szetela
- David Marzal
- Deleted User
- Dignified Silence
- Dominik Danelski
- egon0
- Erik Präntare
- Georg Abenthung
- Georgios B
- Georgios Brellas
- Georg Krause
- ghose
- greengekota
- heyarne
- ian Vatega
- Janek
- jovuit
- JuniorJPDJ
- Konstantinos G
- manuelviens
- Manuel Viens
- Marcos
- Marcos Peña
- Martin Giger
- Matthew J
- Micha Gläß-Stöcker
- petitminion
- Petitminion
- Philipp Wolfer
- Porrumentzio
- Quentin PAGÈS
- Raphael Lullis
- Riccardo Sacchetto
- Romain Failliot
- Rubén Cabrera
- Ryan Harg
- Sergio Varela
- SpcCw
- Stefano Pigozzi
- Thomas
- Tony Simoes
- Tony Wasserka
- vachan-maker
- Virgile Robles

Contributors to our Issues:

- AMoonRabbit
- Agate
- Antoine POPINEAU
- Arthur Brugière
- Ciarán Ainsworth
- Connor Hay
- Creak
- David Marzal
- Georg Krause
- Gerhard Beck
- Greg Poole
- JuniorJPDJ
- Kuba Orlik
- Lunar Control
- Marcos Peña
- Mateusz Korzeniewski
- Mathieu Jourdan
- Micha Gläß-Stöcker
- Philipp Wolfer
- Porrumentzio
- Thomas
- Tony Wasserka
- Ville Ranki
- arkhi
- heyarne
- interfect
- jovuit
- mal
- petitminion
- vachan-maker

Contributors to our Merge Requests:

- Agate
- Arthur Brugière
- Ciarán Ainsworth
- Connor Hay
- David Marzal
- Distopico
- Fanyx
- Georg Abenthung
- Georg Krause
- Janek
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Mathieu Jourdan
- Matthew J.
- Micha Gläß-Stöcker
- Philipp Wolfer
- Thomas
- Tony Wasserka
- heyarne
- jovuit
- petitminion
- thanksd

## 1.1.4 (2021-08-02)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

- Pinned version of asgiref to avoid trouble with latest release. For further information, see #1516

## 1.1.3 (2021-08-02)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Test better tagging of Docker Images (#1505)

Bugfixes:

- Fix the scrobbler plugin submitting literal "None" as MusicBrainz ID (#1498)
- Add worker-src to nginx header to prevent issues (#1489)
- Only suggest typed tag once if it already exists
- Implement access control on the moderation views (#1494)
- Prevent open redirect on login (#1492)

## 1.1.2 (2021-05-19)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Added modal to prompt users to log in when subscribing to channels (#1296)

Bugfixes:

- Added missing is_playable serializer for the tracks endpoint.
- Fixed minor graphical bug where loaders would appear white in dark theme (#1442)
- Fixed systemd unit for funkwhale-worker (#1160)
- Several minor fixes for the Frontend

## 1.1.1 (2021-04-13)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Improve UI consistency in artist tracks (#1286)
- Adds year to album's card and album's base UI

Bugfixes:

- Fix playback issues when pausing close the the end of a track (#1324)
- Fix tracks playing in the background without the ability to control them (#1213) (#1387)
- Fixed track playback indicator to reset on queue end (#1380)
- Frontend build tooling is less dependent on `npm` or `yarn` being used (!1285)
- Fixed a small discrepancy to the subsonic api 1374

## 1.1 (2021-03-10)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Add number of tracks and discs of an album to API (#1238)
- Add spacing after "Play all" button in playlist view (!1271)
- Added a ListenBrainz plugin to submit listenings
- Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294)
- Added new search functions to allow users to more easily search for podcasts in the UI.
- Added padding to volume slider to ease mouse control (#1241)
- Logarithmic scale for volume slider (#1222)
- More user-friendly subsonic tokens (#1269)
- Remove manual entry of Import Reference on front-end import (#1284)
- Support AIFF file format (#1243)

Bugfixes:

- "Add check for empty/null covers (#1281)"
- Added an album filter to fix problem where channel entries would show up in the wrong series (#1282)
- Avoid broken Faker version (#1323)
- Changed audio format detection to happen via sniffing and not file extensions (#1274)
- Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289)
- Fix delete library modal closing immediately (#1272)
- Fix public shared remote library radio button being disabled (#1292)
- Fixed an issue that prevented disabling plugins
- Fixed an issue where channel albums don't show up in the album search (#1300)
- Fixed an issue where modals would prevent users being able to interact with channels (#1295)
- Update MediaSession metadata for initially loaded track (#1252)
- Update playback position slider also when track is paused (#1266)
- Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342
- Update pleroma JSON-LD Schema (#1341)
- Pin twisted version to 20.3.0

Contributors to this release (development, documentation, reviews):

- Adam Novak
- Agate
- alemairebe
- Alicia Blasco Leon
- anonymous
- Amaranthe
- appzer0
- Arne
- Asier Iturralde Sarasola
- Christian Paul
- Ciarán Ainsworth
- Daniel
- David
- Dominik Danelski
- Eorn le goéland
- Eleos
- Erik Duxstad
- Esteban
- Fred Uggla
- Freyja Wildes
- Georg Krause
- ghose
- hellekin
- heyarne
- interfect
- Jess Jing
- Johannes H.
- jovuit
- marzzzello
- Meliurwen
- Mehdi
- Nitai Bezerra da Silva
- Philipp Wolfer
- Pierre Couy
- Porrumentzio
- Reg
- Robert Kaye
- Rubén Cabrera
- Silver Fox
- Snack Capt
- SpcCw
- Strom Lin
- vicdorke
- x

## 1.1-rc2 (2021-03-01)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Bugfixes:

- Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342
- Update pleroma JSON-LD Schema (#1341)
- Revert fork replacement of http-signature since official package breaks federation
- Pin twisted version to 20.3.0

## 1.1-rc1 (2021-02-24)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Add number of tracks and discs of an album to API (#1238)
- Add spacing after "Play all" button in playlist view (!1271)
- Added a ListenBrainz plugin to submit listenings
- Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294)
- Added new search functions to allow users to more easily search for podcasts in the UI.
- Added padding to volume slider to ease mouse control (#1241)
- Logarithmic scale for volume slider (#1222)
- More user-friendly subsonic tokens (#1269)
- Remove manual entry of Import Reference on front-end import (#1284)
- Replaced forked http-signature dependency with official package (#876)
- Support AIFF file format (#1243)

Bugfixes:

- "Add check for empty/null covers (#1281)"
- Added an album filter to fix problem where channel entries would show up in the wrong series (#1282)
- Avoid broken Faker version (#1323)
- Changed audio format detection to happen via sniffing and not file extensions (#1274)
- Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289)
- Fix delete library modal closing immediately (#1272)
- Fix public shared remote library radio button being disabled (#1292)
- Fixed an issue that prevented disabling plugins
- Fixed an issue where channel albums don't show up in the album search (#1300)
- Fixed an issue where modals would prevent users being able to interact with channels (#1295)
- Update MediaSession metadata for initially loaded track (#1252)
- Update playback position slider also when track is paused (#1266)

Contributors to this release (development, documentation, reviews):

- Reg
- hellekin
- Esteban
- Freyja Wildes
- Amaranthe
- Eleos
- Johannes H.
- Mehdi
- Adam Novak
- Agate
- Christian Paul
- Ciarán Ainsworth
- Erik Duxstad
- Fred Uggla
- Georg Krause
- heyarne
- interfect
- jovuit
- Nitai Bezerra da Silva
- Philipp Wolfer
- Pierre Couy
- Robert Kaye
- Strom Lin

## 1.0.1 (2020-10-31)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

Enhancements:

- Added controls to play volume of an album (#1226)
- Allow genre tags to be updated when rescanning files in-place (#1246)

Bugfixes:

- Fixed broken install because of upgraded dependencies
- Fixed duplication of discs for multi-disc albums in album views (#1228)
- Make the generated RSS feed more conformant with w3c specification (#1250)

Contributors to this release (development, documentation, reviews):

- Agate
- Cédric Schieli
- Ciarán Ainsworth
- Kuba Orlik

## 1.0 (2020-09-09)

Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html

### Dropped python 3.5 support [manual action required, non-docker only]

With Funkwhale 1.0, we're dropping support for Python 3.5. Before upgrading,
ensure `python3 --version` returns `3.6` or higher.

If it returns `3.6` or higher, you have nothing to do.

If it returns `3.5`, you will need to upgrade your Python version/Host, then recreate your virtual environment:

```sh
rm -rf /srv/funkwhale/virtualenv
python3 -m venv /srv/funkwhale/virtualenv
```

### Increased quality of JPEG thumbnails [manual action required]

Default quality for JPEG thumbnails was increased from 70 to 95, as 70 was producing visible artifacts in resized images.

Because of this change, existing thumbnails will not load, and you will need to:

1. delete the `__sized__` directory in your `MEDIA_ROOT` directory
2. run `python manage.py fw media generate-thumbnails` to regenerate thumbnails with the enhanced quality

If you don't want to regenerate thumbnails, you can keep the old ones by adding `THUMBNAIL_JPEG_RESIZE_QUALITY=70` to your .env file.

### Small API breaking change in `/api/v1/libraries`

To allow easier crawling of public libraries on a pod,we had to make a slight breaking change
to the behaviour of `GET /api/v1/libraries`.

Before, it returned only libraries owned by the current user.

Now, it returns all the accessible libraries (including ones from other users and pods).

If you are consuming the API via a third-party client and need to retrieve your libraries,
use the `scope` parameter, like this: `GET /api/v1/libraries?scope=me`

### API breaking change in `/api/v1/albums`

To increase performance, querying `/api/v1/albums` doesn't return album tracks anymore. This caused
some performance issues, especially as some albums and series have dozens or even hundreds of tracks.

If you want to retrieve tracks for an album, you can query `/api/v1/tracks/?album=<albumid>`.

### JWT deprecation

API Authentication using JWT is deprecated and will be removed in Funkwhale 1.0. Please use OAuth or application tokens
and refer to our API documentation at https://docs.funkwhale.audio/swagger/ for guidance.

### Full list of changes

Features:

- Allow users to hide compilation artists on the artist search page (#1053)
- Can now launch server import from the UI (#1105)
- Dedicated, advanced search page (#370)
- Persist theme and language settings across sessions (#996)

Enhancements:

- Add support for unauthenticated users hitting the logout page
- Added support for Licence Art Libre (#1088)
- Broadcast/handle rejected follows (#858)
- Confirm email without requiring the user to validate the form manually (#407)
- Display channel and track downloads count (#1178)
- Do not include tracks in album API representation (#1102)
- Dropped python 3.5 support. Python 3.6 is the minimum required version (#1099)
- Improved keyboard accessibility (#1125)
- Improved naming of pages for accessibility (#1127)
- Improved shuffle behaviour (#1190)
- Increased quality of JPEG thumbnails
- Lock focus in modals to improve accessibility (#1128)
- More consistent search UX on /albums, /artists, /radios and /playlists (#1131)
- Play button now replace current queue instead of appending to it (#1083)
- Set proper lang attribute on HTML document (#1130)
- Use semantic headers for accessibility (#1121)
- Users can now update their email address (#292)
- [plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and secret are provided
- Added a new, large thumbnail size for cover images (#1205
- Enforce authentication when viewing remote channels, profiles and libraries (#1210)

Bugfixes:

- Fix broken media support detection (#1180)
- Fix layout issue with playbar on landscape tablets (#1144)
- Fix random radio so that podcast content is not picked up (#1140)
- Fixed an issue with search pages where results would not appear after navigating to another page
- Fixed crash with negative track position in file tags (#1193)
- Handle access errors scanning directories when importing files
- Make channel card updated times more humanly readable, add internationalization (#1089)
- Ensure search page reloads if another search is submitted in the sidebar (#1197)
- Fixed "scope=subscribed" on albums, artists, uploads and libraries API (#1217)
- Fixed broken federation with pods using allow-listing (#1999)
- Fixed broken search when using (, " or & chars (#1196)
- Fixed domains table hidden controls when no domains are found (#1198)

Documentation:

- Simplify Docker mono-container installation and upgrade documentation

Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects):

- Agate
- Andy Craze
- anonymous
- appzer0
- Arne
- Ciarán Ainsworth
- Daniele Lira Mereb
- dulz
- Francesc Galí
- ghose
- Kalle Anka
- mekind
- Meliurwen
- Puri
- Quentin PAGÈS
- Raphaël Ventura
- Slimane Selyan Amiri
- SpcCw
- Stefano Pigozzi
- Sébastien de Melo
- Ventura Pérez García
- vicdorke
- Xosé M
