Skip to content

Restow 0.3.6

Choose a tag to compare

@github-actions github-actions released this 14 Oct 22:34
· 471 commits to main since this release
v0.3.6

Restow 0.3.6. Released 2026-10-15, channel beta.

Beta release. Run it alongside your existing backups, not as your only one, until
you have verified restores against your own data.

Summary

Restow 0.3.6 lets you protect Proxmox VE guests straight from the inventory, gives the
disk space of the old backup index back without an api restart, shows a notice with a
button when a service needs a restart, and updates the compose file of older
installations when the installer runs again. One database migration.

Breaking Changes

None. docker-compose.yml and .env.example of the release now carry almost no comments;
the reference moved to https://docs.restowbackup.com. Nothing in them changed otherwise.

Added

  • Inventory › Proxmox VE: every VM and container has its backup job as a choice (an
    existing job, none, or a new one) and Back up now. Guests can be ticked one by one, all
    of a node, or all without a job in one click, and then added to a job or backed up
    together; New job opens the job dialog and puts the selection into the new job.
  • Installation › Updates: a "Restart required" notice when a service needs a restart, with
    the reason, a Restart now button (through the updater; api, worker or scheduler only,
    never while an update runs, and only after a confirmation) and the command to copy, in
    the installation's directory. Provider admins see a notice on every page. Nothing
    restarts without a click.
  • Running install.sh again on an existing installation updates docker-compose.yml to
    the release in .env (checked against the signed SHA256SUMS) and keeps the previous
    file as docker-compose.yml.bak-<timestamp>. .env stays as it is.

Changed

  • After the 0.3.5 conversion of the backup index has finished, the api gives the old
    table's disk space back by itself within about 15 minutes; the api restart is no longer
    needed.
  • Installation › Updates: an available update stands next to the running version, in the
    same size and highlighted, instead of only in the status line.
  • Mounts: when the mounter is not running, the command starts with the installation's
    directory; a compose file from before the mounter is named as such, with the installer
    command that updates it.
  • Repositories › Add a server path: the dialog is wider and no longer scrolls sideways.
  • The inventory's protection column is called Protection (it shared the heading Backup with
    the size column).
  • docker-compose.yml and .env.example keep only the comments a reader must not miss.
  • Dependencies: patch and minor updates (among them better-auth 1.7.8, drizzle-orm 0.45.4,
    hono 4.13.13, pg 8.23.1, nodemailer 10.1.1, radix-ui 1.8.1, vite 6.4.4) and the pinned
    GitHub Actions setup-node, upload-artifact and download-artifact.

Fixed

  • Mounting an NFS export that does not exist on the server ended with a bare "no such file
    or directory". The message now names the export path and how to find the right one
    (showmount -e, Synology paths start with /volume1/, NFSv3).

Security

None.

Upgrade Notes

New image and one database migration (0034, a small table for restart notices), which runs
in seconds. No new required environment variables.

  • The Restart now button needs the updater of 0.3.6. An updater from before 0.3.6 shows the
    command instead until it runs the 0.3.6 image.
  • Installations from before 0.3.0 whose compose file lacks the mounter service: run the
    0.3.6 installer again to update it (see docs/MOUNTS.md).
  • Still converting the 0.3.5 backup index: nothing to do; the space comes back by itself
    once the conversion has finished. On a production installation with 14 million index
    rows the conversion ran at about 6,000 rows per second after a slow first minutes.
  • Rollback: the migration is not reversible; go back to 0.3.5 only with the database dump
    taken before the update.

Known Issues

  • No part of Restow records a restart request yet; the notice and the button are in place
    for updates that need them.
  • The Docker error text for a missing NFS export was taken from Docker's documentation, not
    from a real failed mount.
  • The known issues of 0.3.5 still apply.

Verification

Before the tag, on the release branch (main plus the five 0.3.6 branches): lint and
typecheck of all workspaces, the server installer tests (642), the CI and smoke tooling
tests (208), and the full unit and Postgres suites on Postgres 16: packages/db 177,
packages/i18n 259, packages/core 1981, apps/scheduler 65, apps/api 3279 (1 skipped),
apps/web 3839, apps/worker 444, ee/api 243, ee/licensing 59, ee/web 176, ee/worker 5,
packages/cli 34, the demo seed 208; 114 Postgres test files, none skipped. The release
smoke runs in the release pipeline; no Microsoft 365 tenant was used before the tag.

