id = "nuclei"
name = "Nuclei"
homepage = "https://projectdiscovery.io/nuclei"
description = "A fast and customizable vulnerability scanner based on a simple YAML DSL."
executables = ["nuclei"]
[dotfiles]
paths = [
"[configHome]/nuclei/config.yaml",
"[configHome]/nuclei-templates/",
]
secret = []
[[dotfiles.secret_paths]]
file = "[configHome]/nuclei/config.yaml"
format = "yaml"
match = { key_path = ["header"] }
[commands]
format = 1
label = "Scan targets"
description = "Run Nuclei templates against URLs or a target list. Only active scanning of systems you are authorized to test; DAST, headless and cloud options are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = false, short_bundles = false }
[[commands.source]]
id = "docs"
kind = "manual"
url = "https://docs.projectdiscovery.io/opensource/nuclei/running"
revision = "2026-10-27"
evidence = """ -u, -target string[] target URLs/hosts to scan
-l, -list string path to file containing a list of target URLs/hosts to scan (one per line)
-t, -templates string[] list of template or template directory to run (comma-separated, file)
-tags string[] templates to run based on tags (comma-separated, file)
-etags, -exclude-tags string[] templates to exclude based on tags (comma-separated, file)
-s, -severity value[] templates to run based on severity. Possible values: info, low, medium, high, critical, unknown
-o, -output string output file to write found issues/vulnerabilities
-silent display findings only
-j, -jsonl write output in JSONL(ines) format
-rl, -rate-limit int maximum number of requests to send per second (default 150)
-c, -concurrency int maximum number of templates to be executed in parallel (default 25)
-timeout int time to wait in seconds before timeout (default 10)
-duc, -disable-update-check disable automatic nuclei/templates update check"""
[[commands.field]]
id = "target"
label = "Target URL or host"
type = "string"
option = ["-u", "-target"]
multiple = true
sources = ["docs"]
[[commands.field]]
id = "list"
label = "Target list file"
description = "One target per line."
type = "path"
option = ["-l", "-list"]
path = { kind = "file", role = "input" }
sources = ["docs"]
[[commands.field]]
id = "templates"
label = "Templates"
description = "Template file or directory."
type = "path"
option = ["-t", "-templates"]
path = { kind = "any", role = "input" }
multiple = true
sources = ["docs"]
[[commands.field]]
id = "tags"
label = "Tags"
description = "Comma-separated template tags."
type = "string"
option = ["-tags"]
sources = ["docs"]
[[commands.field]]
id = "exclude_tags"
label = "Exclude tags"
type = "string"
option = ["-etags", "-exclude-tags"]
sources = ["docs"]
[[commands.field]]
id = "severity"
label = "Severity"
description = "Comma-separated: info, low, medium, high, critical, unknown."
type = "string"
option = ["-s", "-severity"]
suggestions = [{ value = "critical,high", label = "critical,high" }, { value = "medium", label = "medium" }, { value = "low,info", label = "low,info" }]
sources = ["docs"]
[[commands.field]]
id = "output"
label = "Output file"
type = "path"
option = ["-o", "-output"]
path = { kind = "file", role = "output", must_exist = false }
effect = "overwrite"
sources = ["docs"]
[[commands.field]]
id = "jsonl"
label = "JSONL output"
type = "boolean"
option = ["-j", "-jsonl"]
sources = ["docs"]
[[commands.field]]
id = "silent"
label = "Findings only"
type = "boolean"
option = ["-silent"]
sources = ["docs"]
[[commands.field]]
id = "rate_limit"
label = "Requests per second"
type = "integer"
option = ["-rl", "-rate-limit"]
observed_default = "150"
sources = ["docs"]
[[commands.field]]
id = "concurrency"
label = "Parallel templates"
type = "integer"
option = ["-c", "-concurrency"]
observed_default = "25"
sources = ["docs"]
[[commands.field]]
id = "timeout"
label = "Timeout (seconds)"
type = "integer"
option = ["-timeout"]
observed_default = "10"
sources = ["docs"]
[[commands.field]]
id = "no_update_check"
label = "Skip update check"
type = "boolean"
option = ["-duc", "-disable-update-check"]
sources = ["docs"]
[[commands.task]]
id = "scan_url"
label = "Scan a URL"
fields = ["target", "severity", "silent"]
required = ["target"]
[[commands.task]]
id = "scan_list"
label = "Scan a target list"
fields = ["list", "templates", "severity", "output"]
required = ["list"]
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["target", "list", "templates", "tags", "exclude_tags", "severity", "output"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["jsonl", "silent", "rate_limit", "concurrency", "timeout", "no_update_check"]