{"id":18574442,"url":"https://github.com/proofrock/snapkup","last_synced_at":"2025-06-10T13:06:47.058Z","repository":{"id":132816769,"uuid":"413787258","full_name":"proofrock/snapkup","owner":"proofrock","description":"A snapshot-based backup tool, easy to understand and use","archived":false,"fork":false,"pushed_at":"2021-11-25T11:16:13.000Z","size":214,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-17T14:49:20.836Z","etag":null,"topics":["backup","cli","go","kingpin","siphash","snapshot","xchacha20-poly1305","zstd"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/proofrock.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}},"created_at":"2021-10-05T11:22:10.000Z","updated_at":"2023-02-17T00:41:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"1d0c4ac9-9d1c-4cde-a2ef-50a0d90abc47","html_url":"https://github.com/proofrock/snapkup","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proofrock%2Fsnapkup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proofrock%2Fsnapkup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proofrock%2Fsnapkup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proofrock%2Fsnapkup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/proofrock","download_url":"https://codeload.github.com/proofrock/snapkup/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254442856,"owners_count":22071878,"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":["backup","cli","go","kingpin","siphash","snapshot","xchacha20-poly1305","zstd"],"created_at":"2024-11-06T23:15:24.452Z","updated_at":"2025-05-16T00:10:06.158Z","avatar_url":"https://github.com/proofrock.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🗃️ snapkup v0.3.2.1\n\nSnapkup is a simple backup tool that takes snapshots of your filesystem (or the parts that you'll decide), storing them\nefficiently and conveniently.\n\n## Basic workflow\n\nThe basic flow is:\n\n- You initialize an empty directory that will store the backups\n- You register one or more backup roots, directory or files that will be snapshotted\n- You take one or more snapshots. Snapkup lists all the tree for those roots, taking a copy of the contents\n- You can restore the situation of the roots at any given snapshot\n- Of course, it's possible to list roots and snapshots and delete any of them, and perform all the other admin ops \n\nNotable points:\n\n- Files are deduplicated: only one copy of a file is stored, across the filesystem and all the snapshots\n- Everything stored on-disk is encrypted, using `XChaCha20Poly1305`\n- Checksums, using authenticated 128-bit `SipHash`, are used to perform deduplication and integrity\n- By default, everything is compressed using `zstd -19`. Incompressible files are stored as not compressed.\n- Small files can be merged in \"agglos\", to reduce the number of files and make it more sync-friendly (e.g. for Dropbox)\n- Snapkup favors features and code readability over speed. It's not slow, though!\n- All paths are converted to absolute paths, for consistency.\n- Cross-platform portability of backup archives is not a priority, though it should reasonably work.\n\nPlans for the future:\n\n- Ability to produce all outputs as JSON, for better script-ability\n- Ability to retrieve files from external filesystems, via SSH\n- Ability to back up data that come from the execution of a command (e.g. `crontab -l`)\n- FUSE-mount a snapshot\n\n## Documentation\n\nPlease see the [GitBook Documentation](https://germ.gitbook.io/snapkup/) that sports a tutorial and the documentation for all the commands!\n\n## Status\n\nEverything described in the documentation should work. **It's still at an early stage of development, so don't trust it with any \ncritical data, yet**. \n\nNext steps:\n\n- Further unit testing\n- Improve documentation\n  - Document the on-disk layout of files, for external review\n- Better error handling\n- Better recovery of the data structures from errors\n- Better/more convenient handling of passwords\n\n## Build\n\n`cd` to the `src/` dir and `go build`. On UNIX systems you can also use `make build` from the root.\n\nIt uses `CGO`, so cross-compilation comes with the usual caveats, and a proper build stack should be installed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproofrock%2Fsnapkup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fproofrock%2Fsnapkup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproofrock%2Fsnapkup/lists"}