hasura/graphql-engine · warning

encoding json response from server: %w

Error message

encoding json response from server: %w

What it means

After a successful metadata replace on the server, the metadata apply handler encodes the replaceMetadataResponse into JSON for display; if json.Encoder fails you get 'encoding json response from server'. Only fails if the response contains values Go's encoding/json cannot serialize (NaN/Inf, unsupported map key types, circular refs).

Source

Thrown at cli/pkg/metadata/mode_handlers.go:59

	metadataHandler := projectmetadata.NewHandlerFromEC(p.ec)
	if p.ec.Config.Version == cli.V2 {
		r, err := metadataHandler.V1ApplyMetadata()
		if err != nil {
			return nil, errors.E(op, err)
		}

		return r, nil
	}

	if p.ec.Config.Version >= cli.V3 {
		replaceMetadataResponse, err := metadataHandler.V2ApplyMetadata(false)
		if err != nil {
			return nil, errors.E(op, err)
		}

		b := new(bytes.Buffer)
		if err := json.NewEncoder(b).Encode(replaceMetadataResponse); err != nil {
			return nil, errors.E(op, fmt.Errorf("encoding json response from server: %w", err))
		}

		return b, nil
	}

	return nil, nil
}

func (m *metadataModeDirectoryHandler) Parse(p *ProjectMetadata) (io.Reader, error) {
	var op errors.Op = "metadata.metadataModeDirectoryHandler.Parse"

	metadataHandler := projectmetadata.NewHandlerFromEC(p.ec)

	jsonMetadata, err := metadataHandler.BuildJSONMetadata()
	if err != nil {
		return nil, errors.E(op, fmt.Errorf("parsing project metadata to json failed: %w", err))
	}

View on GitHub (pinned to 724551b9ae)

Solutions

  1. Inspect the raw server response (curl the /v1/metadata endpoint with the same request)
  2. Check for a proxy/gateway between CLI and server altering responses
  3. Align CLI and server versions so response shapes match
  4. Report the offending response payload as a bug if it comes from Hasura itself
Defensive patterns

Strategy: try-catch

Try / catch

if b, err := handler.Apply(&p); err != nil {
    if strings.Contains(err.Error(), "encoding json response") {
        // dump raw server response and check proxies/version skew
    }
}

Prevention

When it happens

Trigger: Calling metadata Apply (e.g. `hasura metadata apply`) when the server's replace-metadata response includes a value that breaks JSON encoding — rare, and usually a sign of an unexpected/proxied response body (e.g. gateway returning HTML that got typed loosely).

Common situations: A proxy or middleware mangling the Hasura server response; server versions returning exotic fields; effectively unreachable in normal operation with a genuine Hasura server.

Related errors


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