hashicorp/terraform · warning
can't delete default state
Error message
can't delete default state
What it means
A deliberate guard in Backend.DeleteWorkspace (backend_state.go:69-71). Terraform protects the default workspace (named 'default' or '') from deletion, because the default state blob (keyed directly by b.keyName, not the env: prefix) is the canonical state. Attempting to delete it is refused before any storage call.
Source
Thrown at internal/backend/remote-state/azure/backend_state.go:70
}
envs[name] = struct{}{}
}
}
result := []string{backend.DefaultStateName}
for name := range envs {
result = append(result, name)
}
sort.Strings(result[1:])
return result, diags
}
func (b *Backend) DeleteWorkspace(name string, _ bool) tfdiags.Diagnostics {
var diags tfdiags.Diagnostics
if name == backend.DefaultStateName || name == "" {
return diags.Append(fmt.Errorf("can't delete default state"))
}
ctx := newCtx()
client, err := b.apiClient.getBlobClient(ctx)
if err != nil {
return diags.Append(err)
}
if resp, err := client.Delete(ctx, b.containerName, b.path(name), blobs.DeleteInput{}); err != nil {
if !response.WasNotFound(resp.HttpResponse) {
return diags.Append(err)
}
}
return diags
}
func (b *Backend) StateMgr(name string) (statemgr.Full, tfdiags.Diagnostics) {View on GitHub (pinned to c9def3e214)
Solutions
- Do not delete the default workspace — it is intentionally protected
- If you want a clean slate, switch to it and run 'terraform destroy' / 'terraform state rm' instead
- In automation, skip the default workspace when deleting workspaces
Example fix
# before: loop deletes every workspace including default for ws in $(terraform workspace list | sed 's/*//'); do terraform workspace delete "$ws" done # after: skip the default workspace for ws in $(terraform workspace list | sed 's/*//'); do [ "$ws" = "default" ] && continue terraform workspace delete "$ws" done
Defensive patterns
Strategy: validation
Validate before calling
# Guard workspace-deletion automation against the protected default name
delete_workspace() {
local ws="$1"
[ "$ws" = "default" ] || [ -z "$ws" ] && { echo "skip: cannot delete default workspace"; return 0; }
terraform workspace delete "$ws"
} Prevention
- Never call 'terraform workspace delete default' in scripts
- Filter 'default' out of any loop over 'terraform workspace list'
- Treat the default state as permanent; use 'terraform state' subcommands to manage contents
When it happens
Trigger: Produced at backend_state.go:69-71 when DeleteWorkspace is called with name == backend.DefaultStateName ("default") or an empty string, e.g. 'terraform workspace delete default' or 'terraform workspace delete ""'.
Common situations: Running 'terraform workspace delete default' by mistake; a script that iterates over all workspace names and tries to delete each including 'default'.
Related errors
AI-assisted analysis of hashicorp/terraform@c9def3e214 (2026-08-07).
Data as JSON: /api/errors/b3d02a3bdf066ace.
Report an issue: GitHub.