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

  1. Upgrade the CLI to match or exceed the Hasura server version (hasura update-cli / npm upgrade)
  2. 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
  3. 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

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


AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28). Data as JSON: /api/errors/bd239724f1c1579e. Report an issue: GitHub.