gohugoio/hugo · error

unsupported Media Type

Error message

unsupported Media Type: %q

What it means

Thrown when the entry resource's MediaType SubType is not javascript, typescript, tsx, jsx, or css. esbuild can only compile these media types as entry points.

Solutions

  1. Pass a JS/TS/JSX/TSX/CSS resource as the entry point.
  2. If you must rename, set TargetPath with a correct extension so MediaType resolves correctly.
Defensive patterns

Strategy: type-guard

Validate before calling

switch opts.MediaType.SubType {
case media.Builtin.JavascriptType.SubType,
    media.Builtin.TypeScriptType.SubType,
    media.Builtin.TSXType.SubType,
    media.Builtin.JSXType.SubType,
    media.Builtin.CSSType.SubType:
    // ok
default:
    return fmt.Errorf("unsupported Media Type: %q", opts.MediaType)
}

Type guard

func isBuildableMediaType(m media.Type) bool {
    switch m.SubType {
    case media.Builtin.JavascriptType.SubType,
        media.Builtin.TypeScriptType.SubType,
        media.Builtin.TSXType.SubType,
        media.Builtin.JSXType.SubType,
        media.Builtin.CSSType.SubType:
        return true
    }
    return false
}

Prevention

When it happens

Trigger: Calling js.Build on a resource whose MediaType SubType is something like plain, json, or svg. The switch at options.go:331 falls through to the default branch.

Common situations: Resource was looked up with the wrong suffix; user expects js.Build to handle arbitrary text; site media type config overrides the defaults and breaks the suffix mapping.

Related errors


AI-assisted analysis of gohugoio/hugo@52c9bd7908 (2026-08-09). Data as JSON: /api/errors/63aa131d562270f1. Report an issue: GitHub.

Appendix: source

Thrown at internal/js/esbuild/options.go:343

	mediaType := opts.MediaType
	if mediaType.IsZero() {
		mediaType = media.Builtin.JavascriptType
	}

	var loader api.Loader
	switch mediaType.SubType {
	case media.Builtin.JavascriptType.SubType:
		loader = api.LoaderJS
	case media.Builtin.TypeScriptType.SubType:
		loader = api.LoaderTS
	case media.Builtin.TSXType.SubType:
		loader = api.LoaderTSX
	case media.Builtin.JSXType.SubType:
		loader = api.LoaderJSX
	case media.Builtin.CSSType.SubType:
		loader = api.LoaderCSS
	default:
		err = fmt.Errorf("unsupported Media Type: %q", opts.MediaType)
		return
	}

	var format api.Format
	// One of: iife, cjs, esm
	switch opts.Format {
	case "", "iife":
		format = api.FormatIIFE
	case "esm":
		format = api.FormatESModule
	case "cjs":
		format = api.FormatCommonJS
	default:
		err = fmt.Errorf("unsupported script output format: %q", opts.Format)
		return
	}

	var jsx api.JSX

View on GitHub (pinned to 52c9bd7908)