{"id":43486855,"url":"https://github.com/ciehanski/kip","last_synced_at":"2026-02-03T09:12:58.581Z","repository":{"id":37182554,"uuid":"276981000","full_name":"ciehanski/kip","owner":"ciehanski","description":"A simple encrypted backups tool written in Rust.","archived":false,"fork":false,"pushed_at":"2024-02-04T17:17:41.000Z","size":8364,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2026-01-14T17:01:52.575Z","etag":null,"topics":["argon2","aws-s3","backup","backup-cli","backup-manager","backup-tool","backup-utility","backups","chacha20poly1305","cli","encryption","rust","s3"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/ciehanski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null}},"created_at":"2020-07-03T20:20:28.000Z","updated_at":"2022-10-26T02:41:44.000Z","dependencies_parsed_at":"2023-02-12T17:15:39.153Z","dependency_job_id":"7361558b-2c77-48e1-90b6-d893a663056e","html_url":"https://github.com/ciehanski/kip","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ciehanski/kip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciehanski%2Fkip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciehanski%2Fkip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciehanski%2Fkip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciehanski%2Fkip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ciehanski","download_url":"https://codeload.github.com/ciehanski/kip/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ciehanski%2Fkip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29039347,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T08:41:49.363Z","status":"ssl_error","status_checked_at":"2026-02-03T08:40:19.255Z","response_time":96,"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":["argon2","aws-s3","backup","backup-cli","backup-manager","backup-tool","backup-utility","backups","chacha20poly1305","cli","encryption","rust","s3"],"created_at":"2026-02-03T09:12:57.874Z","updated_at":"2026-02-03T09:12:58.576Z","avatar_url":"https://github.com/ciehanski.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kip [![build](https://github.com/ciehanski/kip/actions/workflows/ci.yml/badge.svg)](https://github.com/ciehanski/kip/actions/workflows/ci.yml)\n\n⚠️ This project is still in active development and is not ready for production, but it works ⚠️\n\nEncrypted backups using [XChaCha20Poly1305](https://tools.ietf.org/html/rfc7539) AEAD with a 24-byte nonce generated by\nOS calls. The key used is a 32-byte hash of a user provided secret utilizing [argon2id](https://en.wikipedia.org/wiki/Argon2),\na hybrid version of the key derivation functions: argon2i \u0026 argon2d. This is used for verifying any changes to\nyour backup jobs as well as encrypting all files that are uploaded to the specified provider.\n Compression is enabled by default using [zstd](https://en.wikipedia.org/wiki/Zstd). [FastCDC](https://www.usenix.org/system/files/conference/atc16/atc16-paper-xia.pdf) is implemented for deduplication. Lastly, all uploads are completed asyncrousnously!\n\nkip is the result of a personal challenge. Firstly, learn Rust. Secondly,\nbuild myself a replacement encrypted backup tool because the one I'm currently using has\nan expiring trial, which ends soon. It's closed source as well so I \nreally don't know if the implementation of their encryption suite is flawed or not.\nPlus, I really wanted to look into using XChaCha20Poly1305 which is not usually\nsupported by your typical backup tool. There's plenty of other open source encrypted \nbackup options available, but this seemed like more fun for me.\n\nBackups and restores are functional in the current state. I'm still heavily \nmodifying the API and configuration files, though. Upgrade paths will be provded\nwhen necessary.\n\n## Features\n\n- Backups are fully encrypted w/ XChaCha20Poly1305\n- zstd for backup compression\n- FastCDC for chunking \u0026 deduplication\n- Async upload to **AWS S3**\n- Async upload to **Google Drive**\n- Async(ish) upload to **USB drives**\n\n## TODO\n\n- Add network path (SMB / NFS) as a provider\n- Add backup rotation support\n- Improve logging \n\n## Usage\n\n#### Create a new backup job:\n\n```bash\n$ kip init \u003cjob\u003e\n$ kip init documents_backup\n$ kip init profile_backup\n```\n\n#### Remove a backup job:\n\n```bash\n$ kip remove \u003cjob\u003e\n$ kip rm documents_backup\n```\n\n#### Add files to a backup job:\n\n```bash\n$ kip add \u003cjob\u003e -f \u003cfiles\u003e\n$ kip add documents_backup -f \"Documents/\"\n$ kip add profile_backup -f \"Documents/\" \"Desktop/\" \"Downloads/\" \".bashrc\"\n```\n\n#### Remove files from a backup job:\n\n```bash\n$ kip remove \u003cjob\u003e -f \u003cfiles\u003e\n$ kip rm profile_backup -f \".bashrc\" \"Desktop/\"\n```\n\n#### Remove a file from a backup job and purge it from all previous backups:\n\n```bash\n$ kip remove \u003cjob\u003e -f \u003cfiles\u003e -p\n$ kip rm documents_backup -f \".bashrc\" -p\n```\n\n#### Exclude a file from a backup job\n\n```bash\n$ kip exclude \u003cjob\u003e -f \u003cfiles\u003e\n$ kip exclude documents_backup -f \".bashrc\"\n```\n\n#### Exclude a file extension from a backup job\n\n```bash\n$ kip exclude \u003cjob\u003e -e \u003cfile_extension\u003e\n$ kip exclude documents_backup -e \"pdf\"\n```\n\n#### Start a manual backup run:\n\n```bash\n$ kip push \u003cjob\u003e\n$ kip push documents_backup\n```\n\n#### Start a restore:\n\n```bash\n$ kip pull \u003cjob\u003e -r \u003crun\u003e\n$ kip pull documents_backup -r 1\n```\n\n#### Pause a job:\n\n```bash\n$ kip pause \u003cjob\u003e\n$ kip pause documents_backup\n```\n\n#### Resume a job:\n\n```bash\n$ kip resume \u003cjob\u003e\n$ kip resume profile_backup\n```\n\n#### List backup jobs with their metadata:\n\n```bash\n$ kip status \u003cjob\u003e -r \u003crun\u003e\n$ kip status\n$ kip ls documents_backup\n$ kip ls documents_backup -r 1\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciehanski%2Fkip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fciehanski%2Fkip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fciehanski%2Fkip/lists"}