Release pipeline, 2026-10-14:

Check Result Duration
1. Install: images, compose up, migrations (new install and upgrade) PASS 78s
2. Health endpoints, worker and scheduler registered PASS 0s
3. Passkey sign-in E2E with a virtual authenticator, tenant creation, i18n de/en PASS 116s
4. Microsoft 365 backup and restore against the dev tenant SKIPPED 0s
5. IMAP backup and restore against Dovecot, hash comparison PASS 8s
6. Journal receipt, chain verification, export PASS 3s
7. Standalone restore with restow-restore from the storage of check 5 PASS 23s
8. Storage targets: S3 (Garage), local path, mounted directory PASS 20s
9. Image scan (Trivy) and dependency audit (pnpm audit) PASS 20s
10. Endpoint backup: the agent enrolls, backs up a folder, restores it PASS 11s
11. Mail import (folder and upload) and export (EML ZIP, MBOX), compared by hash PASS 8s

10 of 11 checks passed in full, 0 partly, 1 skipped, 0 failed. The full report, including the reason for every skipped or partial check, is attached to the release as smoke-report.md.

The Community images were smoke-tested on their own (smoke-report-community.md, smoke-report-community-arm64.md): amd64 PASS with gaps: 8 of 11 checks passed in full, 0 partly, 3 skipped (see the reasons below); arm64 PASS with gaps: 8 of 11 checks passed in full, 0 partly, 3 skipped (see the reasons below).

Images

Two builds of the same release. The full build is the Apache-2.0 core plus the Business and Service Provider modules (Restow Enterprise License), which stay locked until a license key is installed. The Community build is the Apache-2.0 core alone.

ghcr.io/restow-backup/restow:0.3.6
ghcr.io/restow-backup/restow-web:0.3.6
ghcr.io/restow-backup/restow-community:0.3.6
ghcr.io/restow-backup/restow-web-community:0.3.6

The digests of the multi-arch manifests (the opt-in updater verifies the pulled images against the two lines of its build):

restow: sha256:e96a9d955e2e19ad60281e4ac3d2245e763227a8e522b0d747ef562a7f596437
restow-web: sha256:a3b60b2ec3bd6b80c00528c0dc8bd0c11f7ece9b5bb6bd878c8edb2d1e848800
restow-community: sha256:dd77576827f8f92fdb31ef3e91b029b0ec664318b3d2c08f98a697c2310bc811
restow-web-community: sha256:9368c19d08856de2435dbd93ec441746af9d96752e5211a4cd76723d494b0d36

All four images are multi-arch (linux/amd64, linux/arm64), signed with cosign (keyless) and carry an SPDX SBOM as attestation. Verify any of them with:

cosign verify ghcr.io/restow-backup/restow:0.3.6 \
  --certificate-identity-regexp '^https://github.com/restow-backup/restow/\.github/workflows/release\.yml@refs/tags/v' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify ghcr.io/restow-backup/restow-web:0.3.6 \
  --certificate-identity-regexp '^https://github.com/restow-backup/restow/\.github/workflows/release\.yml@refs/tags/v' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify ghcr.io/restow-backup/restow-community:0.3.6 \
  --certificate-identity-regexp '^https://github.com/restow-backup/restow/\.github/workflows/release\.yml@refs/tags/v' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify ghcr.io/restow-backup/restow-web-community:0.3.6 \
  --certificate-identity-regexp '^https://github.com/restow-backup/restow/\.github/workflows/release\.yml@refs/tags/v' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

docker-compose.yml and env.example are the release stack (deploy/release/); install.sh installs it on a dedicated Linux VM (README.md, "Install with the script"; install.sh.sha256 for sha256sum -c after the download); restow-agent-THIRD_PARTY_NOTICES.txt holds the licenses of the agent binaries and of the restic they run; SHA256SUMS lists every file of this release and is signed (SHA256SUMS.sigstore.json).