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] # ProjectDiscovery's official documentation specifies the global config and # default template directory below. Headers in config.yaml may contain # credentials and are extracted as secrets. # https://projectdiscovery-nuclei.mintlify.app/configuration/config-file 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"]