Overview
Vigolium offers several ways to scan a target and get results in a single command without managing a persistent database. This is ideal for CI/CD pipelines, scripting, and quick ad-hoc checks.Quick Scan with scan-url
The fastest way to scan a single URL: no phases, just direct module execution.
“Stateless” is a statement about the database’s lifetime, not about its absence. Every result Vigolium produces is written through a database. Without
-S the run persists into the project database like any other; with -S it runs into a throwaway file that is exported and then deleted. Dropping -S is therefore not a way to make a run cheaper - and under -S a failed export is a failed run (exit 1, error.code: export_failed), because the artifact is the only copy that survives.Scanning Raw HTTP Requests with scan-request
Feed a raw HTTP request from a file or stdin:
Piping Input from stdin
Bothscan-url and scan-request auto-detect the input format from stdin:
Plain URL:
Full Pipeline with --stateless
For a complete multi-phase scan without a persistent database, use the --stateless flag on vigolium scan. This creates a temporary database, runs all phases, exports results, and cleans up:
results.jsonl with all findings. Combine multiple output formats:
results.jsonl and results.html.
Reach for -S for isolation, not just for CI
The other half of what -S buys you is an empty database. A scan against the persisted database resolves its work set from every origin already in the project that passes the scope matcher (see Host scope), so repeated scans into the default store silently grow what each run touches - and records from earlier scans sort ahead of the target you just named.
-S removes that variable entirely, which makes it the right default for a measurement run, a coverage comparison, or any scan whose result set you intend to read as “what this target looks like”.
-o is optional, not required: without it the run warns that results will be discarded with the temp database and continues. The warning is suppressed under --silent, --split-by-host, -j and --ci-output - the last two stream every record to stdout as it is written, so nothing is actually lost.
Output Formats
Console (default)
Human-readable colored output to the terminal:JSONL
Machine-readable, one JSON object per line. Use-j or --format jsonl:
HTML
Interactive report with ag-grid table. Requires-o to specify the output path:
SARIF
A SARIF 2.1.0 log of the run’s findings, for GitHub code scanning, DefectDojo, and SARIF viewers. Requires-o:
SQLite
Dump the per-run database to a single standalone.sqlite file (via VACUUM INTO). Only available in stateless mode and requires -o. Aliases: sqlite3, db:
Filesystem (fs)
Write a flat, browsable tree instead of a single file — handy for piping a scan straight to a coding agent that prefersls/grep/jq over a database:
run-traffic/ and run-findings/ with per-host raw .req/.resp.* files, cross-linked finding .md files, and a jq-friendly index.json in each. --split-by-host is a no-op (fs already splits by host), and --omit-response drops the response files. See Output and Reporting for the full layout.
Multiple Formats
Comma-separate formats to produce several outputs at once:Reading Results Back
A stateless run leaves no project database behind, but you can still browse a.jsonl or .sqlite export after the fact. Point finding/traffic at the file with -S/--stateless + --db — project scoping is turned off and nothing is written to your project DB:
CI/CD Integration
Use--ci-output-format for clean, parseable output with no banners or color codes:
