Restic 0.16.0 Released

We are happy to announce the release of restic 0.16.0!

This is a companion discussion topic for the original entry at
restic 0.16.0-dev (compiled manually) compiled with go1.20.6 on windows/amd64
restic restore --help

The "restore" command extracts the data from a snapshot from the repository to
a directory.

The special snapshot "latest" can be used to restore the latest snapshot in the


Exit status is 0 if the command was successful, and non-zero if there was any error.

  restic restore [flags] snapshotID

  -e, --exclude pattern      exclude a pattern (can be specified multiple times)
  -h, --help                 help for restore
  -H, --host host            only consider snapshots for this host, when snapshot ID "latest" is given (can be specified multiple times)
      --iexclude --exclude   same as --exclude but ignores the casing of filenames
      --iinclude --include   same as --include but ignores the casing of filenames
  -i, --include pattern      include a pattern, exclude everything else (can be specified multiple times)
      --path path            only consider snapshots including this (absolute) path, when snapshot ID "latest" is given (can be specified multiple times)
      --sparse               restore files as sparse
      --tag tag[,tag,...]    only consider snapshots including tag[,tag,...], when snapshot ID "latest" is given (can be specified multiple times) (default [])
  -t, --target string        directory to extract data to
      --verify               verify restored files content

Global Flags:
      --cacert file                file to load root certificates from (default: use system certificates or $RESTIC_CACERT)
      --cache-dir directory        set the cache directory. (default: use system default cache directory)
      --cleanup-cache              auto remove old cache directories
      --compression mode           compression mode (only available for repository format version 2), one of (auto|off|max) (default: $RESTIC_COMPRESSION) (default auto)
      --insecure-tls               skip TLS certificate verification when connecting to the repository (insecure)
      --json                       set output mode to JSON for commands that support it
      --key-hint key               key ID of key to try decrypting first (default: $RESTIC_KEY_HINT)
      --limit-download rate        limits downloads to a maximum rate in KiB/s. (default: unlimited)
      --limit-upload rate          limits uploads to a maximum rate in KiB/s. (default: unlimited)
      --no-cache                   do not use a local cache
      --no-lock                    do not lock the repository, this allows some operations on read-only repositories
  -o, --option key=value           set extended option (key=value, can be specified multiple times)
      --pack-size size             set target pack size in MiB, created pack files may be larger (default: $RESTIC_PACK_SIZE)
      --password-command command   shell command to obtain the repository password from (default: $RESTIC_PASSWORD_COMMAND)
  -p, --password-file file         file to read the repository password from (default: $RESTIC_PASSWORD_FILE)
  -q, --quiet                      do not output comprehensive progress report
  -r, --repo repository            repository to backup to or restore from (default: $RESTIC_REPOSITORY)
      --repository-file file       file to read the repository location from (default: $RESTIC_REPOSITORY_FILE)
      --retry-lock duration        retry to lock the repository if it is already locked, takes a value like 5m or 2h (default: no retries)
      --tls-client-cert file       path to a file containing PEM encoded TLS client certificate and private key (default: $RESTIC_TLS_CLIENT_CERT)
  -v, --verbose                    be verbose (specify multiple times or a level using --verbose=n, max level/times is 2)

Help in program misses info about

including <snapshot>:<subfolder> syntax for the diff, ls and restore commands, as well as a progress bar and JSON support for the restore command.

Just wondering about 0.16 new “-group-by=” syntax, it is “tag” or “tags”? Because both form work in cmd scripts (e.g restic -r foo backup --group-by=tag and restic -r foo forget --group-by=tag), it is fine, but maybe that should be “tags” as plural - many “tags” as opposed to one “tag”?

@KamikazeePL see Add snapshot subfolder syntax in help output of diff/dump/restore by MichaelEischer · Pull Request #4436 · restic/restic · GitHub

The multi-platform docker images is a nice feature, and less memory use is a nice touch, along with all the other enhancements. Thanks all! Nice to see Restic is actively maintained.

I tried to get Restic going with Docker recently on Raspberry Pi. The first hurdle was documentation, which isn’t as good as the rest of the platform, but I muddled through. The second hurdle was lack of a docker image compatible with the platform, which was a hard stop.

Restic is a static binary, and cross platform. Why is a docker container needed?

It’s not needed, as such. It’s potentially simpler to set up if you deploy to multiple platforms and use Docker a lot.

I’m replacing a Raspberry Pi that’s running a lot of native software such as Home Assistant, Pi Hole, and a few other things, backed up by Restic, with a new system based largely on docker images. I got all the other software working using Docker images, but Restic didn’t have a cross platform docker container. That wasn’t a problem, I just used the native binary, but it’s a nice feature that I could now use the docker container if I wanted to. I’d go and try it now, but it took me quite a while to work it out because the documentation isn’t great, and I deleted it when I moved back to using the native binary, so it would take too long to bother with.

You can drop the binary inside any container or image. Again, unlike other binaries, restic binary has no dependencies and works standalone everywhere.