CLI tool
nicotsx/zerobyte avatar
nicotsx/zerobyte

Zerobyte: A Web Frontend for Restic That Automates Self-Hosted Backups

Backup automation for self-hosters. Built on top of restic

6,954 stars174 forksTypeScriptAGPL-3.0

At a glance

What is it?
Zerobyte wraps restic in a Dockerized web UI with scheduling, retention, and multi-protocol source support. It is early-stage software (0.x) with real operational caveats, but it offers a concrete path for self-hosters who want managed backups without leaving their homelab.
Who is it for?
Adopt Zerobyte if you are a self-hoster who wants a web-managed restic layer with scheduling and retention, and you accept the risk of a 0.x project that may change between releases. Do not adopt it if you need production-grade stability, if your backup server is directly exposed to the internet (the README explicitly warns against this), or if you prefer a CLI-only tool like restic itself.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Zerobyte Solves and Who It Targets

Zerobyte addresses a specific gap for self-hosters: restic is a powerful backup tool, but it is command-line only. Scheduling, retention, and monitoring require cron scripts, shell glue, and manual log inspection. Zerobyte wraps restic with a modern web interface that handles scheduling, retention policies, and backup monitoring. The target user is someone running a home server or a small VPS who wants encrypted, compressed backups to remote storage without writing and maintaining a pile of scripts. The README emphasizes that it is built on top of restic, so you get restic's proven snapshot engine underneath. The project is still in version 0.x, and the README warns that major changes can happen between versions. That is a clear signal that early adopters should expect breaking changes, which is a key consideration for anyone planning to rely on it for irreplaceable data.

How It Works: Restic Under the Hood with a Web Control Plane

The architecture is straightforward: a Docker container runs the Zerobyte web server and API, and it invokes restic processes for actual backup operations. The web interface lets you define backup jobs that point to source locations and destination repositories. Sources can be NFS, SMB, WebDAV, SFTP, or local directories, which covers most self-hosting scenarios. The restic layer handles encryption, compression, and deduplication, and Zerobyte adds scheduling and retention policies on top. The container needs SYS_ADMIN capabilities and access to /dev/fuse, which suggests it mounts remote sources using FUSE, likely via rclone. The environment variable RCLONE_CONFIG_DIR confirms that rclone is involved for remote storage access. So the data flow is: Zerobyte schedules a job, mounts the source via FUSE (if remote), runs restic backup, then unmounts. The web UI lets you monitor snapshots and trigger restores, though the README does not detail the restore workflow. That is a gap you should check in the docs before relying on it for disaster recovery.

Getting It Running: Docker Compose and Required Environment Variables

Installation is Docker-based. The README provides a compose.yaml example with the image ghcr.io/nicotsx/zerobyte:v0.42. You need to set TZ, BASE_URL, and APP_SECRET. APP_SECRET is required and must be at least 32 characters; generate it with openssl rand -hex 32. The container exposes port 4096, and you should map it to 127.0.0.1:4096 if the server is reachable from the internet, per the README's warning. You also need to mount a persistent volume for /var/lib/zerobyte. The README explicitly warns not to point that volume at a network share, and TrueNAS users are told to use a dedicated ZFS dataset because /var/lib is ephemeral there. After starting with docker compose up -d, you access the web UI at http://<server-ip>:4096. The configuration table lists other variables like RESTIC_HOSTNAME, GOMAXPROCS, TRUST_PROXY, and PROVISIONING_PATH, which allows operator-managed repositories via a JSON file. That is useful for teams that want to predefine backup targets. The README also mentions performance tuning, but the truncated section cuts off, so you should consult the full docs for CPU-related settings.

Limitations and Failure Modes: The 0.x Reality and Network Exposure Risks

The most obvious limitation is the project's maturity. Version 0.42.0 is still 0.x, and the README warns of major changes between versions. That means upgrades could break your configuration or require migration steps. The README also strongly discourages running Zerobyte on a server accessible from the internet. If you do, you must bind to localhost and use a secure tunnel. That is a significant constraint for users who want remote access to their backup dashboard. Another failure mode: the data directory must be on local storage. Pointing /var/lib/zerobyte at a network share causes permission issues and performance degradation, according to the README. That limits you to a single-node setup; you cannot easily share the configuration across multiple servers. Also, the README does not mention restore testing or verification workflows, which is a gap for a backup tool. You should verify that restic's restore capabilities are exposed in the UI before trusting it for recovery. The lack of a documented restore path is a real concern for a tool whose purpose is data protection.

Alternatives: Restic Itself and Other Web UIs

The most direct alternative is to use restic directly with your own cron jobs and shell scripts. That gives you full control and no extra layer, but you lose the web UI and centralized scheduling. If you want a web interface but prefer a different backend, you could consider tools like Duplicati, which has its own web UI and supports many storage backends, though it is not built on restic. Another option is to use a hosted backup service, but that defeats the self-hosting purpose. The key difference with Zerobyte is that it delegates the backup engine to restic, which is a mature, battle-tested tool. That is a strong foundation, but the automation layer is still young. If you are comfortable with CLI and cron, the extra abstraction may not be worth the risk. If you want a web UI and are willing to accept the 0.x caveats, Zerobyte is a reasonable choice. Just be aware that you are betting on the project's roadmap.

Maintenance and Upgrade Cost, and License Implications

The project is actively developed, with releases every few weeks (v0.40.0 in June, v0.41.0 in July, v0.42.0 in August 2026). That means frequent updates, which is good for bug fixes but also means you need to track releases and test upgrades. The README warns of major changes, so you should read the changelog before updating. The license is AGPL-3.0, which has implications if you modify the code and offer it as a network service: you must share your modifications with users. For most self-hosters, that is not a concern, but if you plan to fork or extend it, you need to comply. The configuration is stored in a database under /var/lib/zerobyte, so backups of that directory are essential. The APP_SECRET encrypts sensitive data in that database, so losing it means losing access to your configuration and possibly your encryption keys. That is a critical operational detail: back up the secret and the data directory together.

Editorial conclusion

Adopt Zerobyte if you are a self-hoster who wants a web-managed restic layer with scheduling and retention, and you accept the risk of a 0.x project that may change between releases. Do not adopt it if you need production-grade stability, if your backup server is directly exposed to the internet (the README explicitly warns against this), or if you prefer a CLI-only tool like restic itself. Before deploying, verify that your storage backends are supported, generate a strong APP_SECRET, and confirm that your data directory is not on an ephemeral filesystem like TrueNAS's /var/lib. Also check the documentation at zerobyte.app for the latest setup details, since the README is truncated and the project is evolving rapidly.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes