# gitdr

> Back up your whole git org to storage nobody can delete.

gitdr mirrors every repo in a GitHub or GitLab organization to WORM-immutable object
storage, checks the lock before it writes a single byte, and signs what it stored. One
static Linux binary. No agents, no control plane, no phone-home. Your bucket, your keys.

    go install gitdr.io/gitdr/cmd/gitdr@latest

## What a run does

One job, five steps, in order. It exits non-zero if any of them fail.

1. **Enumerate.** List every repo in the org over read-only source scopes.
2. **Verify WORM.** Probe object-lock or retention. No lock means a loud warning, or a hard
   stop with `--require-worm`.
3. **Bundle.** Full mirror clone plus LFS, packed into one git bundle, SHA-256 streamed.
4. **Upload.** Create-only put with a retain-until date. Nothing ever overwrites.
5. **Sign.** An ed25519-signed manifest of the whole run: keys, sizes and checksums.

## Why it holds up

- **WORM, or it tells you.** Immutability is verified before the first byte. gitdr will not
  quietly leave you unprotected.
- **No delete, by construction.** The storage layer has no delete, remove or overwrite
  method anywhere in the codebase. Backups are append-only because the code cannot do
  otherwise.
- **Everything is signed.** `gitdr verify` re-downloads each object and re-checks the
  signature and every hash, so you learn the backup is intact before you need it.
- **No telemetry.** Ever. Credentials come from the environment or your cloud's default
  credential chain, and are redacted in every log line.

## Read on

- [Quickstart](https://gitdr.io/docs/quickstart.md), a verified immutable backup in about
  ten minutes
- [WORM buckets](https://gitdr.io/docs/worm.md), how to make the destination immutable, per
  provider
- [Restore runbook](https://gitdr.io/docs/restore.md), how to get the repos back
- [Security](https://gitdr.io/docs/security.md), the design stance and how to report a
  vulnerability
- [llms-full.txt](https://gitdr.io/llms-full.txt), every page of the docs in one fetch
- [Source on GitHub](https://github.com/gitdr-io/gitdr), AGPL-3.0
