id = "vacuum"
name = "vacuum"
homepage = "https://github.com/daveshanley/vacuum"
description = "The world's fastest and most versatile OpenAPI, AsyncAPI and JSON Schema linter and toolkit."
executables = ["vacuum"]
[dotfiles]
paths = ["[configHome]/vacuum.conf.yaml"]
secret = []
[commands]
format = 1
label = "Lint an API description"
description = "Lint OpenAPI, AsyncAPI or Arazzo files with vacuum lint. Reports, bundling and custom functions beyond a path are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = true }
[[commands.subcommand]]
path = ["lint"]
label = "Lint specification"
[[commands.subcommand.source]]
id = "help"
kind = "manual"
url = "https://quobix.com/vacuum/commands/lint/"
revision = "2026-10-27"
evidence = """
vacuum lint -d <your-openapi-spec.yaml>
vacuum lint --ruleset rules/main.yaml
-d --details bool Show full details of the linting report
-e --errors bool Used with -d , Show only reported errors
-s --snippets bool Used with -d , shows highlighted code in console
-r --ruleset string Use an existing ruleset file for linting
-n --fail-severity string Set the level at which an error return code is thrown: error , warn , info , hint , none (default error )
--ignore-file accepts either exact result paths or JSONPath expressions.
-z --hard-mode bool Enable every single built-in rule (including OWASP).
vacuum lint --globbed-files="*/**/bu*.openapi.yaml"
"""
[[commands.subcommand.field]]
id = "details"
label = "Full details"
type = "boolean"
option = ["-d", "--details"]
sources = ["help"]
[[commands.subcommand.field]]
id = "errors"
label = "Only errors"
type = "boolean"
option = ["-e", "--errors"]
sources = ["help"]
[[commands.subcommand.field]]
id = "snippets"
label = "Code snippets"
type = "boolean"
option = ["-s", "--snippets"]
sources = ["help"]
[[commands.subcommand.field]]
id = "ruleset"
label = "Ruleset file"
type = "path"
option = ["-r", "--ruleset"]
path = { kind = "file", role = "input" }
sources = ["help"]
[[commands.subcommand.field]]
id = "fail_severity"
label = "Fail severity"
type = "enum"
option = ["-n", "--fail-severity"]
choices = [{ value = "error", label = "Error" }, { value = "warn", label = "Warning" }, { value = "info", label = "Info" }, { value = "hint", label = "Hint" }, { value = "none", label = "None" }]
sources = ["help"]
[[commands.subcommand.field]]
id = "ignore_file"
label = "Ignore file"
type = "path"
option = ["--ignore-file"]
path = { kind = "file", role = "input" }
sources = ["help"]
[[commands.subcommand.field]]
id = "hard_mode"
label = "Enable every rule"
type = "boolean"
option = ["-z", "--hard-mode"]
sources = ["help"]
[[commands.subcommand.field]]
id = "specs"
label = "Specification files"
type = "path"
position = 0
multiple = true
path = { kind = "file", role = "input" }
sources = ["help"]
[[commands.subcommand.task]]
id = "report"
label = "Lint with details"
fields = ["specs", "details", "snippets"]
required = ["specs"]
set = { details = [true] }
[[commands.subcommand.task]]
id = "ci"
label = "CI check"
fields = ["specs", "fail_severity", "ruleset"]
required = ["specs"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["specs", "details", "errors", "snippets", "ruleset", "fail_severity"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["ignore_file", "hard_mode"]