FUTO Backups is a multi-tenant backup service: users sign in with OIDC and get S3-backed restic repositories, with first-class support for backing up Immich.
End-user documentation is published at https://docs.futo.cloud from packages/docs.
This repository holds the application, its container images and Helm charts, and the local development stack. The infrastructure FUTO runs it on is managed separately.
Ensure you have prerequisites installed:
If necessary, copy .env.example to .env and customise.
Then use mise:
mise dev # install deps, prep environment, start servers (compose-based)
mise check # lint, format check, svelte check, unit tests
mise test # unit tests
mise test:integration # integration tests
mise test:e2e # e2e tests
mise test:e2e:web # e2e web testsAn alternative dev flow runs the stack the way it is deployed: Helm charts, CloudNativePG, Rook-Ceph object storage and in-cluster service discovery. All required tools (k3d, kubectl, helm, tilt) are installed via mise.
mise k3d:up # create local k3d cluster + registry
mise tilt:up # start Tilt; builds images, renders charts, port-forwards
# edit code — live_update syncs into running pods
mise tilt:down # stop Tilt
mise k3d:down # delete clusterPorts forwarded to localhost:
5173web,3020yucca-api,3030yucca-admin-api,3010michael8092mock-oidc,8025mailpit,9000ceph rgw (S3)8428victoria-metrics,9428victoria-logs
Tilt reads the HelmReleases under kubernetes/apps/dev/local
to discover what to deploy, then builds and live-updates the images. Charts live
in charts/ (a yucca-common library plus per-service charts).
Every merge to main publishes images and charts tagged 0.0.<build>; every
release publishes v<version> images and <version> charts.
| Image | Chart | Package |
|---|---|---|
ghcr.io/futo-org/backups/api |
oci://ghcr.io/futo-org/backups/charts/api |
packages/yucca-api |
ghcr.io/futo-org/backups/admin-api |
oci://ghcr.io/futo-org/backups/charts/admin-api |
packages/yucca-admin-api |
ghcr.io/futo-org/backups/metrics-worker |
oci://ghcr.io/futo-org/backups/charts/metrics-worker |
packages/yucca-metrics-worker |
ghcr.io/futo-org/backups/web |
oci://ghcr.io/futo-org/backups/charts/web |
packages/web |
ghcr.io/futo-org/backups/michael |
oci://ghcr.io/futo-org/backups/charts/michael |
packages/michael |
ghcr.io/futo-org/backups/bot |
oci://ghcr.io/futo-org/backups/charts/bot |
packages/futo-backups-bot |
ghcr.io/futo-org/backups/columbo |
oci://ghcr.io/futo-org/backups/charts/columbo |
packages/columbo |
ghcr.io/futo-org/backups/standalone |
packages/standalone-app |
|
ghcr.io/futo-org/backups/restic-proxy |
packages/restic-proxy |
The meta (.well-known discovery) and cnpg-cluster (CloudNativePG database)
charts are published alongside under the same prefix.
A chart's appVersion is the image tag it was published with, so a chart
version alone pins the images it deploys.