# velero-io/velero architecture

> Architecture diagram of the GitHub repository velero-io/velero, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/velero-io/velero
- Repository: https://github.com/velero-io/velero

## Overview

Velero is a Kubernetes backup, restore, and cluster-migration system with a local CLI and an in-cluster server. The main workflow is to request a backup, capture cluster resources and persistent-volume data, store backup artifacts, then request a restore that recreates resources and recovers volume data. Scheduling, deletion, and plugin-driven storage or resource actions are important supporting capabilities. The README establishes the product workflow; the tree identifies the major subsystems, but sampled source is limited, so several internal connections are intentionally omitted.

Main entry points: [`pkg/controller`](https://github.com/velero-io/velero/tree/main/pkg/controller) (Controllers), [`pkg/backup`](https://github.com/velero-io/velero/tree/main/pkg/backup) (Backup engine), [`pkg/restore`](https://github.com/velero-io/velero/tree/main/pkg/restore) (Restore engine), [`pkg/plugin/clientmgmt/manager.go`](https://github.com/velero-io/velero/blob/main/pkg/plugin/clientmgmt/manager.go) (Plugin manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interfaces"]
  node_cli["Velero CLI"]
  node_server["Server startup<br/>[server.go]"]
end

subgraph group_control["Kubernetes control plane"]
  node_api["Velero APIs"]
  node_controllers["Controllers"]
end

subgraph group_backup["Backup and restore"]
  node_backup["Backup engine"]
  node_restore["Restore engine"]
  node_schedule["Schedules"]
  node_deletion["Backup deletion"]
  node_itemactions["Resource actions"]
  node_restoreactions["Restore actions"]
end

subgraph group_data["Storage and volume data"]
  node_persistence["Object persistence"]
  node_objectstore[("Backup object store")]
  node_repo[("Backup repositories")]
  node_volume["Volume snapshots"]
  node_podvolume["Pod volume backup"]
  node_datamover["Data movement"]
  node_datapath["Data path services"]
end

subgraph group_extensions["Extensibility"]
  node_pluginmgr["Plugin manager<br/>[manager.go]"]
  node_pluginframework["Plugin interfaces"]
end

node_operator(("Operator"))
node_kubernetes(("Kubernetes API"))
node_cloudstore[("Cloud object storage")]
node_snapshotprovider["Snapshot providers"]

node_operator -->|"runs commands"| node_cli
node_cli -->|"submits requests"| node_kubernetes
node_server -->|"starts controllers"| node_controllers
node_controllers -->|"watches resources"| node_kubernetes
node_controllers -->|"reconciles resources"| node_api
node_cli -->|"requests operations"| node_api
node_controllers -->|"dispatches backups"| node_backup
node_controllers -->|"dispatches restores"| node_restore
node_controllers -->|"manages schedules"| node_schedule
node_controllers -->|"dispatches deletion"| node_deletion
node_backup -->|"applies actions"| node_itemactions
node_restore -->|"applies actions"| node_restoreactions
node_backup -->|"stores artifacts"| node_persistence
node_restore -->|"reads artifacts"| node_persistence
node_persistence -->|"uses store"| node_objectstore
node_objectstore -->|"stores objects"| node_cloudstore
node_backup -->|"captures volumes"| node_volume
node_restore -->|"restores volumes"| node_volume
node_backup -->|"backs up pod data"| node_podvolume
node_restore -->|"restores pod data"| node_podvolume
node_datamover -->|"uses data paths"| node_datapath
node_datamover -->|"uses repositories"| node_repo
node_volume -.->|"requests snapshots"| node_snapshotprovider
node_server -->|"initializes plugins"| node_pluginmgr
node_pluginmgr -->|"adapts plugins"| node_pluginframework
node_itemactions -.->|"resolves plugins"| node_pluginmgr
node_restoreactions -.->|"resolves plugins"| node_pluginmgr

click node_cli "https://github.com/velero-io/velero/tree/main/pkg/cmd/cli"
click node_server "https://github.com/velero-io/velero/blob/main/pkg/cmd/server/server.go"
click node_api "https://github.com/velero-io/velero/tree/main/pkg/apis/velero"
click node_controllers "https://github.com/velero-io/velero/tree/main/pkg/controller"
click node_backup "https://github.com/velero-io/velero/tree/main/pkg/backup"
click node_restore "https://github.com/velero-io/velero/tree/main/pkg/restore"
click node_schedule "https://github.com/velero-io/velero/blob/main/pkg/controller/schedule_controller.go"
click node_deletion "https://github.com/velero-io/velero/blob/main/pkg/controller/backup_deletion_controller.go"
click node_itemactions "https://github.com/velero-io/velero/tree/main/pkg/backup/actions"
click node_restoreactions "https://github.com/velero-io/velero/tree/main/pkg/restore/actions"
click node_persistence "https://github.com/velero-io/velero/tree/main/pkg/persistence"
click node_objectstore "https://github.com/velero-io/velero/tree/main/pkg/repository"
click node_repo "https://github.com/velero-io/velero/tree/main/pkg/repository"
click node_podvolume "https://github.com/velero-io/velero/tree/main/pkg/podvolume"
click node_datamover "https://github.com/velero-io/velero/tree/main/pkg/datamover"
click node_datapath "https://github.com/velero-io/velero/tree/main/pkg/datapath"
click node_pluginmgr "https://github.com/velero-io/velero/blob/main/pkg/plugin/clientmgmt/manager.go"
click node_pluginframework "https://github.com/velero-io/velero/tree/main/pkg/plugin/framework"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_server toneBlue
class node_api,node_controllers,node_cloudstore toneAmber
class node_backup,node_restore,node_schedule,node_deletion,node_itemactions,node_restoreactions,node_kubernetes toneMint
class node_persistence,node_objectstore,node_repo,node_volume,node_podvolume,node_datamover,node_datapath toneRose
class node_pluginmgr,node_pluginframework,node_operator,node_snapshotprovider toneIndigo
```

## Components

### User interfaces

- [Velero CLI](https://github.com/velero-io/velero/tree/main/pkg/cmd/cli): `pkg/cmd/cli`
- [Server startup](https://github.com/velero-io/velero/blob/main/pkg/cmd/server/server.go): `pkg/cmd/server/server.go`

### Kubernetes control plane

- [Velero APIs](https://github.com/velero-io/velero/tree/main/pkg/apis/velero): `pkg/apis/velero`
- [Controllers](https://github.com/velero-io/velero/tree/main/pkg/controller): `pkg/controller`

### Backup and restore

- [Backup engine](https://github.com/velero-io/velero/tree/main/pkg/backup): `pkg/backup`
- [Restore engine](https://github.com/velero-io/velero/tree/main/pkg/restore): `pkg/restore`
- [Schedules](https://github.com/velero-io/velero/blob/main/pkg/controller/schedule_controller.go): `pkg/controller/schedule_controller.go`
- [Backup deletion](https://github.com/velero-io/velero/blob/main/pkg/controller/backup_deletion_controller.go): `pkg/controller/backup_deletion_controller.go`
- [Resource actions](https://github.com/velero-io/velero/tree/main/pkg/backup/actions): `pkg/backup/actions`
- [Restore actions](https://github.com/velero-io/velero/tree/main/pkg/restore/actions): `pkg/restore/actions`

### Storage and volume data

- [Object persistence](https://github.com/velero-io/velero/tree/main/pkg/persistence): `pkg/persistence`
- [Backup object store](https://github.com/velero-io/velero/tree/main/pkg/repository): `pkg/repository`
- [Backup repositories](https://github.com/velero-io/velero/tree/main/pkg/repository): `pkg/repository`
- **Volume snapshots**
- [Pod volume backup](https://github.com/velero-io/velero/tree/main/pkg/podvolume): `pkg/podvolume`
- [Data movement](https://github.com/velero-io/velero/tree/main/pkg/datamover): `pkg/datamover`
- [Data path services](https://github.com/velero-io/velero/tree/main/pkg/datapath): `pkg/datapath`

### Extensibility

- [Plugin manager](https://github.com/velero-io/velero/blob/main/pkg/plugin/clientmgmt/manager.go): `pkg/plugin/clientmgmt/manager.go`
- [Plugin interfaces](https://github.com/velero-io/velero/tree/main/pkg/plugin/framework): `pkg/plugin/framework`

### Other components

- **Operator**
- **Kubernetes API**
- **Cloud object storage**
- **Snapshot providers**

## Connections

- Operator → Velero CLI: runs commands
- Velero CLI → Kubernetes API: submits requests
- Server startup → Controllers: starts controllers
- Controllers → Kubernetes API: watches resources
- Controllers → Velero APIs: reconciles resources
- Velero CLI → Velero APIs: requests operations
- Controllers → Backup engine: dispatches backups
- Controllers → Restore engine: dispatches restores
- Controllers → Schedules: manages schedules
- Controllers → Backup deletion: dispatches deletion
- Backup engine → Resource actions: applies actions
- Restore engine → Restore actions: applies actions
- Backup engine → Object persistence: stores artifacts
- Restore engine → Object persistence: reads artifacts
- Object persistence → Backup object store: uses store
- Backup object store → Cloud object storage: stores objects
- Backup engine → Volume snapshots: captures volumes
- Restore engine → Volume snapshots: restores volumes
- Backup engine → Pod volume backup: backs up pod data
- Restore engine → Pod volume backup: restores pod data
- Data movement → Data path services: uses data paths
- Data movement → Backup repositories: uses repositories
- Volume snapshots → Snapshot providers: requests snapshots
- Server startup → Plugin manager: initializes plugins
- Plugin manager → Plugin interfaces: adapts plugins
- Resource actions → Plugin manager: resolves plugins
- Restore actions → Plugin manager: resolves plugins
