{"id":21386628,"url":"https://github.com/per2jensen/dar-backup","last_synced_at":"2026-04-01T23:23:28.202Z","repository":{"id":38028281,"uuid":"377261499","full_name":"per2jensen/dar-backup","owner":"per2jensen","description":"Long-term archival backups for Linux — with integrity you can prove and repair","archived":false,"fork":false,"pushed_at":"2026-03-23T17:15:53.000Z","size":20502,"stargazers_count":38,"open_issues_count":0,"forks_count":4,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-24T01:41:51.845Z","etag":null,"topics":["archiving","backup","backup-tool","catalogs","cli","dar","dar-manager","data-recovery","differential-backups","error-correction","full-backup","incremental-backups","linux","logging","par2","python3","restore-test","script","wrapper"],"latest_commit_sha":null,"homepage":"","language":"Python","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/per2jensen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2021-06-15T18:38:03.000Z","updated_at":"2026-03-23T17:15:57.000Z","dependencies_parsed_at":"2023-12-16T13:58:42.856Z","dependency_job_id":"84f5a9b3-cb66-4982-bb6a-0e02a209dff9","html_url":"https://github.com/per2jensen/dar-backup","commit_stats":null,"previous_names":[],"tags_count":82,"template":false,"template_full_name":null,"purl":"pkg:github/per2jensen/dar-backup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/per2jensen%2Fdar-backup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/per2jensen%2Fdar-backup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/per2jensen%2Fdar-backup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/per2jensen%2Fdar-backup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/per2jensen","download_url":"https://codeload.github.com/per2jensen/dar-backup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/per2jensen%2Fdar-backup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292889,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["archiving","backup","backup-tool","catalogs","cli","dar","dar-manager","data-recovery","differential-backups","error-correction","full-backup","incremental-backups","linux","logging","par2","python3","restore-test","script","wrapper"],"created_at":"2024-11-22T12:09:27.205Z","updated_at":"2026-04-01T23:23:28.189Z","avatar_url":"https://github.com/per2jensen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD024 --\u003e\n# `dar-backup`\n\n**Long-term archival backups for Linux — with integrity you can prove and repair**\n\n[![Codecov](https://codecov.io/gh/per2jensen/dar-backup/branch/main/graph/badge.svg)](https://codecov.io/gh/per2jensen/dar-backup)\n[![Snyk Vuln findings](https://snyk.io/test/github/per2jensen/dar-backup/badge.svg)](https://security.snyk.io/vuln/?search=dar-backup)\n![CI](https://github.com/per2jensen/dar-backup/actions/workflows/py-tests.yml/badge.svg)\n[![PyPI version](https://img.shields.io/pypi/v/dar-backup.svg)](https://pypi.org/project/dar-backup/)\n[![PyPI downloads](https://img.shields.io/badge/dynamic/json?color=blue\u0026label=PyPI%20downloads\u0026query=total_downloads\u0026url=https%3A%2F%2Fraw.githubusercontent.com%2Fper2jensen%2Fdar-backup%2Fmain%2Fclonepulse%2Fdownloads.json)](https://pypi.org/project/dar-backup/)\n[![# clones](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/per2jensen/dar-backup/main/clonepulse/badge_clones.json)](https://github.com/per2jensen/dar-backup/blob/main/clonepulse/weekly_clones.png)\n[![Milestone](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/per2jensen/dar-backup/main/clonepulse/milestone_badge.json)](https://github.com/per2jensen/dar-backup/blob/main/clonepulse/weekly_clones.png)  \u003csub\u003e🎯 Stats powered by [ClonePulse](https://github.com/per2jensen/clonepulse)\u003c/sub\u003e\n\n`dar-backup` is for Linux users who want **serious, long-term backups** — not just file copies.\nIt automates FULL / DIFF / INCR archive cycles built on two exceptional open-source tools:\n\n- **[dar](https://github.com/Edrusb/DAR)** (Disk ARchiver) — a powerful, actively maintained\n  archiver by Denis Corbin that handles differential and incremental archives, built-in\n  verification, catalogue databases, and precise file selection. `dar` is the engine that makes\n  long-term archival practical. It deserves to be far better known than it is.\n- **[par2cmdline](https://github.com/Parchive/par2cmdline)** — the Parchive suite's\n  implementation of PAR2, a Reed-Solomon based redundancy format that can detect and repair\n  corruption in any file, years after the fact, with no connection to the original source.\n  A quiet but remarkable piece of technology.\n\n`dar-backup` wires these two tools together into a fully automated backup system, with every\narchive verified and restore-tested before the job completes.\n\n**Is this for you?**\n\n✅ You back up irreplaceable data — photos, documents, home-made video — and want to be\n   certain you can restore any file to any point in time, years from now\n\n✅ You run backups as a **normal user** — root is not required, and FUSE-mounted filesystems (Nextcloud, rclone, sshfs) work correctly\n\n✅ You want **bitrot repair** to travel with your archives — onto USB disks, offsite copies, and cloud storage — without depending on the original system\n\n✅ You want unattended, scheduled backups with **Discord notifications** on success or failure\n\n✅ You want a transparent, no-lock-in tool built on proven Unix components\n\n✗ You need a GUI, Windows support, or just a quick incremental sync — `rsync` or `restic` may suit you better\n\n✗ You need **multiple backups per day** — dar-backup is designed around one backup run per day\n   per definition (one FULL, one DIFF, one INCR). If you need hourly or continuous backups,\n   look at `restic` or `BorgBackup` instead\n\n---\n\n## TL;DR\n\n```bash\n# prep\nsudo apt -y install dar par2 python3 python3-venv\nINSTALL_DIR=/tmp/dar-backup; mkdir \"$INSTALL_DIR\" \u0026\u0026 cd \"$INSTALL_DIR\"\npython3 -m venv venv    # create a virtual environment\n. venv/bin/activate     # activate the virtual environment\n# install and run dar-backup\npip install dar-backup\ndemo --install \u0026\u0026 manager --create-db\ndar-backup --full-backup\n```\n\n`dar-backup` runs FULL, DIFF, and INCR backup cycles across as many backup definitions as you\nneed (e.g. `photos`, `documents`, `homevideos`). After each archive it:\n\n1. **Verifies** the archive with `dar -t`\n2. **Restore-tests** a random sample of files and compares them byte-for-byte against the source\n3. **Creates PAR2 redundancy files** so the archive can be repaired if bitrot occurs later\n4. **Notifies** your Discord channel on completion or failure\n\nSchedules are managed by systemd timers (generated for you). Catalogs of every archive are\nmaintained by `dar_manager`, enabling single-file Point-in-Time Recovery without a database\nserver.\n\nVersion **1.1.2** · reached **1.0.0** on October 9, 2025 · [Changelog](CHANGELOG.md)\n\n---\n\n## Why not just use restic / BorgBackup / rsync?\n\nThose are excellent tools. `dar-backup` fills a different niche:\n\n| Concern | dar-backup |\n|---|---|\n| Run as non-root on FUSE mounts | ✅ designed for this |\n| Bitrot repair without re-downloading | ✅ PAR2 travels with the archive |\n| Restore a single file to a specific date | ✅ PITR via dar_manager catalogs |\n| No dependency on original system to restore | ✅ one static `dar` binary is enough |\n| Archive integrity testable anywhere | ✅ `par2verify` + `dar -t` work offline |\n| Transparent, auditable backup content | ✅ `dar` archives are well-documented |\n\nIf your threat model is *\"I need to recover a file I deleted three months ago, on a machine I\nno longer have, from a USB disk I kept offsite\"* — `dar-backup` is built for exactly that.\n\n---\n\n## Why not just use tar?\n\n`tar` is the tool almost every Linux user reaches for first — and for good reason. It is simple, universal, and ships on every system. `dar` was written as a deliberate improvement on `tar` for long-term archival, and the differences matter:\n\n| Capability | tar | dar-backup |\n|---|---|---|\n| FULL / DIFF / INCR backup cycles | ❌ workarounds only | ✅ native, first-class |\n| Archive integrity test | ❌ no built-in verify | ✅ `dar -t` after every backup |\n| Restore-test a random sample | ❌ manual | ✅ automatic after each run |\n| Repair a corrupt archive | ❌ not possible | ✅ PAR2 files travel with the archive |\n| Restore a single file to a specific date | ❌ no catalogue | ✅ PITR via `dar_manager` catalogs |\n| Sliced archives (fits onto fixed-size media) | ❌ | ✅ configurable slice size |\n| Extended attributes and ACLs | ⚠️ flag-dependent | ✅ handled correctly by default |\n| No dependency on original system to restore | ✅ | ✅ one static `dar` binary is enough |\n\nIn short: `tar` is excellent for one-off archiving and moving files around.\n`dar-backup` is for people who want to know their data is intact and recoverable — years from now,\non hardware they don't own yet.\n\n---\n\n## Features\n\n- **FULL / DIFF / INCR backup cycles** — per backup definition, independently scheduled\n- **Automatic archive verification** — `dar -t` after every backup run\n- **Automatic restore test** — random files extracted and compared to source after each backup;\n  configurable excludes for cache dirs, temp files, locks\n- **PAR2 redundancy** — configurable coverage per backup type (FULL/DIFF/INCR);\n  optionally stored in a separate directory (different device or offsite mount)\n- **Point-in-Time Recovery** — `dar_manager` catalogs let you locate and restore any file\n  to any date across your full archive history\n- **Metrics and dashboard** - optional [detailed metrics](v2/doc/dashboard-and-metrics.md#metrics-database) and [dashboard](v2/doc/dashboard-and-metrics.md#dashboard)\n- **Runs as a normal user** — no root needed; works correctly on FUSE-mounted filesystems\n- **systemd integration** — timer units generated for you with sensible default schedules\n- **Discord notifications** — webhook alerts on backup success or failure, from all CLI tools\n- **Shell autocompletion** — bash and zsh, context-aware (archive names filtered by definition)\n- **Clean logging** — three log files (main, command output, trace/debug), all rotating and\n  size-capped; `clean-log` strips verbose `dar` output when not needed\n- **No lock-in** — standard `dar` archives, standard PAR2 files; restore with just the `dar`\n  binary, no `dar-backup` installation required on the restore machine\n- **750+ tests** — unit and integration tests covering PAR2 bitrot repair, full/diff/incr\n  restore chains, PITR verification, and edge cases; CI on every commit\n\n✅ The author has used `dar-backup` ~5 years and has been saved by it multiple times.\n\n\u003e `dar-backup` stands on the shoulders of two projects that do the real work.\n\u003e Sincere thanks to **Denis Corbin** for `dar`, and to the **Parchive team** for `par2`.\n\u003e If you find `dar-backup` useful, consider giving those projects a star too.\n\n---\n\n## Dashboard\n\nEvery backup run writes structured metrics to a SQLite database. The built-in\n`dar-backup-dashboard` command fires up [datasette](https://datasette.io/) and\nopens the dashboard in your browser:\n\n[![dar-backup metrics dashboard](v2/doc/dar-backup-dashboard.png)](v2/doc/dar-backup-dashboard-full.png)\n\n→ [Dashboard \u0026 metrics documentation](v2/doc/dashboard-and-metrics.md)\n\n---\n\n## High-level architecture\n\n[![dar-backup overview](v2/doc/dar-backup-overview-small.png)](v2/doc/dar-backup-overview.png)\n\n---\n\n## Documentation\n\n| Document | Description |\n|---|---|\n| [Quick Guide](v2/doc/quick-guide.md) | Get started in minutes using the demo app |\n| [Getting Started](v2/doc/getting-started.md) | Manual setup for a real installation |\n| [Configuration Reference](v2/doc/config-reference.md) | Config file, .darrc, backup definitions, config history |\n| [Restoring](v2/doc/restoring.md) | Point-in-Time Recovery (PITR), restore examples |\n| [PAR2 Redundancy](v2/doc/par2.md) | Verify, repair, and create PAR2 files |\n| [systemd Setup](v2/doc/systemd-setup.md) | Generate and install systemd timers/services |\n| [Shell Autocompletion](v2/doc/shell-completion.md) | Bash and zsh tab-completion setup |\n| [Dashboard \u0026 Metrics](v2/doc/dashboard-and-metrics.md) | Metrics database, Datasette, dashboard |\n| [dar Tips](v2/doc/dar-tips.md) | File selection, merging archives, logging tips |\n| [CLI Reference](v2/doc/cli-reference.md) | All command options, exit codes, env vars |\n| [Troubleshooting](v2/doc/troubleshooting.md) | Error codes, FUSE issues, special characters |\n| [Development](v2/doc/dev.md) | Dev setup, testing, PyPI, building dar |\n| [Changelog](CHANGELOG.md) | High-level release history |\n| [Detailed Changelog](v2/Changelog.md) | Per-release details |\n\n---\n\n## My use case\n\nI needed the following:\n\n- Backup my workstation to a remote server\n- Backup primarily photos, home made video and different types of documents\n- I have cloud storage mounted on a directory within my home dir. The filesystem is [FUSE based](https://www.kernel.org/doc/html/latest/filesystems/fuse.html), which gives it a few special features\n  - Backup my cloud storage (cloud is convenient, but I want control over my backups)\n  - A non-privileged user can perform a mount\n  - A privileged user cannot look into the filesystem --\u003e a backup script running as root is not suitable\n\n- Have a simple way of restoring, possibly years into the future. 'dar' fits that scenario with a single statically linked binary (kept with the archives). There is no need install/configure anything - restoring is simple and works well.\n- During backup archives must be tested and a restore test (however small) performed\n- Archives stored on a server with a reliable file system (easy to mount a directory over sshfs)\n- Easy to verify archive's integrity, after being moved around.\n\n I do not need the encryption features of dar, as all storage is already encrypted.\n\n## My setup\n\n1. Primary backup to server with an ext4 file system on mdadm RAID1\n\n2. Secondary copies to multiple USB disks / cloud\n\n3. Archive integrity verification anywhere using [Par2](v2/doc/par2.md) and `dar -t`.\n\n4. Archive repair anywhere if needed. By default `dar-backup` creates par2 redundancy files with 5% coverage. Enough to fix localized bitrot.\n\n5. No dependency on original system\n\n### Why PAR2 is especially good for portable / offsite copies\n\nPAR2 parity is:\n\n\u003e Self-contained (travels with the data)\n\u003e\n\u003eFormat-agnostic (works on any filesystem)\n\u003e\n\u003eLocation-agnostic (local disk, USB, cloud object storage)\n\u003e\n\u003eTool-stable (PAR2 spec has not changed in years)\n\u003e\n\u003eThat means:\n\u003e\n\u003e**Integrity protection moves with the archive**.\n\n### Design choices\n\nMy design choices are boring, proven and pragmatic:\n\n- mdadm handles disks\n- PAR2 handles data integrity\n- You control when and how verification happens\n- Errors have a fair chance of being diagnosed and fixed, due to well known tooling.\n- No hidden magic, no lock-in\n\n---\n\n## Quick Guide\n\nStep-by-step walkthrough using the built-in `demo` application — install, backup, list, restore.\n\n→ [Quick Guide](v2/doc/quick-guide.md)\n\n---\n\n## dar-backup principles\n\n### dar-backup\n\n`dar-backup` is built in a way that emphasizes getting backups. It loops over the backup definitions, and in the event of a failure while backing up a backup definition, dar-backup shall log an error and start working on the next backup definition.\n\nThere are 3 levels of backups, FULL, DIFF and INCR.\n\n- The author does a FULL yearly backup once a year. This includes all files in all directories as defined in the backup definition(s) (assuming `-d` was not given).\n- The author makes a DIFF once a month. The DIFF backs up new and changed files **compared** to the **FULL** backup.\n\n  - No DIFF backups are taken until a FULL backup has been taken for a particular backup definition.\n\n- The author takes an INCR backup every 3 days. An INCR backup includes new and changed files **compared** to the **DIFF** backup.\n\n  - So, a set of INCR's will contain duplicates (this might change as I become more used to use the catalog databases)\n\n  - No INCR backups are taken until a DIFF backup has been taken for a particular backup definition.\n\nAfter each backup of a backup definition, `dar-backup` tests the archive and then performs a few restore operations of random files from the archive (see [config file](v2/doc/config-reference.md#config-file)). The restored files are compared to the originals to check if the restore went well.\n\n`dar-backup` skips doing a backup of a backup definition if an archive is already in place. So, if you for some reason need to take a new backup on the same date, the first archive must be deleted (I recommend using [cleanup](v2/doc/cli-reference.md#cleanup-options)).\n\n### cleanup\n\nThe `cleanup` application deletes DIFF and INCR if the archives are older than the thresholds set up in the configuration file.\n\n`cleanup` will only remove FULL archives if the option  `--cleanup-specific-archives` is used. It requires the user to confirm deletion of FULL archives.\n\nUse `--dry-run` to preview which archives, PAR2 files, and catalogs would be removed without deleting anything.\n\nExamples:\n\n```bash\ncleanup --dry-run -d media-files --log-stdout\ncleanup --dry-run --cleanup-specific-archives -d media-files media-files_INCR_2025-12-22\n```\n\n### manager\n\n`dar`has the concept of catalogs which can be exported and optionally be added to a catalog database. That database makes it much easier to restore the correct version of a backed up file if for example a target date has been set.\n\n`dar-backup` adds archive catalogs to their databases (using the `manager` script). Should the operation fail, `dar-backup` logs an error and continue with testing and restore validation tests.\n\n---\n\n## How to run\n\nManual setup for a real installation — configuration, catalog databases, first backup.\n\n→ [Getting Started](v2/doc/getting-started.md)\n\n---\n\n## Status\n\n**1.0.0 milestone reached**\n\nOctober 9, 2025, version **1.0.0** was released after extensive testing. The current release is **1.1.2**.\n\n### GPG Signing key\n\nTo increase the security and authenticity of dar-backup packages, all releases from v2-beta-0.6.18 onwards will be digitally signed using the GPG key below.\n\n\u003cbr\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e🎯 GPG Signing Key Details\u003c/summary\u003e\n\n```text\nName:        Per Jensen (author of dar-backup)\nEmail:       dar-backup@pm.me\nPrimary key: 4592 D739 6DBA EFFD 0845  02B8 5CCE C7E1 6814 A36E\nSigning key: B54F 5682 F28D BA36 22D7  8E04 58DB FADB BBAC 1BB1\nCreated:     2025-03-29\nExpires:     2030-03-28\nKey type:    ed25519 (primary, SC)\nSubkeys:     ed25519 (S), ed25519 (A), cv25519 (E)\n```\n\n\u003cbr\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e🎯 Where to Find Release Signatures\u003c/summary\u003e\n\nPyPI does *Not* host .asc Signature Files\n\nAlthough the `dar-backup` packages on PyPI are GPG-signed, PyPI itself does **not support uploading** .asc detached signature files alongside `.whl` and `.tar.gz` artifacts.\n\nTherefore, you will not find `.asc` files on PyPI.\n\n**Where to Get `.asc` Signature Files**\n\nYou can always download the signed release artifacts and their `.asc` files from the official GitHub Releases page:\n\n📁 GitHub Releases for `dar-backup`\n\nEach release includes:\n\n- `dar_backup-x.y.z.tar.gz`\n\n- `dar_backup-x.y.z.tar.gz.asc`\n\n- `dar_backup-x.y.z-py3-none-any.whl`\n\n- `dar_backup-x.y.z-py3-none-any.whl.asc`\n\n\u003c/details\u003e\n\n\u003cbr\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e🎯 How to Verify a Release from GitHub\u003c/summary\u003e\n\n1. Import the GPG public key:\n\n   ```bash\n   curl https://keys.openpgp.org/vks/v1/by-fingerprint/4592D7396DBAEFFD084502B85CCEC7E16814A36E | gpg --import\n   ```\n\n2. Download the wheel or tarball and its .asc signature from the GitHub.\n\n3. Run GPG to verify it:\n\n   ```bash\n   gpg --verify dar_backup-x.y.z.tar.gz.asc dar_backup-x.y.z.tar.gz\n   # or\n   gpg --verify dar_backup-x.y.z-py3-none-any.whl.asc dar_backup-x.y.z-py3-none-any.whl\n   ```\n\n4. If the signature is valid, you'll see:\n\n   ```text\n   gpg: Good signature from \"Per Jensen (author of dar-backup) \u003cdar-backup@pm.me\u003e\"\n   ```\n\n🛡️ Reminder: Verify the signing subkey\n\nOnly this subkey is used to sign PyPI packages:\n\n```text\nB54F 5682 F28D BA36 22D7  8E04 58DB FADB BBAC 1BB1\n```\n\nYou can view it with:\n\n```bash\ngpg --list-keys --with-subkey-fingerprints dar-backup@pm.me\n```\n\n\u003c/details\u003e\n\n\u003c/details\u003e\n\n---\n\n## License\n\n  These scripts are licensed under the GPLv3 license.\n  Read more here: [GNU  GPL3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), or have a look at the [\"LICENSE\"](LICENSE) file in this repository.\n\n## Requirements\n\n- A linux system\n- dar\n- parchive (par2)\n- python3\n- python3-venv\n\nOn Ubuntu, install the requirements this way:\n\n```bash\n    sudo apt install dar par2 python3 python3-venv\n```\n\n## Homepage - Github\n\n'dar-backup' package lives here: [Github - dar-backup](https://github.com/per2jensen/dar-backup/tree/main/v2)\n\n## Community\n\nPlease review the [Code of Conduct](CODE_OF_CONDUCT.md) to help keep this project welcoming and focused.\n\n## Projects these scripts benefit from\n\n 1. [The wonderful dar achiver](https://github.com/Edrusb/DAR)\n 2. [The Parchive suite](https://github.com/Parchive)\n 3. [shellcheck - a bash linter](https://github.com/koalaman/shellcheck)\n 4. [Ubuntu of course :-)](https://ubuntu.com/)\n 5. [PyPI](https://pypi.org/)\n\n\u003c!-- markdownlint-enable MD024 --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fper2jensen%2Fdar-backup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fper2jensen%2Fdar-backup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fper2jensen%2Fdar-backup/lists"}