hasura/graphql-engine · error
cannot export %s from metadata: %w
Error message
cannot export %s from metadata: %w
What it means
Thrown by projectmetadata ExportMetadata when one of the registered metadata objects fails to serialize itself into files. The %s is the metadata object's Key() (e.g. metadata, query_collections, remote_schemas) and %w the underlying export error — typically a JSON marshal failure or an invalid metadata structure for that subsystem.
Source
Thrown at cli/internal/projectmetadata/handler.go:118
// So we directly translate JSON to YAML, to preserve it.
yamlmdbs, err := metadatautil.JSONToYAML(jsonmdbs)
if err != nil {
return nil, internalerrors.E(op, err)
}
var c map[string]yaml.Node
err = yaml.NewDecoder(bytes.NewReader(yamlmdbs)).Decode(&c)
if err != nil {
return nil, internalerrors.E(op, err)
}
for _, object := range h.objects {
files, err := object.Export(c)
if err != nil {
return nil, internalerrors.E(
op,
fmt.Errorf("cannot export %s from metadata: %w", object.Key(), err),
)
}
maps.Copy(metadataFiles, files)
}
return metadataFiles, nil
}
func (h *Handler) ResetMetadata() error {
var (
op internalerrors.Op = "projectmetadata.Handler.ResetMetadata"
err error
)
_, err = h.v1MetadataOps.ClearMetadata()
if err != nil {
return internalerrors.E(op, err)View on GitHub (pinned to 724551b9ae)
Solutions
- Upgrade the CLI to match or exceed the Hasura server version (hasura update-cli / npm upgrade)
- Inspect the object key in the message and the wrapped error to identify which subsystem's metadata is malformed, then fix or remove that entry in metadata
- Fetch raw metadata (hasura metadata export --o yaml on server, or the /v1/metadata endpoint) and validate its structure against your server version
Defensive patterns
Strategy: try-catch
Try / catch
files, err := handler.ExportMetadata(ec)
if err != nil {
if strings.Contains(err.Error(), "cannot export") {
// log the object key, suggest CLI/server version alignment
return fmt.Errorf("export failed (align CLI with server version?): %w", err)
}
return err
} Prevention
- Pin CLI version to match your Hasura server version
- Keep metadata edits within documented fields for your server version
When it happens
Trigger: Calling ExportMetadata against server metadata where one subsystem's configuration contains values that cannot be marshaled/exported — e.g. non-serializable fields, unsupported metadata kinds introduced by a newer server than the CLI knows, or malformed JSON in raw metadata.
Common situations: CLI version older than the server, so newer metadata kinds fail to export; manually injected raw metadata containing invalid entries; partially corrupted metadata on the server.
Related errors
- exporting metadata from server: %w
- reading metadata from response: %w
- writing metadata to file: %w
- cue extraction error: %w
- creating metadata file %s failed: %w
AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28).
Data as JSON: /api/errors/bd239724f1c1579e.
Report an issue: GitHub.