From d718c4cf20f0729cf9a5d5100e50195f2d264ca9 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Tue, 9 Jun 2026 18:48:35 +0200 Subject: [PATCH] Generate CHANGELOG.md for 0.19.0 --- CHANGELOG.md | 517 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 515 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff6fa094c..011b3defc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Table of Contents +* [Changelog for 0.19.0](#changelog-for-restic-0190-2026-06-09) * [Changelog for 0.18.1](#changelog-for-restic-0181-2025-09-21) * [Changelog for 0.18.0](#changelog-for-restic-0180-2025-03-27) * [Changelog for 0.17.3](#changelog-for-restic-0173-2024-11-08) @@ -40,6 +41,517 @@ * [Changelog for 0.6.0](#changelog-for-restic-060-2017-05-29) +# Changelog for restic 0.19.0 (2026-06-09) +The following sections list the changes in restic 0.19.0 relevant to +restic users. The changes are ordered by importance. + +## Summary + + * Fix #2034: Support serving a `restic mount` of a Windows system via Samba + * Fix #4447: Use mode 0700 for repository directories created over SFTP + * Fix #4467: Exit with code 3 when some `backup` source paths do not exist + * Fix #4759: Error out when environment variables hold invalid values + * Fix #5233: Return exit code 3 when failing to remove snapshots + * Fix #5258: Exit with code 130 on SIGINT + * Fix #5280: Reject impossible `find` time bounds immediately + * Fix #5280: Make `find --pack` list blobs for tree packs + * Fix #5354: Allow `rclone` and `sftp` backends when running in background + * Fix #5427: Correctly restore ACL inheritance state on Windows + * Fix #5477: Password prompt was sometimes not shown for `backup -v` + * Fix #5487: Mark repository files read-only when using the SFTP backend + * Fix #5586: Correctly handle `snapshots --group-by` with `--latest` + * Fix #5595: Avoid spurious `chmod` errors on certain file backends + * Fix #5683: Prevent `backup --stdin-from-command` from hanging + * Fix #5757: Respect `--user` and `--host` in `key passwd` + * Fix #21820: Correct handling of duplicate index entries + * Fix #21820: Correctly handle pack files missing from the index + * Chg #5293: Prune small packfiles more aggressively + * Chg #5767: Prevent excluding paths explicitly passed to `backup` + * Chg #21791: Update dependencies and require Go 1.25 or newer + * Enh #3326: Limit `check` to snapshots selected by filters + * Enh #3572: Support restoring ownership by name on UNIX systems + * Enh #3738: Optional GitHub token for `self-update` API requests + * Enh #4278: Support include filters in the `rewrite` command + * Enh #4728: Support zstd compression levels `fastest` and `better` + * Enh #4868: Include repository ID in the filesystem name used by `mount` + * Enh #5175: Add status counters to `copy` in verbose text output + * Enh #5352: Support excluding cloud-backed files on macOS + * Enh #5383: Reduce progress bar refresh rates to decrease energy usage + * Enh #5424: Enable Windows filesystem privileges before file access + * Enh #5440: Make `--host` override environment variable `RESTIC_HOST` + * Enh #5448: Support configuring `nice` and `ionice` in the Docker image + * Enh #5453: Copy multiple snapshots in batches + * Enh #5523: Add Open Container Initiative labels to release Docker image + * Enh #5531: Reduce Azure storage costs by optimizing uploads + * Enh #5562: Rewrite only changed status lines each frame + * Enh #5588: Show timezone context in `snapshots` output + * Enh #5610: Reduce `check`, `copy`, `diff` and `stats` memory usage + * Enh #5689: Show more detailed progress for `stats` + * Enh #5713: Significantly speed up index loading + * Enh #5718: Stricter and earlier validation of the `mount` point + +## Details + + * Bugfix #2034: Support serving a `restic mount` of a Windows system via Samba + + A repository mounted using `restic mount` on a POSIX system could not use Samba + to serve files from backups of Windows systems, while backups of non-Windows + systems could be served successfully. This has now been fixed. + + https://github.com/restic/restic/issues/2034 + https://github.com/restic/restic/issues/4382 + https://github.com/restic/restic/pull/21784 + + * Bugfix #4447: Use mode 0700 for repository directories created over SFTP + + When creating a repository over SFTP, restic created the repository directories + with the SFTP server's default permissions, often 0755, rather than the 0700 + permissions it uses for local repositories. + + Restic now creates these directories with 0700 permissions. + + https://github.com/restic/restic/issues/4447 + https://github.com/restic/restic/pull/21817 + + * Bugfix #4467: Exit with code 3 when some `backup` source paths do not exist + + Restic used to exit with code 0 when a top-level backup source path was missing, + and exited with code 3 only when a child path under an existing source did not + exist. Scripts that relied on the exit code could therefore treat an incomplete + backup as success. + + Restic now exits with code 3 when any backup source path does not exist. + + https://github.com/restic/restic/issues/4467 + https://github.com/restic/restic/pull/5347 + + * Bugfix #4759: Error out when environment variables hold invalid values + + If the environment variables `RESTIC_COMPRESSION`, `RESTIC_PACK_SIZE`, or + `RESTIC_READ_CONCURRENCY` could not be parsed, restic used to ignore them. + Restic now fails with an error unless the same setting is overridden on the + command line. + + https://github.com/restic/restic/issues/4759 + https://github.com/restic/restic/pull/5592 + https://github.com/restic/restic/pull/5700 + + * Bugfix #5233: Return exit code 3 when failing to remove snapshots + + Previously, the `forget` command returned exit code 0 when it failed to remove + one or more snapshots. This was misleading to scripts. + + The `forget` command now instead returns exit code 3 when failing to remove one + or more snapshots. + + https://github.com/restic/restic/issues/5233 + https://github.com/restic/restic/pull/5322 + + * Bugfix #5258: Exit with code 130 on SIGINT + + Restic used to return exit code 1 on SIGINT. It now returns 130, the usual + convention for a process stopped by Ctrl-C. + + https://github.com/restic/restic/issues/5258 + https://github.com/restic/restic/pull/5363 + + * Bugfix #5280: Reject impossible `find` time bounds immediately + + The `find` command now fails with an error when both `--oldest` and `--newest` + are set and `--oldest` is later than `--newest`. + + https://github.com/restic/restic/issues/5280 + https://github.com/restic/restic/pull/5310 + + * Bugfix #5280: Make `find --pack` list blobs for tree packs + + The `find --pack ` command now also reports blobs for packs that only + contain tree blobs. + + https://github.com/restic/restic/issues/5280 + https://github.com/restic/restic/pull/5664 + + * Bugfix #5354: Allow `rclone` and `sftp` backends when running in background + + Previously, starting restic in the background could result in unexpected + behavior when using the `rclone` or `sftp` backends. For example, `restic -r + rclone:./example --insecure-no-password init &` could cause the calling `bash` + shell to exit unexpectedly. + + This has now been fixed. + + https://github.com/restic/restic/issues/5354 + https://github.com/restic/restic/pull/5358 + https://github.com/restic/restic/pull/5493 + https://github.com/restic/restic/pull/5494 + + * Bugfix #5427: Correctly restore ACL inheritance state on Windows + + Since security descriptor backups were added in restic 0.17.0, Access Control + Entry inheritance was not restored correctly on Windows; restored permissions + were always marked as explicit (not inherited) even when they were inherited + from a parent folder. + + The inheritance flags are now correctly applied when restoring the security + descriptor, preserving the original permission structure. + + https://github.com/restic/restic/issues/5427 + https://github.com/restic/restic/pull/5465 + + * Bugfix #5477: Password prompt was sometimes not shown for `backup -v` + + The repository password prompt could be hidden when running the `backup -v` + command. This has now been fixed. + + https://github.com/restic/restic/issues/5477 + https://github.com/restic/restic/pull/5554 + + * Bugfix #5487: Mark repository files read-only when using the SFTP backend + + Files created through the SFTP backend previously stayed writable. New files now + get read-only permissions where the server supports `chmod`. + + https://github.com/restic/restic/issues/5487 + https://github.com/restic/restic/pull/5497 + + * Bugfix #5586: Correctly handle `snapshots --group-by` with `--latest` + + For the `snapshots` command, `--latest` did not interact correctly with a + non-default `--group-by` value. This combination now behaves as intended. + + https://github.com/restic/restic/issues/5586 + https://github.com/restic/restic/pull/5601 + + * Bugfix #5595: Avoid spurious `chmod` errors on certain file backends + + On filesystems that do not support `chmod` (for example CIFS or FUSE-mounted + WebDAV), restic since version 0.18.0 failed to remove stale locks, throwing the + error `chmod ...: operation not supported`. This has now been fixed. + + https://github.com/restic/restic/issues/5595 + https://github.com/restic/restic/pull/5596 + + * Bugfix #5683: Prevent `backup --stdin-from-command` from hanging + + When using `--stdin-from-command`, the `backup` command could hang until + manually cancelled if the backup stopped before all subprocess output was + consumed, for example after a failed upload to the repository. This has now been + fixed. + + https://github.com/restic/restic/issues/5683 + https://github.com/restic/restic/pull/21829 + + * Bugfix #5757: Respect `--user` and `--host` in `key passwd` + + The `key passwd` command previously ignored the `--user` and `--host` options + and always stored the new key with the current user and host name. These options + are now honored. + + https://github.com/restic/restic/issues/5757 + https://github.com/restic/restic/pull/21781 + + * Bugfix #21820: Correct handling of duplicate index entries + + Before restic 0.10.0, a bug could, in very rare cases, split information about a + pack file across multiple index files. + + Since restic 0.17.0, any operation that rewrites the index (like `prune` or + `repair packs`) could lose part of that information, resulting in errors in + later `check` or `prune` runs. This can be fixed by running `repair packs`, and + only repositories using repository format version 1 might be affected. + + Split pack index entries are no longer lost during index rewrites. The `check` + command now reports these cases as errors that can be fixed using the `repair + packs` command. On older restic versions, running `repair index` twice also + fixes the problem. + + https://github.com/restic/restic/issues/21820 + https://github.com/restic/restic/pull/21828 + + * Bugfix #21820: Correctly handle pack files missing from the index + + The `repair packs` command was unable to salvage blobs from a pack file if the + pack file was not contained in the index or the index entry was incomplete. + + The command now uses information from both the index and the pack file header. + + https://github.com/restic/restic/issues/21820 + https://github.com/restic/restic/pull/21827 + + * Change #5293: Prune small packfiles more aggressively + + The `prune` command now repacks more small packfiles by default. The option + `--repack-small` is no longer needed and has been marked as deprecated. The + `--repack-smaller-than` option can still be used to further control repacking of + small pack files. + + https://github.com/restic/restic/issues/5293 + https://github.com/restic/restic/pull/21803 + + * Change #5767: Prevent excluding paths explicitly passed to `backup` + + When e.g. `restic backup --exclude-if-present .git /home/user/data` was run and + `/home/user/.git` existed, restic excluded the `data` directory from the + snapshot. The same applied to `--exclude-caches` or `--one-file-system`. + + Similarly, `restic backup --exclude-larger-than 1M large-file.bin` produced an + empty snapshot when the file was larger than one megabyte. + + The `backup` command now tracks which files and directories were specified on + the command line and does not apply excludes to those paths. Content inside a + backed-up directory is still filtered by excludes as before. + + https://github.com/restic/restic/issues/5767 + https://github.com/restic/restic/pull/21797 + + * Change #21791: Update dependencies and require Go 1.25 or newer + + Dependencies have been updated. Building restic now requires Go 1.25 or newer. + The Windows build with Go 1.26 was also fixed. + + https://github.com/restic/restic/issues/21791 + https://github.com/restic/restic/pull/5619 + https://github.com/restic/restic/pull/21796 + + * Enhancement #3326: Limit `check` to snapshots selected by filters + + The `check` command can now restrict pack verification to snapshots chosen with + the usual snapshot filters (`--tag`, `--host`, `--path`, or explicit snapshot + IDs on the command line). + + https://github.com/restic/restic/issues/3326 + https://github.com/restic/restic/pull/5469 + https://github.com/restic/restic/pull/5644 + + * Enhancement #3572: Support restoring ownership by name on UNIX systems + + The `restore` command used to restore file ownership on UNIX systems by UID and + GID. It now supports restoring ownership by user and group name with + `--ownership-by-name`, so that snapshots can be restored on systems where + numeric IDs do not match those on the backup host. + + Note: POSIX ACLs are still restored by numeric value; this change does not add + ACL-by-name support. + + https://github.com/restic/restic/issues/3572 + https://github.com/restic/restic/pull/5449 + + * Enhancement #3738: Optional GitHub token for `self-update` API requests + + The `self-update` command used only unauthenticated GitHub API requests when + checking for releases. Shared IP addresses could hit the GitHub rate limit, + resulting in a 403 Forbidden error and preventing updates. + + Unauthenticated requests remain the default, but authenticated requests are now + possible. Set the environment variable `GITHUB_ACCESS_TOKEN` to a GitHub + [personal access token](https://github.com/settings/tokens) to avoid rate-limit + failures. + + https://github.com/restic/restic/issues/3738 + https://github.com/restic/restic/pull/5568 + + * Enhancement #4278: Support include filters in the `rewrite` command + + The `rewrite` command now accepts the same include filter options as the + `restore` command (`--include`, `--include-file`, `--iinclude`, + `--iinclude-file`, and short `-i`). Include and exclude filter options are + mutually exclusive. + + https://github.com/restic/restic/issues/4278 + https://github.com/restic/restic/pull/5191 + + * Enhancement #4728: Support zstd compression levels `fastest` and `better` + + Restic now supports the zstd compression modes `fastest` and `better`. Set the + environment variable `RESTIC_COMPRESSION` to `fastest` or `better`, or pass the + same values with the `--compression` option. + + https://github.com/restic/restic/issues/4728 + https://github.com/restic/restic/pull/5321 + + * Enhancement #4868: Include repository ID in the filesystem name used by `mount` + + The filesystem exposed by the `mount` command now includes the repository ID in + its name. The ID is printed when opening a repository or can be read with + `restic cat config`. + + ``` + $ df ./test-mount/ + Filesystem 1K-blocks Used Available Use% Mounted on + restic:d3b07384d1 0 0 0 - /mnt/my-restic-repo + ``` + + https://github.com/restic/restic/issues/4868 + https://github.com/restic/restic/pull/5243 + + * Enhancement #5175: Add status counters to `copy` in verbose text output + + The `copy` command now prints additional counters in text mode when `--verbose` + is set: blobs to copy, their on-disk size, and the number of pack files read + from the source repository. + + https://github.com/restic/restic/issues/5175 + https://github.com/restic/restic/pull/5319 + + * Enhancement #5352: Support excluding cloud-backed files on macOS + + Previously, restic treated cloud-backed files (such as files stored on iCloud) + like normal local files, forcing a full download of placeholders and other + "meant to be cloud only" content during backups. + + The `backup` command now supports `--exclude-cloud-files` (previously only + available on Windows) to skip those files on supported macOS versions. From + Sonoma (macOS 14.0) onward the option can prevent unwanted downloads. Older + macOS versions will still download the files during a backup run. + + https://github.com/restic/restic/issues/5352 + https://github.com/restic/restic/pull/5370 + + * Enhancement #5383: Reduce progress bar refresh rates to decrease energy usage + + Progress bars were previously updated at 60 frames per second, which could cause + high CPU or GPU usage in some terminal emulators. + + The refresh rate is now 10 FPS to conserve energy. For some terminal emulators, + the lower rate is also necessary to allow selecting text in the terminal. + + https://github.com/restic/restic/issues/5383 + https://github.com/restic/restic/pull/5551 + https://github.com/restic/restic/pull/5626 + + * Enhancement #5424: Enable Windows filesystem privileges before file access + + Restic used to enable some Windows filesystem privileges only while reading or + writing security descriptors. Extended attributes could therefore be read before + enabling the backup privilege, possibly resulting in missed data or errors. + + Restic now enables the relevant filesystem privileges before any file access. + + https://github.com/restic/restic/pull/5424 + + * Enhancement #5440: Make `--host` override environment variable `RESTIC_HOST` + + Previously, when the environment variable `RESTIC_HOST` was set, snapshot + listings and other operations were always filtered to that host. + + Passing `--host` as an empty string (`--host=""` or `--host=`) now overrides + `RESTIC_HOST` and shows snapshots from all hosts. + + The same override applies to other commands that support snapshot filters, + including `snapshots`, `forget`, `find`, `stats`, `copy`, `tag`, `repair + snapshots`, `rewrite`, `mount`, `restore`, `dump`, and `ls`. + + https://github.com/restic/restic/issues/5440 + https://github.com/restic/restic/pull/5541 + + * Enhancement #5448: Support configuring `nice` and `ionice` in the Docker image + + The container entrypoint now reads optional scheduling hints from the + environment: + + - The environment variable `NICE` sets the process nice value (see `man nice`). + + - The environment variable `IONICE_CLASS` selects the I/O scheduling class (see + `man ionice`). Real-time classes need the `SYS_NICE` capability added to the + container. + + - The environment variable `IONICE_PRIORITY` sets the priority within + `IONICE_CLASS` and has no effect unless `IONICE_CLASS` is set; it defaults to + `4` (neutral priority). + + For further details, please see: + https://restic.readthedocs.io/en/stable/020_installation.html#docker-container + + https://github.com/restic/restic/pull/5448 + + * Enhancement #5453: Copy multiple snapshots in batches + + The `copy` command used to copy snapshots one at a time, even when doing so + produced pack files smaller than the target pack size. This led to many small + files when copying small incremental snapshots. + + The `copy` command now copies multiple snapshots together so that small pack + files are avoided where possible. + + https://github.com/restic/restic/issues/5453 + https://github.com/restic/restic/pull/5472 + + * Enhancement #5523: Add Open Container Initiative labels to release Docker image + + The release Docker image now includes OCI-style image annotation labels, which + helps external tooling identify the image. + + https://github.com/restic/restic/pull/5523 + + * Enhancement #5531: Reduce Azure storage costs by optimizing uploads + + Restic previously used Azure PutBlock and PutBlockList for every upload, which + cost two storage transactions per file and roughly doubled transaction charges + for repositories with many pack files. + + Files up to 256 MiB now use PutBlob, requiring only a single transaction per + file and cutting typical transaction costs by about half. Larger blobs still use + block uploads as required by Azure. + + https://github.com/restic/restic/issues/5531 + https://github.com/restic/restic/pull/5544 + + * Enhancement #5562: Rewrite only changed status lines each frame + + The status bar rewrote every line on each frame whenever any content changed, + which made selecting text impossible in some terminal emulators even when most + lines were unchanged. + + Now only lines that actually change are rewritten on each update. + + https://github.com/restic/restic/issues/5562 + https://github.com/restic/restic/pull/5648 + + * Enhancement #5588: Show timezone context in `snapshots` output + + The `snapshots` command now prints which timezone is used for displayed + timestamps. Snapshots may have been created in different timezones but are shown + in the local timezone, so a footer line (for example, timestamps shown in CET) + clarifies the display context when comparing snapshots from several sources. + + https://github.com/restic/restic/pull/5588 + + * Enhancement #5610: Reduce `check`, `copy`, `diff` and `stats` memory usage + + The `check`, `copy`, `diff` and `stats` commands now use less memory when + handling large snapshots. + + https://github.com/restic/restic/pull/5610 + + * Enhancement #5689: Show more detailed progress for `stats` + + The `stats` command used to show progress only while loading the index. During + the scan it printed only `scanning...` with no further updates. It now reports + how many snapshots, files, and blobs have been processed so far. + + https://github.com/restic/restic/issues/5689 + https://github.com/restic/restic/pull/5705 + + * Enhancement #5713: Significantly speed up index loading + + Loading the index for a large repository is now significantly faster. Also, the + `mount` command now loads the index once at startup and then only loads new + index files as they appear. It also loads snapshots before printing that the + repository is being served. + + https://github.com/restic/restic/pull/5713 + https://github.com/restic/restic/pull/5720 + + * Enhancement #5718: Stricter and earlier validation of the `mount` point + + The `mount` command previously accepted invalid mount points, resulting in an + error after loading the repository. The specified mount point must now refer to + a directory that the current user can access and write to, and this check is + performed before opening the repository. + + https://github.com/restic/restic/pull/5718 + + # Changelog for restic 0.18.1 (2025-09-21) The following sections list the changes in restic 0.18.1 relevant to restic users. The changes are ordered by importance. @@ -707,8 +1219,9 @@ restic users. The changes are ordered by importance. correctly. Specifying volume names is now handled correctly. To restore snapshots created - before this bugfix, use the : syntax. For example, to restore - a snapshot with ID `12345678` that backed up `C:`, use the following command: + before this bugfix, use the : syntax. For example, to + restore a snapshot with ID `12345678` that backed up `C:`, use the following + command: ``` restic restore 12345678:/C/C:./ --target output/folder