Skip to main content

Desktop console

vulkro serve launches a local web app on 127.0.0.1:8723 and auto-opens your browser. State (projects, scans, triage, settings) persists to SQLite on disk - your work survives Ctrl-C.

Launch

vulkro serve # build UI + run release server, opens browser
vulkro serve --port 9000 # bind to a different port
vulkro serve --no-browser # don't auto-open

Where state lives

OSPath
macOS~/Library/Application Support/Vulkro/vulkro-desktop.db
Linux~/.local/share/Vulkro/vulkro-desktop.db
Windows%APPDATA%\Vulkro\vulkro-desktop.db

Schema: SQLite, projects -> scans -> findings -> triage notes.

Tabs

TabWhat it shows
EndpointsFilterable, sortable table of every detected endpoint with auth status, framework, source location.
FindingsMaster list. Group by severity, OWASP category, file, or owner.
PrivacyPII / PHI fields per endpoint, mapped to GDPR / HIPAA controls.
Access controlIDOR / BOLA / function-level findings, grouped by route.
CSRFCSRF-related findings + missing token middleware.
InjectionSQLi / XSS / SSTI / command injection grouped together.
IaCFindings on Terraform, Helm, k8s manifests, Dockerfile, docker-compose.
DependenciesCVE matches, KEV/EPSS decoration, reachability tags.
SecretsHardcoded secrets (current tree).
Git historySecrets ever committed (last 500 commits / 2 yrs).
ContainersOutput from vulkro container runs.
LicensesPackage-licence inventory + flagged copyleft / unknown licences.
OpenAPIScore against the inferred spec; gaps and inconsistencies.
CompliancePass/fail per control across the nine frameworks.
TrendsRisk-score, finding-count, MTTR, risk-debt over saved scans.
HotspotsSortable heatmap of churn x risk per module.
ContributorsTop contributors, bus factor per module, ownership coverage.
Compare scansPer-finding delta between two scans of the same project.
Code qualityComplexity, duplicates, dead code, coverage.
CVE DatabasePer-ecosystem CVE record counts; Quick Sync, Apply Bundle.

Triage workflow

Every finding can be marked one of:

  • triaged - looked at, not yet decided.
  • accepted-risk - known issue, deliberately won't fix.
  • false-positive - not a real bug.
  • wont-fix - real but de-prioritised.

Triage state persists across scan runs (matched by stable finding_key) so the same suppression doesn't reappear next scan. Bulk-triage from the FilterBar; export to a vulkro-suppress.yaml for source-controlled triage.

Re-scan

The console exposes a Re-scan button that triggers POST /api/scan on the embedded server. Useful while iterating - make a code change, hit Re-scan, see the deltas without leaving the browser.

Quick Sync (CVE Database tab)

Clicking Quick Sync runs the same path as vulkro update (CDN fetch, signature verify, atomic apply). Useful when your CI dropped the bundle and you want fresh CVE data without leaving the browser.

  • vulkro serve
  • See also: Baselines explained - when the UI's baseline-scan flag applies vs the CLI's .vulkro-baseline.json file, and how the Export-for-CI button bridges the two.