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

  1. Drop the --backend flag and use the default dolt backend
  2. Explicitly pass --backend=dolt
  3. Update scripts/docs that still reference postgres/mysql
  4. 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

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


AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30). Data as JSON: /api/errors/87d17b5f13292e1b. Report an issue: GitHub.