Overview
Vigolium supports project-based data isolation. Every scan record, finding, scope rule, source repo, and OAST interaction is tagged with aproject_uuid, so multiple engagements can share the same database without data leaking across boundaries.
Managing Projects from the CLI
Thevigolium project subcommand creates and manages projects.
Create a project
List projects
*.
Set the active project
VIGOLIUM_PROJECT_UUID environment variable into your shell, so every subsequent command in that shell uses this project.
View the project config path
Manage project access
Delete a project
~/.vigolium/projects/<uuid>/) is removed too; --keep-config leaves it in place.
Set
VIGOLIUM_PROJECT_READONLY=true to disable all mutating project commands (create, allow, remove-access) from the CLI. Read-only commands (list, use, config) still work. Useful in production or shared environments where projects should only be managed through the REST API.Scoping Operations to a Project
Several mechanisms select the active project, listed by precedence (highest first):--project-uuid and --project-name are mutually exclusive (--project-name must match exactly one project).
CLI examples
Server API
When using the REST API, set theX-Project-UUID header to scope all operations to a project:
Config Merge Strategy
Configuration is resolved in layers (later layers override earlier ones):Access Control
Projects can restrict access by email domain or exact email address using theallowed_domains and allowed_emails fields.
How it works
When a request includes bothX-Project-UUID and X-User-Email headers, the server checks access in this order:
- If
allowed_emailsis non-empty → the user’s email must match exactly (case-insensitive). - Otherwise, if
allowed_domainsis non-empty → the user’s email domain (e.g.@acme.com) must match. - If both lists are empty → the project is open to anyone.
- If
X-User-Emailis not sent → the check is skipped entirely.
403 Forbidden response.
Managing via API
Database Isolation
All major data tables carry aproject_uuid column and are filtered by the active project across the CLI, server API, and internal pipeline:
scans · http_records · findings · scopes · source_repos · oast_interactions · scan_logs
Existing databases are migrated automatically — the project_uuid column is added with the default project UUID as its default value, so pre-project data stays accessible under the default project.