{"id":37075176,"url":"https://github.com/kennylajara/runup","last_synced_at":"2026-01-14T08:50:48.745Z","repository":{"id":38208212,"uuid":"373654669","full_name":"kennylajara/RunUp","owner":"kennylajara","description":"RunUp is a backup system that can be managed by command line. It is intended to be easy to use, fast and secure.","archived":true,"fork":false,"pushed_at":"2023-02-21T05:57:41.000Z","size":1137,"stargazers_count":0,"open_issues_count":25,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-09T04:55:51.321Z","etag":null,"topics":["backup","backup-cli","backup-manager","backup-solution","backup-tool","backups","linux-backup","linux-time-machine","linux-timemachine","time-machine","timemachine"],"latest_commit_sha":null,"homepage":"https://runup.readthedocs.io/","language":"Cython","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kennylajara.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null},"funding":{"github":null,"patreon":"kennylajara","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://paypal.me/kennylajara"]}},"created_at":"2021-06-03T22:15:22.000Z","updated_at":"2023-09-27T11:33:49.000Z","dependencies_parsed_at":"2023-02-10T20:30:47.481Z","dependency_job_id":null,"html_url":"https://github.com/kennylajara/RunUp","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/kennylajara/RunUp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennylajara%2FRunUp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennylajara%2FRunUp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennylajara%2FRunUp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennylajara%2FRunUp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kennylajara","download_url":"https://codeload.github.com/kennylajara/RunUp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennylajara%2FRunUp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414698,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["backup","backup-cli","backup-manager","backup-solution","backup-tool","backups","linux-backup","linux-time-machine","linux-timemachine","time-machine","timemachine"],"created_at":"2026-01-14T08:50:46.351Z","updated_at":"2026-01-14T08:50:48.727Z","avatar_url":"https://github.com/kennylajara.png","language":"Cython","funding_links":["https://patreon.com/kennylajara","https://paypal.me/kennylajara","https://www.paypal.com/donate?business=P8CT5NJ22N3UC\u0026no_recurring=0\u0026currency_code=USD"],"categories":[],"sub_categories":[],"readme":"# RunUp\n\n[![GitHub](https://img.shields.io/github/license/kennylajara/RunUp?style=for-the-badge\u0026color=%230374b4)](https://github.com/kennylajara/RunUp/blob/main/LICENSE)\n[![Python version](https://img.shields.io/pypi/pyversions/RunUp?label=Python%20Support\u0026style=for-the-badge)](https://runup.readthedocs.io/en/latest/getting-started/#requirements)\n[![PyPI](https://img.shields.io/pypi/v/RunUp?style=for-the-badge\u0026color=%230374b4\u0026label=Version\u0026logoColor=%23ffffff)](https://pypi.org/project/RunUp/)\n\n\nRunUp is a backup solution that implements a new backup strategy: fragmented backups. This solution solves all the drawbacks of traditional strategies.\n\n## Fragmented backup\n\nThere are three typical backup strategies: Full backups, incremental backups and differential backups:\n\n* Full backups duplicate unmodified data and are very slow to create, but are easier and faster to restore. \n\n* Differential backups still create full backups (say weekly) and create partial backups _containing only the new and modified files since the last full backup_ (say daily). This may reduce data duplication somewhat and makes partial backups faster than the full backup, but it makes restore slower because you need to restore the last full backup and the last differential backup.\n\n* Incremental backups work in the same way as differential backups but partial backups _only contain the files changed since the last full or partial backup_. This reduces data duplication even further and makes partial backups faster, but makes data restoration even slower, as you will have to restore the last full backup and all partial backups created after the full backup, in order.\n\nWith the above information in mind, I have come up with fragmented backups, a new backup strategy that only creates a full backup the first time, then all backups will be incremental backups. But the unchanged files are associated with the previously stored files, so during the backup restore, it is possible to \"merge the fragments\" and make the restore as fast as if it were a full backup.\n\n## Key features\n\n**Saves disk space**\n\nFiles are never duplicated in the backup storage, even if they are duplicated in the repository or renamed without changing the content.\n\n**Create faster backups**\n\nEach backup contains only one copy of new or changed files. This allows us to create backups faster, saving time and memory usage.\n\n**Quick restoration of backups**\n\nWhen restoring data, we handle it as a full backup, so we don't have the inconvenience of tools that implement traditional partial backup strategies.\n\n\n## Usage\n\nThe installation with PIP will not work as I am still in the process to open source this project. To install it, follow the steps below:\n\n```\n# Clone the repo\ngit clone https://github.com/kennylajara/RunUp.git\n# Get into the folder\ncd RunUp\n# Create and activate environment\npython -m venv venv \u0026\u0026 source venv/bin/activate\n# Install development dependencies\npip install -r requirements-dev.txt\n# Compile (we are using Cython)\npython setup.py build_ext --inplace\n# Install package\npip install --editable .\n# Test it has been installed successfully\nrunup --version \n# See how to use the package\nrunup --help\n```\n\n\u003c!--\nInstall RunUp with PIP:\n\n```\npython3 -m pip install runup\n```\n--\u003e\n\nCreate a `runup.yaml` file with the configuration of your backups. This is an example to back up all files in the same directory as the configuration file:\n\n```\nversion: '1'\n\nproject:\n  projectname:\n    include: \n      - '.'\n```\n\nInitialize RunUp.\n\n```\nrunup init\n```\n\nCreate a backup\n\n```\nrunup backup\n```\n\nRestore the latest backup\n\n```\nrunup restore\n```\n\nFor details or more advanced options, see the [documentation](https://runup.readthedocs.io/en/latest/).\n\n## License\n\nThis Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at [https://mozilla.org/MPL/2.0/](https://mozilla.org/MPL/2.0/).\n\n## Contribution\n\nContributions are welcome! See the [Contributor's Guide](https://github.com/kennylajara/RunUp/blob/main/CONTRIBUTING.md).\n\n## Donation\n\nThis is a Free Open Source Software. If this project is of value to you, consider making a donation.\n\n[![Donate me](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/donate?business=P8CT5NJ22N3UC\u0026no_recurring=0\u0026currency_code=USD)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkennylajara%2Frunup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkennylajara%2Frunup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkennylajara%2Frunup/lists"}