SBOM · vulnerabilities · open source
A CVE drops. You know who is affected.
Every day, lotor inventories the software on your servers, their containers and your git repositories, matches it against the Grype vulnerability database and tells you, in a single search, which projects to fix first.
- 3 Go binaries
- 1 PostgreSQL database
- 0 third-party service dependencies
- CycloneDX 1.5 to 1.7
- SPDX 2.3
- Syft JSON
- Grype · EPSS · KEV
- OpenVEX
- GitHub and GitLab
- Docker and Podman
- Debian · Ubuntu · RHEL · Alpine
Friday, 5:42 pm: “are we affected?”
Without an inventory, the answer takes days: emails to every team, scripts run by hand on each server, dependency files searched one by one. And next week, it all starts again.
With lotor
- Type the CVE into the search box.
- Read the list: projects, components, versions, fixed version.
- Export it as CSV for the teams concerned.
Under 50 ms across 1,000 projects and a million components. See the benchmarks
Features
From inventory to remediation, no spreadsheet needed
-
Automatic inventory
A lightweight agent per Linux server (deb, rpm and apk packages, Java archives, Python…) and a repository agent hooked to your forges that scans every push. Docker and Podman containers become child projects of their host.
-
Daily rescans
The Grype database is refreshed every day and the whole estate is rescanned: a new CVE shows up on your projects without agents sending anything. CVSS, EPSS and the KEV catalog rank the risks.
-
Cross-project search
By name, purl, vers version range, CVE, GHSA or SHA-256 digest, across every project at once. Filter by team, label, severity, KEV; shareable URL, CSV or JSON export, API.
-
Triage and VEX
Affected, not affected, false positive, risk accepted until a date: every decision is justified, logged and applied to future findings. OpenVEX and CycloneDX export, import of your vendors' VEX.
-
Policies and alerts
CEL rules, dated violations, delivery by email, signed webhook, Matrix, Mattermost or Slack, and blocking commit statuses on GitHub and GitLab.
-
History and comparison
Every SBOM received becomes a dated snapshot. Compare two: components added, removed, upgraded, and the effect on security.
-
Dashboards
Open findings and their trend, median time to fix, most exposed projects and components, silent agents: your estate at a glance.
-
AI that proves what it finds
Optionally, a local model (Ollama) or Anthropic, when allowed, looks for dependencies no manifest declares. Every finding is verified and comes with its proof.
Guided tour
What your teams see
Who is affected? One search.
The HTTP/2 “Rapid Reset” vulnerability is actively exploited: lotor finds it in the nghttp2 and nginx packages of four servers, with the fixing version and the triage status of each occurrence.
- CVE, GHSA, purl, vers range or digest
- Results grouped by project, ranked by risk
- Full CSV or JSON export

Every upgrade, measured.
Between two snapshots of a repository, lotor lists the components that changed and what security gained: here, 24 upgrades resolving 26 findings.
- Snapshot timeline per branch or tag
- Additions, removals, upgrades and downgrades
- Findings resolved and introduced

One finding, one decision, one trail.
Spring4Shell on the payment API: severity, 99.6% EPSS, listed in the KEV catalog, fixed version. The analyst marks it “affected” and plans the fix; the decision goes to the log and the VEX export.
- Decision per project or for the whole organization
- Standard VEX justifications
- Risk accepted with an expiry date

Your rules, enforced every day.
Start from the bundled templates or write your own rules. A blocking violation marks the commit as failing on the forge: no regression reaches production unnoticed.
- Checked CEL expressions, with preview
- Immediate delivery or daily digest
- Verdict API for your pipelines

Every server, its trajectory.
A host's page shows its findings by severity, their trend over 90 days or 12 months, and its containers, each with its own inventory.
- OS, kernel, architecture, labels
- “Scan now” at the next heartbeat
- SBOM downloads as CycloneDX 1.6 and SPDX 2.3

Screenshots taken on a demo instance: real Debian 12 and Ubuntu 24.04 packages, npm, Maven, PyPI and Go dependencies, current Grype database.
How it works
Three pieces, a single server to run
-
Agents take the inventory
lotor-host-agent on every server, lotor-repo-agent next to your forges. They produce SBOMs with Syft and only send what changed.
-
The server keeps history and analyzes
lotor-server receives SBOMs, stores them as snapshots, scans them with Grype and re-evaluates your policies. One dependency: PostgreSQL.
-
You decide
Web interface in French and English, REST API described in OpenAPI, notifications: each team sees its projects and triages its findings.
Security and sovereignty
Your inventory never leaves your infrastructure
Self-hosted
No online account, no telemetry. Air-gapped sites import the vulnerability database by hand.
Sealed organizations
Isolation enforced by PostgreSQL itself (row-level security), tested route by route.
Per-team permissions
Reader, analyst, administrator: everyone sees only their teams' projects. Audit log of every sensitive action.
Mandatory second factor
TOTP for every local account, single-use recovery codes, account lockout after wrong codes.
Agents under control
Revocable tokens, optional mTLS, per-token rate limiting, secrets encrypted at rest.
Accessible
Interface audited against the RGAA, usable with a keyboard and a screen reader, light and dark themes.
Install
One package and you're off
On Debian 13 or Ubuntu 24.04, the server package creates the local PostgreSQL database, the secrets, the first administrator and the nginx or Apache site. The host agent comes as deb and rpm packages, for amd64 and arm64.
# the server
sudo apt install ./lotor-server_0.2.1_amd64.deb
# on every server to inventory
sudo apt install ./lotor-host-agent_0.2.1_amd64.deb
# server address in /etc/lotor-host-agent/config.yaml,
# enrollment token shown by the web interface
printf '%s' "$TOKEN" | sudo install -m 0600 -o lotor-agent \
-g lotor-agent /dev/stdin /etc/lotor-host-agent/enrollment-token
sudo systemctl enable --now lotor-host-agent.service
Free, for real.
lotor is released under the WTFPL: use it, change it, share it, no strings attached.