Backend capabilities
What each driver in internal/backend/ advertises through the
Capabilities struct. The dashboard hides UI affordances when the
capability is false or zero.
#The Capabilities shape
From internal/backend/backend.go:
type Capabilities struct {
Versioning bool
ObjectLock bool
Lifecycle bool
BucketPolicy bool
CORS bool
Tagging bool
ServerSideEncrypt bool
AdminAPI string // "" | "minio" | "garage" | "seaweedfs"
MaxMultipartParts int
MaxPartSizeBytes int64
}#Per-driver matrix
| Driver | Versioning | ObjectLock | Lifecycle | BucketPolicy | CORS | Tagging | SSE | AdminAPI | MaxParts | MaxPartSize |
|---|---|---|---|---|---|---|---|---|---|---|
s3v4 (generic) | true | true | true | true | true | true | true | "" | 10000 | 5 GiB |
memory (test only) | false | false | false | false | false | false | false | "" | 0 | 0 |
The s3v4 driver is the production driver — it's what every YAML
or UI-managed backend uses. Capability flags are advertised optimistically;
the dashboard surfaces upstream errors when the upstream actually
rejects an operation it claimed to support.
#When AdminAPI is non-empty
Capabilities.AdminAPI is a marker for native admin-API screens
(create users, attach policies, etc.) inside the dashboard. Today it
returns "" for every driver; the screens are gated on this and so
remain hidden.
When the minio, garage, or seaweedfs drivers ship, their
AdminAPI returns will flip to those literals and the dashboard
grows the corresponding admin views.
#What drives the UI matrix
bucket-settingspanel for versioning, CORS, policy, lifecycle appears only when the matching capability istrue.- The Object lock column on the bucket detail page is hidden
when
ObjectLock=false. - Tags and user metadata editors are hidden when
Tagging=false. - Multipart UI uses
MaxMultipartPartsandMaxPartSizeBytesto pre-validate large uploads.
#Adding a driver
To add a driver (say, garage with native admin API):
- Implement the
Backendinterface underinternal/backend/garage/. - Implement
AdminBackend(the optional escape hatch inbackend.go). - Have
Capabilities()returnAdminAPI: "garage". - Register the driver in
internal/backend/registry.gosotype: garageconfig entries resolve. - Add UI screens that consume the
AdminAPIcapability.
The deferred drivers are tracked in Roadmap.