{"id":28906866,"url":"https://github.com/dotboris/standard-backups","last_synced_at":"2026-04-11T07:06:27.393Z","repository":{"id":299516440,"uuid":"1002660369","full_name":"dotboris/standard-backups","owner":"dotboris","description":"Standardized and pluggable backup orchestrator","archived":false,"fork":false,"pushed_at":"2026-03-30T00:35:38.000Z","size":370,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-03T04:54:35.943Z","etag":null,"topics":["backup","backup-tool","golang","plugin-architecture","work-in-progress"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dotboris.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-15T23:44:11.000Z","updated_at":"2026-03-30T00:35:09.000Z","dependencies_parsed_at":"2026-03-07T08:07:09.858Z","dependency_job_id":null,"html_url":"https://github.com/dotboris/standard-backups","commit_stats":null,"previous_names":["dotboris/standard-backups"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/dotboris/standard-backups","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Fstandard-backups","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Fstandard-backups/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Fstandard-backups/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Fstandard-backups/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotboris","download_url":"https://codeload.github.com/dotboris/standard-backups/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Fstandard-backups/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31671659,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","backup-tool","golang","plugin-architecture","work-in-progress"],"created_at":"2025-06-21T15:10:20.656Z","updated_at":"2026-04-11T07:06:27.377Z","avatar_url":"https://github.com/dotboris.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Standard Backups\n\nStandard Backups is a generic backup orchestration tool with a plugin-based\narchitecture that works with existing backup tools that you love and trust. It\nhandles all the boring logic (preparing backups, performing backups, cleanup,\nsecret management, etc.) and lets you focus on what you want to backup and where\nyou want those backups to go.\n\n## Getting Started\n\nStandard Backups uses backends to integrate with existing backup tools which\nperform the backups. So you first need to choose which backend you'll be using.\nNote that you can use more than one backend and you can change backends if you\nchange your mind.\n\nThe following backends are currently distributed alongside Standard Backups:\n\n- [Restic](https://restic.net/): A fully featured backend that integrates with\n  restic, a popular, fast, and secure backup program.\n- Rsync: An example backend that uses rsync to backup files.\n\n### Install\n\nYou'll need to install Standard Backups itself as well as a backend. Backends\nare plugins that integrate with existing backup tools. You can use more than one\nbackend, but you'll need at least one.\n\n1. Open the latest\n   [release](https://github.com/dotboris/standard-backups/releases/latest) page.\n1. Download the `standard-backups` package for your package manager and\n   architecture.\n1. Download at least one backend (`standard-backups-*-backend`) package for your\n   package manager and architecture.\n1. Install those packages with the instructions below (must be run as `root`).\n\n\u003cdetails\u003e\n\u003csummary\u003eDEB based Linux distributions (e.g. Ubuntu, Debian)\u003c/summary\u003e\n\nGo to the directory where you downloaded the `.deb` files for Standard Backups\nand at least one backend. Then, run the following commands:\n\n```sh\napt update\napt install ./standard-backups*.deb\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eRPM based Linux distributions (e.g. Fedora)\u003c/summary\u003e\n\nGo to the directory where you downloaded the `.rpm` files for Standard Backups\nand at least one backend. Then, run the following commands:\n\n```sh\ndnf install --refresh ./standard-backups*.rpm\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eAlpine Linux\u003c/summary\u003e\n\nGo to the directory where you downloaded the `.apk` files for Standard Backups\nand at least one backend. Then, run the following commands:\n\n```sh\napk update\napk add --allow-untrusted ./standard-backups*.apk\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eArch Linux\u003c/summary\u003e\n\nGo to the directory where you downloaded the `.pkg.tar.zst` files for Standard\nBackups and at least one backend. Then, run the following commands:\n\n```sh\npacman -Sy\npacman -U ./standard-backups*.pkg.tar.zst\n```\n\n\u003c/details\u003e\n\nTo validate your installation, simply run `standard-backups list-backends`. This\nshould show you the backends that you have installed.\n\n### Setup a Recipe\n\nRecipes tell Standard Backups how to backup a given system, service, or\napplication. Each recipe consists of a list of paths to backup with exclusions,\nan optional command to prepare the backup (before hook), an optional command to\ncleanup the backup (after hook), and some metadata.\n\nStandard Backups allows applications to distribute their own recipes. This saves\nyou from writing your own. You can see what recipes are available on your system\nby running `standard-backups list-recipes`. If there's already a recipe for the\napplication you're trying to backup, take note of its name and move to the next\nstep. Otherwise, you'll need to write your own.\n\nTo make your own recipe, create a `.yaml` file under\n`/etc/standard-backups/recipes/` with the following content:\n\n```yaml\nversion: 1 # Internal, must be 1.\nname: my-recipe # Name of your recipe. change this.\ndescription: ... # Optional description of what your recipe does.\npaths: # Paths that will be backed up. Change this.\n  - /path/to/backup/...\n  - /other/path/to/backup/...\nexclude: # Optional paths that will not be backed up.\n  - paths-not-to-backup\n  - ...\nbefore: # Optional command to run before the backup. Change or remove this.\n  shell: bash # What shell to run the command through. (options: bash, sh)\n  command: | # Commands to run. Change this.\n    ... command to run ...\n    ... supports multiple lines ...\nafter: # Optional command to run after the backup. Change or remove this.\n  shell: bash # What shell to run the command through. (options: bash, sh)\n  command: | # Commands to run. Change this.\n    ... command to run ...\n    ... supports multiple lines ...\n```\n\nChange this file to fit your needs following the comments. You can verify that\nStandard Backups sees your recipe by running `standard-backups list-recipes`.\n\n### Configure a Destination\n\nDestinations are where backups go. Each is bound to a specific backend. As such,\nconfiguration will change depending on what backend you choose. Follow the\nexample below that best fits your backend.\n\nYou can see which backends are installed by running `standard-backups list-backends`.\n\n#### Restic Destination\n\nOpen `/etc/standard-backups/config.yaml` and add the following:\n\n```yaml\ndestinations:\n  my-destination: # Name of your destination. Change this.\n    backend: restic\n    options:\n      repo: ... # Restic repo. Can be a local path or remote server / service.\n      env:\n        # Password for the restic repo. Don't put your password in clear-text here, use the secrets feature.\n        RESTIC_PASSWORD: '{{ .Secrets.myDestinationPassword }}'\n        # Add other environment variables needed by your repo here. Remember: don't put clear-text secrets here, use the secrets feature.\n      forget: # Optional. Tells restic when to delete old backups.\n        # Important: Read the restic guide on this feature before enabling it.\n        # https://restic.readthedocs.io/en/stable/060_forget.html#removing-snapshots-according-to-a-policy\n        enable: true\n        options:\n          keep-last: 4\n          keep-daily: 7\n          keep-weekly: 4\n          keep-monthly: 12\n          keep-yearly: 7\n\nsecrets:\n  myDestinationPassword:\n    # Where the repo password is stored.\n    # - Create a file on your system and paste the password in there.\n    # - Change its permissions so that only standard-backups can read it.\n    # - Update the path here to match your file.\n    from-file: /path/to/secret-file\n```\n\n#### Rsync Destination\n\n\u003e [!WARNING]\n\u003e The Rsync backend is not feature-rich or battle tested. It's not recommended for production use.\n\nOpen `/etc/standard-backups/config.yaml` and add the following:\n\n```yaml\ndestinations:\n  my-destination: # Name of your destination. Change this.\n    backend: rsync\n    options:\n      destination-dir: ... # Where to store the backups.\n```\n\n### Perform Backups\n\nFirst, you need to define a job. Jobs associate a recipe with one or more\ndestinations. To define a job, open `/etc/standard-backups/config.yaml` and add\nthe following:\n\n```yaml\njobs:\n  my-job: # Name of your job. Change this.\n    recipe: ... # Name of the recipe you found or created earlier. Change this.\n    backup-to: # Destinations where to send the backups.\n      - my-destination # Destination we created earlier. Change this.\n    on-success: # Optional command to run after the job succeeds. Change or remove this.\n      shell: bash # What shell to run this command through. (options: bash, sh)\n      command: | # Commands to run. Change this.\n        ... command to run after job succeeds ...\n    on-failure: # Optional command to run after the job fails. Change or remove this.\n      shell: bash # What shell to run this command through. (options: bash, sh)\n      command: | # Commands to run. Change this.\n        ... command to run after job fails ...\n```\n\nYou can now perform a backup by running `standard-backups backup my-job`. You\ncan see the resulting backup by running `standard-backups list-backups`.\n\nStandard Backups doesn't provide a mechanism to run scheduled backups. Instead,\nyou are expected to use an existing task scheduling tool (`cron`, `systemd`\ntimers, etc.) to run `standard-backups backup ...` periodically.\n\nIt is recommended that you create a dedicated user for Standard Backups and\nperform all backups as that one user. All files referenced in the `secrets`\nsection of the configuration should be owned and only readable by that user.\n\n## License\n\nCopyright (C) 2025 Boris Bera\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotboris%2Fstandard-backups","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotboris%2Fstandard-backups","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotboris%2Fstandard-backups/lists"}