Skip to content

SAST overview

What vulnetix sast scans, which rules it runs, what it writes, and how it relates to vulnetix scan and the other Rego-engine commands.

Updated 02 Nov 2026Checked against cli@4c8c3b7

vulnetix sast runs static analysis on the source files in a directory. It evaluates the CLI’s built-in Rego rules, plus any rule packs you load with --rule, on your machine, using the Open Policy Agent engine compiled into the binary. It does not look up dependencies, licences, secrets, containers or IaC.

vulnetix sast                       # scan the current directory
vulnetix sast --fail-on high        # exit 1 on any high or critical finding
vulnetix sast -o results.sarif      # also write SARIF where you choose

What runs

The CLI embeds 1,899 rules (see the rules index). Each rule declares a kind in its metadata, and each command runs one kind:

Command Rule kind Built-in rules
vulnetix sast sast 793
vulnetix secrets secrets 1,092
vulnetix containers oci (and container from external packs) 7
vulnetix iac iac 7
vulnetix scan every kind, plus SCA and licences all

The kind lock applies to --rule packs too: vulnetix sast --rule org/pack runs only the pack’s sast rules. A rule with no kind is sast.

Before compiling, the engine drops every rule whose declared languages are all absent from the scanned tree, judged by file extension and well-known file names. A Python-only repository compiles about 370 rules, not 793. Rules that declare no language, generic, or a language the filter does not know are always kept. See Supported languages.

What is read

Input Rule
Files Text files under --path, at most --depth levels deep (default 3).
Size cap 1 MiB of text per file. Larger, unreadable and binary files are listed in the run’s notifications as not content-scanned.
Always skipped .git, node_modules, .hg, __pycache__, .tox and the other build and cache directories in internal/sast/input.go.
.gitignore Respected. --include-ignored (or --sast-include-ignored) reads ignored paths too.
--exclude .gitignore-syntax pattern, repeatable, relative to --path.

What it writes

Path When
<path>/.vulnetix/sast.sarif SARIF 2.1.0, written when there is at least one finding. A clean run deletes the file.
<path>/.vulnetix/memory.yaml Every run: counts, finding history, and suppressions recorded from nosec comments.
-o <file>.sarif SARIF at a path you choose.

Signed in, the run also uploads the findings as a SAST snapshot in the Vulnetix console and prints its URL. Without credentials the community fallback is used and nothing is stored for you. See Output formats.

Sections

Page For
Quickstart First scan, a CI gate, SARIF upload.
Reading the results The terminal report, --explain, test-code and vendored groups.
Suppressing findings nosec comments, ignore rules, --suppress-test-code.
Custom rules Write Rego rules and load them with --rule.
Flags Every flag, environment variable and exit code.
Supported languages Language keys, file extensions and rule counts.
Output formats SARIF fields, JSON report, the upload.
Rules index Every built-in rule, filterable.

GitHub Actions

Run it in a workflow with the sast GitHub Action: it uploads sast.sarif to code scanning, keeps the files as an artifact and attests them.

Platform IaC

SAST has no config kind of its own: rule selection and packs are command-line flags. The scan gate can come from the organisation’s quality gate, the QualityGate kind (see /quality-gates/). See the kind catalogue.

Edit this pageSources: cli/cmd/specialized_scans.go, cli/cmd/scan.go, cli/internal/sast/engine.go, cli/internal/sast/kinds.go, cli/internal/sast/input.go, cli/internal/sast/language_filter.go, cli/internal/sast/loader.go
esc
↑ ↓ move↵ openSearches in your browser. A key like autonomy.max or a code like threshold_required jumps straight to it.