{"id":50611212,"url":"https://github.com/home-operations/kopiur","last_synced_at":"2026-06-14T19:00:55.960Z","repository":{"id":361994460,"uuid":"1256785556","full_name":"home-operations/kopiur","owner":"home-operations","description":"A Kopia-native Kubernetes backup operator written in Rust","archived":false,"fork":false,"pushed_at":"2026-06-14T05:22:59.000Z","size":4212,"stargazers_count":40,"open_issues_count":17,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T07:11:20.773Z","etag":null,"topics":["0ver","disaster-recovery","kopia","kubernetes"],"latest_commit_sha":null,"homepage":"https://kopiur.home-operations.com/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/home-operations.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security-context.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-02T04:58:26.000Z","updated_at":"2026-06-14T05:23:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/home-operations/kopiur","commit_stats":null,"previous_names":["perfectra1n/kopiur","home-operations/kopiur"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/home-operations/kopiur","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-operations%2Fkopiur","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-operations%2Fkopiur/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-operations%2Fkopiur/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-operations%2Fkopiur/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/home-operations","download_url":"https://codeload.github.com/home-operations/kopiur/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/home-operations%2Fkopiur/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34333806,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["0ver","disaster-recovery","kopia","kubernetes"],"created_at":"2026-06-06T04:00:22.354Z","updated_at":"2026-06-14T19:00:55.937Z","avatar_url":"https://github.com/home-operations.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kopiur\n\n\u003e [!WARNING]\n\u003e\n\u003e ## 🚧 Heavy construction — this repo is less than a month old 🚧\n\u003e\n\u003e **Kopiur is brand new and under active, breaking development.** Things are\n\u003e incomplete, untested in the wild, and the CRD surface, behavior, and APIs\n\u003e **will change without notice**. Do **not** run this against data you care about.\n\u003e\n\u003e **Please do not open Pull Requests.** The codebase is moving too fast for\n\u003e external PRs to be reviewable right now — they'll likely conflict or target\n\u003e code that's about to be rewritten. **[Open an Issue instead](../../issues/new)**\n\u003e to report a bug, request a feature, or start a discussion. Issues are very\n\u003e welcome; PRs will be politely closed with a pointer back here for the time being.\n\n**Kopiur** (Kopia + Rust) is a Kopia-native Kubernetes backup operator written in Rust on [`kube-rs`](https://github.com/kube-rs/kube). It makes a kopia repository a first-class Kubernetes resource and separates the backup **recipe** from its **invocation** from its **schedule**, so backups can be triggered by cron, `kubectl create`, Argo Events, or a Helm hook — and a kopia snapshot's lifecycle is tied to its `Backup` CR by a finalizer + `deletionPolicy`. The whole CRD surface is modeled as Rust enums so invalid states are unrepresentable and reconcilers handle every variant at compile time. See [ADR-0003](docs/adr/0003-kopiur-rust-operator.md) for the full design.\n\n\u003e Status: **alpha** — API group `kopiur.home-operations.com`, version `v1alpha1`. The CRD surface may still change between releases.\n\n## The 7 CRDs (`kopiur.home-operations.com/v1alpha1`)\n\n| CRD                 | Scope      | Layer                | Purpose                                                                         |\n| ------------------- | ---------- | -------------------- | ------------------------------------------------------------------------------- |\n| `Repository`        | Namespaced | Storage              | A kopia repository owned by one namespace: backend, encryption, credentials.    |\n| `ClusterRepository` | Cluster    | Storage              | A shared repository for platform teams, gated by `allowedNamespaces`.           |\n| `BackupConfig`      | Namespaced | Recipe               | _What_ to back up: PVC sources, identity, retention, policy, hooks. Idempotent. |\n| `Backup`            | Namespaced | Invocation + Catalog | One kopia snapshot as a Kubernetes object. The universal trigger entry point.   |\n| `BackupSchedule`    | Namespaced | Cron                 | _When_ it runs: cron + jitter + timezone; creates `Backup` CRs.                 |\n| `Restore`           | Namespaced | Operation            | Restore a snapshot to a PVC, or act as a passive volume-populator source.       |\n| `Maintenance`       | Namespaced | Lifecycle            | Schedules `kopia maintenance` quick + full with an ownership lease.             |\n\n## Quickstart\n\n```bash\nkubectl create namespace kopiur-system\nhelm install kopiur deploy/helm/kopiur \\\n  --namespace kopiur-system \\\n  --set webhook.certManager.enabled=true\nkubectl get crd -l app.kubernetes.io/part-of=kopiur\n```\n\nThen apply a worked example:\n\n```bash\nkubectl apply -f deploy/examples/01-single-pvc-scheduled.yaml\n```\n\nFull install guide, prerequisites (k8s \u003e= 1.24, optional cert-manager), install modes, and the CRD-lifecycle caveat: **[docs/install.md](docs/install.md)**.\n\n### kubectl plugin\n\nDay-to-day operations without hand-written YAML — trigger/inspect/restore snapshots, run maintenance, browse files inside snapshots, diagnose installs, migrate from VolSync:\n\n```bash\nkubectl krew index add kopiur https://github.com/home-operations/kopiur.git\nkubectl krew install kopiur/kopiur\nkubectl kopiur status\n```\n\nFull reference: **[docs/cli/index.md](docs/cli/index.md)**.\n\n## Layout\n\n```\ncrates/          Rust workspace (api, kopia, webhook, controller, mover, xtask)\ndeploy/crds/     Generated CRDs (cargo xtask gen-crds) — checked in\ndeploy/rbac/     Generated RBAC (cargo xtask gen-rbac) — checked in\ndeploy/helm/     Helm chart (deploy/helm/kopiur)\ndeploy/examples/ 8 runnable usage walkthroughs\ndocs/adr/        Architecture Decision Records (0003 is canonical)\n```\n\n## Documentation\n\n📖 **Docs site: \u003chttps://kopiur.home-operations.com/\u003e** — user guide, ADRs, and the generated [Rust API reference](https://kopiur.home-operations.com/rustdoc/).\n\n- [Install guide](docs/install.md)\n- [Helm chart values \u0026 modes](deploy/helm/kopiur/README.md)\n- [ADR-0003 — Kopiur, a Kopia-native backup operator in Rust](docs/adr/0003-kopiur-rust-operator.md)\n- [Example manifests](deploy/examples/)\n\n## License\n\n[AGPL-3.0-only](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhome-operations%2Fkopiur","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhome-operations%2Fkopiur","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhome-operations%2Fkopiur/lists"}