gastownhall/beads · error
storage backend %q is no longer supported: %s; the supported
Error message
storage backend %q is no longer supported: %s; the supported backend is "dolt" (default)
What it means
Thrown when `bd init --backend` is set to postgres or mysql. These backends were removed; init only provisions dolt. The message embeds configfile.RemovedBackendRationale explaining why the backend was removed and redirects to dolt.
Source
Thrown at cmd/bd/init.go:538
TLSRequired: externalTLS,
TLSCACert: externalTLSCACertPath,
TLSCert: externalTLSCertPath,
TLSKey: externalTLSKeyPath,
TLSServerName: externalTLSServerName,
TLSSkipVerify: externalTLSSkipVerify,
KeepAlivePeriod: externalKeepAlive,
}
if err := cfg.Validate(); err != nil {
return fmt.Errorf("--proxied-server-external-*: %v", err)
}
externalConfig = &cfg
}
// Backend selection: Dolt is the only supported backend.
if !configfile.IsSupportedBackend(backendFlag) {
switch backendFlag {
case configfile.BackendPostgres, configfile.BackendMySQL:
return fmt.Errorf("storage backend %q is no longer supported: %s; the supported backend is \"dolt\" (default)", backendFlag, configfile.RemovedBackendRationale)
case configfile.BackendSQLite:
return fmt.Errorf("storage backend %q is no longer supported: %s; the supported backend is \"dolt\" (default)", backendFlag, configfile.RemovedSQLiteRationale)
}
return fmt.Errorf("unknown backend %q: the supported backend is \"dolt\" (default)", backendFlag)
}
// A registered extension backend passes IsSupportedBackend so its
// existing workspaces can be opened, but init provisions Dolt only and
// would otherwise create the workspace and persist backend: dolt. Reject
// it here rather than silently creating the wrong workspace; downstream
// registrants supply their own workspace-creation path.
if backends.Registered(backendFlag) {
return fmt.Errorf("backend %q cannot be created by bd init; it can only open an existing workspace (bd init provisions \"dolt\", the default)", backendFlag)
}
for _, legacyFlag := range removedBackendInitFlags {
if cmd.Flags().Changed(legacyFlag.name) {
return fmt.Errorf("--%s belonged to %s: %s; use --backend=dolt (the default)", legacyFlag.name, legacyFlag.origin, legacyFlag.rationale)
}
}View on GitHub (pinned to 71377f2769)
Solutions
- Drop the --backend flag and use the default dolt backend
- Explicitly pass --backend=dolt
- Update scripts/docs that still reference postgres/mysql
- Read configfile.RemovedBackendRationale for the removal rationale
Example fix
// before bd init --backend=postgres // after bd init --backend=dolt # or just: bd init
Defensive patterns
Strategy: validation
Validate before calling
case "$BACKEND" in postgres|mysql) echo "$BACKEND removed; use dolt"; exit 1 ;; esac
Try / catch
if err := bdInit("--backend=postgres"); err != nil {
// migrate to: bd init --backend=dolt
} Prevention
- Remove --backend=postgres/mysql from scripts and CI configs
- Omit --backend entirely; dolt is the default
- Pin beads version and read release notes for backend removals
When it happens
Trigger: `bd init --backend=postgres` or `bd init --backend=mysql` (values matching configfile.BackendPostgres / BackendMySQL), which fail configfile.IsSupportedBackend.
Common situations: Scripts or CI pipelines written when postgres/mysql were supported; users upgrading from older beads versions following stale docs.
Related errors
- unknown backend %q: the supported backend is "dolt" (default
- backend %q cannot be created by bd init; it can only open an
- --%s belonged to %s: %s; use --backend=dolt (the default)
- --server and --proxied-server are mutually exclusive
- --proxied-server cannot be combined with --shared-server, --
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/87d17b5f13292e1b.
Report an issue: GitHub.