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
- Use `-format=json` (JSON target format) or `-format=http` (plaintext HTTP target format).
- Run `vegeta attack -help` to see the currently valid TargetFormats list in your version.
- 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
- Only use values from vegeta.TargetFormats for -format.
- Validate format strings sourced from environment/config before passing to CLI.
- Re-check valid formats after upgrading vegeta (set of formats can change).
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
- encode: unknown encoding %q
- -rate=0 requires setting -max-workers
- rate frequency and time unit must be bigger than zero
- encode: can't detect encoding of %q
- header '%s' has a wrong format
AI-assisted analysis of tsenart/vegeta@cf58112690 (2026-08-31).
Data as JSON: /api/errors/681f253dc738cc14.
Report an issue: GitHub.