{"id":13408510,"url":"https://github.com/andrewchambers/bupstash","last_synced_at":"2025-04-14T11:21:58.969Z","repository":{"id":37936815,"uuid":"290352550","full_name":"andrewchambers/bupstash","owner":"andrewchambers","description":"Easy and efficient encrypted backups.","archived":false,"fork":false,"pushed_at":"2024-02-16T20:34:39.000Z","size":1632,"stargazers_count":900,"open_issues_count":130,"forks_count":32,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-06T13:52:37.041Z","etag":null,"topics":["backups","encryption"],"latest_commit_sha":null,"homepage":"https://bupstash.io","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrewchambers.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":"support/bindgen.sh","governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-08-26T00:14:36.000Z","updated_at":"2025-04-01T13:23:39.000Z","dependencies_parsed_at":"2024-01-07T21:02:15.114Z","dependency_job_id":"e1002650-20d4-4bc9-87aa-26d78f08e74a","html_url":"https://github.com/andrewchambers/bupstash","commit_stats":{"total_commits":743,"total_committers":14,"mean_commits":53.07142857142857,"dds":0.09017496635262445,"last_synced_commit":"8bd3548c1b6c462bd208404f1f84ba6446422578"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewchambers%2Fbupstash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewchambers%2Fbupstash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewchambers%2Fbupstash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewchambers%2Fbupstash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrewchambers","download_url":"https://codeload.github.com/andrewchambers/bupstash/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248868961,"owners_count":21174793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["backups","encryption"],"created_at":"2024-07-30T20:00:53.328Z","updated_at":"2025-04-14T11:21:58.947Z","avatar_url":"https://github.com/andrewchambers.png","language":"Rust","funding_links":[],"categories":["\u003ca name=\"backup\"\u003e\u003c/a\u003eBackup","Rust","encryption","others"],"sub_categories":[],"readme":"# Bupstash\n\n[![Gitter](https://badges.gitter.im/bupstash/community.svg)](https://gitter.im/bupstash/community?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge)\n\nBupstash is a tool for encrypted backups - if you need secure backups, Bupstash is the tool for you.\n\n\nBupstash was designed to have:\n\n- Efficient deduplication - Bupstash can store thousands of encrypted directory snapshots using a fraction of the space encrypted tarballs would require.\n\n- Strong privacy - Data is encrypted client side and the repository never needs has access to the decryption keys.\n\n- Offline decryption keys - Backups do not require the decryption key be anywhere near an at-risk server or computer.\n\n- Key/value tagging with search - all while keeping the tags fully encrypted.\n\n- Great performance on slow networks - Bupstash really strives to work well on high latency networks like cellular and connections to far-off lands.\n\n- Secure remote access controls - Ransomware, angry spouses, and disgruntled business partners will be powerless to delete your remote backups.\n\n- Efficient incremental backups - Bupstash knows what it backed up last time and skips that work.\n\n- Fantastic performance with low ram usage - Bupstash won't bog down your production servers.\n\n- Safety against malicious attacks - Bupstash is written in a memory safe language to dramatically reduce the attack surface over the network.\n\n## Stability and Backwards Compatibility\n\nBupstash is beta software, while all efforts are made to keep bupstash bug free, we currently recommend\nusing bupstash for making *REDUNDANT* backups where failure can be tolerated.\n\nThe repository format is approaching stability, and will not be changed\nin a backwards incompatible way unless there is *very* strong justification. Future changes will most likely be backwards compatible, or come with a migration path if it is needed at all.\n\n# Guides, documentation and support\n\n- Visit the [project website](https://bupstash.io).\n- Visit the [quickstart guide](https://bupstash.io/doc/guides/Getting%20Started.html) for an introductory tutorial.\n- Visit the [filesystem backups guide](https://bupstash.io/doc/guides/Filesystem%20Backups.html) for examples of making backups.\n- Visit the [man pages](https://bupstash.io/doc/man/bupstash.html) for more comprehensive documentation.\n- Visit the [community chat](https://gitter.im/bupstash/community?utm_source=share-link\u0026utm_medium=link\u0026utm_campaign=share-link) or the [community forum](https://github.com/andrewchambers/bupstash/discussions) to ask questions.\n- Read the introductory [blog post](https://acha.ninja/blog/introducing_bupstash/).\n- Read the [technical overview](./doc/technical_overview.md) to understand how it works.\n\n# Typical usage\n\nInitialize a new Bupstash repository via ssh.\n```\n$ export BUPSTASH_REPOSITORY=ssh://$SERVER/home/me/backups\n$ # Ensure bupstash is on the $PATH of both machines.\n$ bupstash init\n```\n\nCreate a new encryption key, and tell bupstash to use it.\n```\n$ bupstash new-key -o backups.key\n$ export BUPSTASH_KEY=\"$(pwd)/backups.key\"\n```\n\nSave a directory as a tarball snapshot.\n```\n$ bupstash put hostname=\"$(hostname)\" ./some-data\nebb66f3baa5d432e9f9a28934888a23d\n```\nSave the output of a command, checking for errors.\n```\n$ bupstash put --exec name=database.sql pgdump mydatabase\n14ebd2073b258b1f55c5bbc889c49db4\n```\n\nList items matching a query.\n```\n$ bupstash list name=\"backup.tar\" and hostname=\"server-1\"\nid=\"bcb8684e6bf5cb453e77486decf61685\" name=\"some-file.txt\" hostname=\"server-1\" timestamp=\"2020/07/27 11:26:16\"\n```\n\nList files in a backup.\n```\n$ bupstash list-contents id=bcb86*\ndrwxr-xr-x 0B 2020/10/30 13:32:04 .\n-rw-r--r-- 7B 2020/10/30 13:32:04 hello.txt\n```\n\nGet an item matching a query.\n```\n$ bupstash get id=bcb8684e6bf5cb453e77486decf61685\nsome data...\n\n$ bupstash get id=\"ebb66*\" | tar -C ./restore -xf -\n```\n\nFetch a single file from a backup.\n```\n$ bupstash get --pick hello.txt id=\"bcb86*\"\nhello!\n```\n\nDiff backups, with local directories or other backups.\n```\n$ bupstash diff /home/ac :: id=\"a4b8f*\"\n...\n- -rw------- 14.50KiB    2021/08/01 02:36:19 .bash_history\n+ -rw------- 13.66KiB    2021/08/01 11:51:23 .bash_history\n```\n\nRestore backups to a local directory.\n\n```\n$ mkdir restore-dir\n$ bupstash restore --into ./restore-dir id=\"a4b8f*\"\n```\n\nRemove items matching a query.\n```\n$ bupstash rm name=some-data.txt and older-than 30d\n```\n\nRun the garbage collector to reclaim disk space.\n```\n$ bupstash gc\n```\n\n# Installation\n\n## From source\n\nFirst ensure you have a recent rust+cargo, pkg-config and libsodium-dev (\u003e= 1.0.14) package installed.\n\nNext clone the repository and run cargo build.\n```\n$ git clone https://github.com/andrewchambers/bupstash\n$ cd bupstash\n$ cargo build --release\n$ cp ./target/release/bupstash $INSTALL_DIR\n```\n\n### Pkgconf\n\nYou can use pkgconf instead of pkg-config (this is required on freebsd) by setting\nthe PKG_CONFIG environment variable.\n\n```\n$ export PKG_CONFIG=pkgconf\n```\n\n\n## Building man pages\n\nThe man pages are currently build using a markdown to man page renderer called [ronn](https://github.com/rtomayko/ronn).\n\n```\n$ cd doc/man\n$ ronn -r *.md\n```\n\n## Generating release tarballs\n\n```\n$ sh support/src-release.sh $tag\n$ echo bupstash-*.tar.gz\nbupstash-$version-man.tar.gz\nbupstash-$version-src+deps.tar.gz\n```\n\n## Test suites\n\nInstall bash automated test framework and run the following to run both the unit tests, and cli integration test suite.\n\n```\n$ cargo test\n$ cargo build --release\n$ export PATH=${CARGO_TARGET_DIR:-$PWD/target}/release:$PATH\n$ bats ./cli-tests\n```\n\n## Precompiled releases\n\nHead to the [releases page](https://github.com/andrewchambers/bupstash/releases) and download for \na build for your platform. Simply extract the archive and add the single bupstash binary to your PATH.\n\nCurrently we only precompile for linux (help wanted for more platforms).\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewchambers%2Fbupstash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrewchambers%2Fbupstash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewchambers%2Fbupstash/lists"}