Skip to content

vulnlog/vulnlog

Repository files navigation

Vulnlog

GitHub release Continuous Integration

Vulnlog is an open-source tool for tracking, documenting and communicating vulnerability analysis directly in your source code repository. It uses a simple YAML format for recording your findings and a CLI for generating suppression files for common SCA scanners.

Note: Vulnlog is in active development. The YAML format, CLI commands and Gradle plugin may still change. Feedback and contributions are very welcome!

Why Vulnlog?

SCA scanners find vulnerabilities, but the analysis, triage and reasoning usually live in tickets, spreadsheets or someone's head. Vulnlog gives that context a home right next to your code:

  • One place for your analysis -- document verdicts, justifications and resolution plans in version-controlled YAML.
  • Suppression file generation -- feed your analysis back into scanners like Trivy, Snyk, Dependency-Check, Grype and others so they stop flagging what you have already reviewed.
  • Works with your workflow -- use the CLI locally, in CI, or via the Gradle plugin.

Quick Start

Install the CLI

Download a native binary from the latest release, or pull the Docker image:

docker pull ghcr.io/vulnlog/vulnlog:latest

Scaffold a new Vulnlog file

vulnlog init --organization "Acme Corp" --name "Acme Web App" --author "Security Team" -o vulnlog.yaml

This creates a minimal vulnlog.yaml you can start editing.

Write your first entry

A Vulnlog file is plain YAML. Here is a minimal example:

# $schema: https://vulnlog.dev/schema/vulnlog-v1.json
---
schemaVersion: "1"

project:
  organization: Acme Corp
  name: Acme Web App
  author: Security Team

releases:
  - id: 1.0.0
    published_at: 2026-01-15

vulnerabilities:

  - id: CVE-2026-1234
    releases: [ 1.0.0 ]
    description: Remote code execution in example-lib
    packages: [ "pkg:npm/[email protected]" ]
    reports:
      - reporter: trivy
    analysis: >
      The vulnerable code path is not reachable in our application
      because we only use the safe subset of the API.
    verdict: not affected
    justification: vulnerable code not in execute path

Validate and generate suppression files

# Check the file for errors
vulnlog validate vulnlog.yaml

# Generate suppression files for all reporters
vulnlog suppress vulnlog.yaml -o ./suppressions/

# Or for a single reporter, written to stdout
vulnlog suppress vulnlog.yaml --reporter trivy -o -

Documentation

Community

Bluesky Mastodon

Contributing

Contributions are welcome! Whether it is a bug report, a docs fix, or a new feature -- check out CONTRIBUTING.md to get started. If you are looking for something to pick up, look for issues labelled good first issue.

⭐ If you find Vulnlog useful, giving it a star on GitHub helps others discover the project.

Thanks go to all contributors:

Contributors