Backups of GitHub you can actually restore.
Your repositories, history, issues and pull requests — backed up automatically, independently and recoverably, into storage you control.
- A read-only GitHub App: Branchark can never change your code.
- Archives land in your own S3, R2 or B2 bucket, mirrors in GitLab.
- Restore with tar, git and sha256sum. No Branchark needed.
-
Today, 02:00 Running
Exporting pull request reviews
Started 6 minutes ago
-
Yesterday Complete
48 refs, 1,204 issues, 386 pull requests
Verified in 2 buckets
-
Monday Complete
47 refs, 1,198 issues, 384 pull requests
Verified in 2 buckets
-
Sunday Partial
Archive verified
GitLab mirror rejected a force-push
-
Saturday Complete
47 refs, 1,190 issues
Verified in 2 buckets
-
Friday Failed
Bucket credentials rejected
Owner notified, fixed the same day
One file per recovery point. No proprietary format.
Each snapshot is a plain tar archive: a verified Git bundle with every branch, tag and pull request ref, Git LFS objects, and GitHub metadata as gzipped JSON Lines — exactly as the API returned it, with original IDs, authors and timestamps.
-
Verified after upload
Branchark downloads what it stored and compares SHA-256 checksums before calling a backup complete.
-
Every destination on its own
One bucket failing never hides behind another succeeding. You see each copy’s state.
-
On your schedule
Daily or weekly, in your time zone, safe across daylight-saving changes.
branchark-acme-payments-api-20261021T020000Z/
├── manifest.json schema, source ids, components, checksums
├── checksums.sha256 for sha256sum -c
├── RESTORE.md instructions for this snapshot
├── git/
│ ├── repository.bundle all branches, tags, refs/pull/*
│ └── refs.txt
├── lfs/objects/… Git LFS content
└── metadata/
├── repository.json
├── issues.jsonl.gz
├── issue_comments.jsonl.gz
├── pull_requests.jsonl.gz
├── pull_request_reviews.jsonl.gz
├── pull_request_review_comments.jsonl.gz
├── labels.jsonl.gz
├── milestones.jsonl.gz
└── releases.jsonl.gz
Recover without us.
If GitHub locks an account, a repository is deleted, or you simply leave, your archives still work. Standard tools restore the full history; the bundled guide explains the rest.
tar -xf SNAPSHOT.tar && cd branchark-acme-payments-api-*
sha256sum -c checksums.sha256
git clone --mirror git/repository.bundle payments-api.git
cd payments-api.git
git push https://git.example.com/acme/payments-api.git \
'refs/heads/*:refs/heads/*' 'refs/tags/*:refs/tags/*'
What a backup can and cannot give back.
Preserved
- Complete Git history of every branch, tag and pull request ref
- Issues, comments, pull requests, reviews, labels, milestones and releases with original IDs and timestamps
- Git LFS objects and release assets, when enabled
Not recreated automatically
- Issues imported elsewhere get new numbers, authors and dates — the archive keeps the originals
- Reactions, project boards, discussions, Actions and repository settings are not exported
- A GitLab mirror holds Git history only; it is not a substitute for an archive
Start with one repository.
Install the read-only GitHub App, add a bucket, and take your first verified snapshot in a few minutes.