# Changelog All notable changes to this project are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] _Nothing yet._ ## [1.10.2] - 2026-11-03 ### Added - An Unraid template for Community Applications (`templates/backuparr.xml`, with `ca_profile.xml`). It installs the same image as Compose and `docker run`, with appdata in `/mnt/user/appdata/backuparr`, Unraid's `PUID`/`PGID` of `99`/`100`, optional folders for Jellyfin, Emby, Plex, Seerr and Bazarr, and the optional settings under Advanced (#86). - Getting started on the documentation site is split into Docker, Unraid, Build from source and First run pages, listed under it in the sidebar, and the README's Quick start has an Unraid section. ### Fixed - An empty or unknown `LOG_LEVEL` no longer stops the web UI from starting; it falls back to `INFO`. - The Google Drive API key on Settings is masked like the Client Secret, so it isn't shown on screen (#94). Thanks to @snehaapratap for the contribution (#95). ## [1.10.1] - 2026-11-02 ### Added - The image is also published to GitHub Container Registry as `ghcr.io/rsaturns/backuparr`, with the same tags as Docker Hub. ### Changed - The documentation moved to a documentation site with a page per topic and search, at https://rsaturns.github.io/backuparr/. The README keeps the screenshots, the Quick start and links into the site. - The Tautulli and SABnzbd restore notes, and the error for apps without an automated restore, point to the documentation site instead of the README. ## [1.10.0] - 2026-11-02 🎉 **Backuparr is out of beta.** With its feature set settled and backups and restores of every supported app holding up release after release, 1.10.0 is the first full release - from here on, versions drop the `-beta` suffix. ### Security - Pasting a crafted OneDrive or Dropbox token could tie up the web server for hours: the pattern that finds the token in `rclone authorize` output backtracked badly on long runs of spaces or a repeated marker line. Only a logged-in user could paste one. It now takes linear time. - The Plex sign-in and Prowlarr discovery cookies are set only when Backuparr makes a new one, instead of echoing the browser's own cookie back. ### Added - Back up a single app on demand (#78). **Run & Status** has an app picker beside **Run backup now**: leave it on **All apps** for the usual run, or pick one enabled app or instance to back up just that one. A single-app run uploads to every enabled destination and only applies retention to that app's backups. Scheduled runs still back up every enabled app. - A Code of Conduct, a contributing guide and a pull request template. ### Changed - The README has a Screenshots section showing the Overview, Settings, Run & Status and History tabs. - SECURITY.md describes the current reset protections and how rclone is given OAuth tokens, and lists unencrypted backup archives and the on-volume encryption key as accepted risks. ### Fixed - History's download links encode the destination and app in the URL, like the file name. ## [1.9.25-beta] - 2026-10-30 ### Security - The settings the web UI loads included the Google Drive, OneDrive and Dropbox sign-in tokens, which never need to leave the server - anyone with a logged-in browser session could read them. The UI now only learns whether each one is connected. - Profilarr, Bazarr, Emby, Seerr and SABnzbd sent their API key to whatever host a redirect pointed at, such as a reverse proxy's login page on another domain. Like Radarr, Sonarr and Prowlarr, they now refuse redirects to a different host unless `BACKUPARR_ALLOW_CROSS_HOST_REDIRECTS` is set. - Backuparr passed the Google Drive client secret and refresh token to rclone on its command line every time it opened History, Restore or ran a backup, where any user on the Docker host could see them with `ps`. It now does so only when the Google Drive settings change. - The Overview showed its error message as HTML, the one place the web UI didn't treat text from the server as plain text. It now does. - The CI and release workflows run third-party GitHub Actions pinned to exact commits instead of version tags that can be moved, so a compromised action can't slip into the image build or the Docker Hub push. ### Fixed - A username with accented or other non-ASCII letters (such as `Tím`) could be set at first-run setup but then never log in - every login failed with a server error, leaving only Reset. Setup and login also answered a username or password sent as a number with a server error instead of rejecting it. - A new Radarr/Sonarr instance could be given the id, and so the backup folder, of one that had been removed. Its backups then mixed with the removed server's in History, Restore and retention, and an older file could restore the other server's data. Backuparr now remembers removed instances' ids and never reuses them. The second instance with the same name also gets `-2` instead of `-3`. - Prowlarr discovery wrote what it found for an extra Radarr/Sonarr instance - its API key, and with **Use this service** its URL too - into the first instance's card, leaving that one with the wrong server or key. - With the first Radarr/Sonarr card empty, Prowlarr discovery could fill it with a server another instance's card already had, so both backed up the same server. The first card is now only offered servers no other card holds. - Removing a Radarr/Sonarr instance that a request header was limited to silently took it out of that header's apps - narrowing the header, or leaving it with no apps and a confusing save error. Settings now says which header to change first. - Emby and Seerr backups failed, or read the wrong file, when the mounted data folder's path contained `#`, `?` or `%`. - A Bazarr backup whose download was damaged on the way (a member failing its checksum) was kept as good and Bazarr's own copy deleted. Backuparr now downloads it again until it reads back intact. - Restoring NZBGet trimmed spaces from the start and end of setting values. A value with a line break in it, which the backup can't hold, now fails the backup with the setting's name instead of being split into two lines. - Jellyfin's **Test** could fail with an unexpected error instead of "check the volume mount" when the first backup Jellyfin listed had no path. - Reset failed and deleted nothing when the local backup folder couldn't be read, such as a stale network mount, leaving no way back in after a forgotten password. It now resets anyway and logs which backups it couldn't remove. - A failed backup of an extra instance was reported as "radarr-4k: radarr: unauthorized ...", which on the Overview read as if the first Radarr had failed. It now reads "radarr-4k: unauthorized ...". - While a backup or restore ran, a slow status reply could let the progress view's requests pile up and show an older state after a newer one, and a failed request (the container restarting) went unreported. The view now asks again only after each answer, and shows and retries failures. - A Tdarr restore cut off partway, for example by a network drop, failed with a bare connection error. It now says which collection was left partly restored and how far it got, and that running the restore again finishes it. ### Changed - Opening History or Restore, downloading or deleting a backup, and every backup run now start one rclone process to check the cloud connections instead of three to five, so those pages load faster. - While a backup runs, the progress view's status checks no longer re-read the whole log file each time (up to 1 MB every 1.5 seconds), and the run's log they send is capped at its newest 500 lines. - Bazarr backups and restores no longer hold the whole archive in memory, which matters for a large database on a small NAS. ## [1.9.0-beta] - 2026-10-29 ### Added - More than one Radarr or Sonarr (#46), such as a 4K Radarr beside the HD one or an anime Sonarr. **Add another Radarr/Sonarr** in Settings adds a named instance with its own settings, backups, History, Restore and authentication headers; Prowlarr discovery can add the ones it finds. Existing settings and backups are unchanged. ## [1.8.14-beta] - 2026-10-29 ### Security - Another website could make a visitor's browser reset Backuparr - deleting its settings, keys, login and local backups - because the reset needs no login and the API accepted plain-text request bodies. Every change to Backuparr (settings, backups, restores, reset, first-run setup) now has to be sent as JSON, which other sites can't do without permission. - With `BACKUPARR_FORCE_HTTPS`, Backuparr took a client's address from `X-Forwarded-For` whoever sent it, so the login lockout could be dodged by connecting to the port directly. It now trusts that header only from the proxy named in the new `BACKUPARR_TRUSTED_PROXY` setting. - The CI workflow runs with read-only repository access. ### Fixed - Retention and Reset only delete Backuparr's own archives (`/__