Storage
Declares persistent volumes. Value is a map of named volumes.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | -- | Mount path inside the container |
size |
string |
no | -- | Minimum size hint (e.g. 512MB, 10GB) |
persistent |
boolean |
no | true |
Whether data survives restarts |
content |
string |
no | -- | Who supplies the volume's content. Only value: operator — the operator supplies it; a provider must never initialize the volume empty (D-50) |
If you're declaring named storage, you probably want it to survive restarts — hence the default. Use persistent: false explicitly for ephemeral scratch space like caches.
content: operator marks a volume whose content the platform cannot create — a music library, a photo collection, the files a file manager browses. It declares who fills the volume, never where that content lives: the host path changes per machine, so it stays with the orchestrator — launchfile up --storage <volume>=<path> (repeatable; --storage <component>.<volume>=<path> where ambiguous), and a provider may accept the same map from its own config. A provider MUST either bind the operator-supplied content at path, or refuse the component with a clear error naming the volume and the flag that would satisfy it. It MUST NOT create an empty volume and start the app, and MUST NOT create a supplied path that is absent or unreadable on the host (D-50). persistent is not applicable on a marked volume — the operator's directory outlives the deployment by construction — so providers ignore it there, and a validator MAY warn that persistent: false beside the marker is a contradiction. $storage.<name>.path resolves as usual (see Storage Properties): the container path is still the mount point.
storage:
uploads:
path: /app/uploads
size: 10GB
cache:
path: /app/cache
size: 512MB
persistent: false
music:
path: /music
content: operator # the operator's library — bind it or refuse, never create emptyReal-world examples: Ghost and Paperless use persistent storage for content. Browse all apps →