tsenart/vegeta · error

format %q isn't one of [%s]

Error message

format %q isn't one of [%s]

What it means

The -format flag selects how the targets file is parsed; only the registered vegeta.TargetFormats (json, http) are supported. Any other value falls into the default branch and returns this error listing valid formats.

Source

Thrown at attack.go:165

		if body, err = io.ReadAll(bodyf); err != nil {
			return fmt.Errorf("error reading %s: %s", opts.bodyf, err)
		}
	}

	var (
		tr       vegeta.Targeter
		src      = files[opts.targetsf]
		hdr      = opts.headers.Header
		proxyHdr = opts.proxyHeaders.Header
	)

	switch opts.format {
	case vegeta.JSONTargetFormat:
		tr = vegeta.NewJSONTargeter(src, body, hdr)
	case vegeta.HTTPTargetFormat:
		tr = vegeta.NewHTTPTargeter(src, body, hdr)
	default:
		return fmt.Errorf("format %q isn't one of [%s]",
			opts.format, strings.Join(vegeta.TargetFormats, ", "))
	}

	if !opts.lazy {
		targets, err := vegeta.ReadAllTargets(tr)
		if err != nil {
			return err
		}
		tr = vegeta.NewStaticTargeter(targets...)
	}

	out, err := file(opts.outputf, true)
	if err != nil {
		return fmt.Errorf("error opening %s: %s", opts.outputf, err)
	}
	defer out.Close()

	tlsc, err := tlsConfig(opts.insecure, opts.certf, opts.keyf, opts.rootCerts)

View on GitHub (pinned to cf58112690)

Solutions

  1. Use `-format=json` (JSON target format) or `-format=http` (plaintext HTTP target format).
  2. Run `vegeta attack -help` to see the currently valid TargetFormats list in your version.
  3. If migrating from gob targets, convert the input to JSON or HTTP text format first (e.g. via `vegeta encode`).

Example fix

// before
vegeta attack -format=gob -targets=targets.gob
// after
vegeta encode -from=gob -to=json < targets.gob > targets.json
vegeta attack -format=json -targets=targets.json
Defensive patterns

Strategy: validation

Validate before calling

valid := map[string]bool{"json": true, "http": true}
if !valid[format] {
    return fmt.Errorf("format %q not supported; use json or http", format)
}

Prevention

When it happens

Trigger: `vegeta attack -format=<anything-other-than-json-or-http>`, e.g. a typo (`-format=jsson`), a removed legacy value (`gob` targets), or a programmatically supplied opts.format that is not vegeta.JSONTargetFormat or vegeta.HTTPTargetFormat.

Common situations: Scripts copied from very old vegeta versions that supported gob target format; users assuming CSV or plaintext formats are supported for targets; shell variables interpolating an empty or wrong format string.

Related errors


AI-assisted analysis of tsenart/vegeta@cf58112690 (2026-08-31). Data as JSON: /api/errors/681f253dc738cc14. Report an issue: GitHub.