Analyze Your Software DNA.
Bomly is a free, open-source command-line tool for understanding what your software depends on. It is built for developers, security engineers, and CI pipelines. Bomly:
- scans source trees, SBOMs, Git refs, and container images into one dependency graph;
- explains why a package is present;
- adds vulnerability and license data when you ask for it with
--enrich; - checks the result against your policy and exits with a code CI can act on;
- writes JSON, SARIF, SPDX, and CycloneDX output.
No account, no login, no service to host, no telemetry. One binary. Bomly contacts no vulnerability or license service unless you pass --enrich. Network and privacy lists every network trigger so you can check that claim yourself.
Install
# macOS / Linuxbrew
brew install bomly-dev/tap/bomly
# Linux / macOS install script
curl -fsSL https://bomly.dev/install.sh | sh
# Windows
winget install Bomly.BomlyCLI
Check the install with bomly version. Installation covers Linux packages, Scoop, go install, the smaller bomly-lite binary that uses your own Syft and Grype, checksums, and uninstalling.
Start with a scan
# Scan the current project
bomly scan
# Scan a specific directory
bomly scan --path ./services/api
# Scan a container image
bomly scan --image ghcr.io/example/app:latest
# Scan a remote Git ref
bomly scan --url https://github.com/owner/repo --ref v1.2.3
# Read an existing SPDX or CycloneDX SBOM
bomly scan --sbom --path ./sbom.cdx.json
Bomly reads manifests, lockfiles, package-manager output, container layers, or existing SBOMs and turns them into one dependency graph. Native detectors cover Go, npm, pnpm, Yarn, Maven, Gradle, Python, Composer, Bundler, GitHub Actions, and more. Syft covers the remaining ecosystems and container images. See the Support matrix and Scan targets.
What Bomly can answer
| Question | Command | Read more |
|---|---|---|
| What do we depend on? | bomly scan | Getting started |
| Which packages have known vulnerabilities, and is there a fix? | bomly scan --enrich | Matchers |
| Should this build fail? | bomly scan --enrich --audit --fail-on high | Auditors, Exit codes |
| Which findings can my code reach? (experimental) | bomly scan --enrich --audit --analyze --fail-on high --fail-on reachable | Reachability |
| Why is this package here? | bomly explain lodash | explain |
| What changed in this PR? | bomly diff --base main --head HEAD --enrich --audit | diff |
| Give me an SBOM | bomly scan -o spdx=sbom.spdx.json -o cyclonedx=sbom.cdx.json | SBOM formats |
| Give me something CI can read | bomly scan --json, --format sarif | Output formats |
Reachability is experimental: "unreachable" is not a guarantee of safety. Use cases has more recipes, and Release assurance lists the checks every release goes through.
Explore interactively
Open the terminal UI when you want to inspect a graph by hand:
bomly scan --interactive
Use it to fuzzy-find packages, inspect versions and scopes, pivot through findings, and see how a dependency entered the graph without writing a report to disk. See Interactive TUI.
Gate pull requests
The Bomly Guard action runs bomly diff against a pull request's merge base and posts the result as a check and a PR comment. Only the packages the PR changed are audited, so existing findings elsewhere never block a PR:
# .github/workflows/bomly.yml
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: bomly-dev/bomly-guard@v1
with:
fail-on: high
See Bomly Guard. CI integration has recipes for GitLab, Jenkins, Azure DevOps, and CircleCI.
Use Bomly with AI agents
Bomly can run as a local server for the Model Context Protocol (MCP), so an AI coding agent can call the same scan, explain, and diff tools you use on the command line:
bomly mcp serve
If you have not installed the CLI, the bomly-mcp npm wrapper starts the same server:
npx -y bomly-mcp
See MCP server for the Claude Code, Cursor, and VS Code setup and the tool reference.
Configure and extend
Bomly reads settings from ~/.bomly/config.yaml, then from the file named by --config or BOMLY_CONFIG, then from BOMLY_* environment variables, then from flags. Later sources win. A config file inside a repository is never loaded on its own: pass --config .bomly/config.yaml to use one. See the Config reference.
Plugins add detectors, matchers, auditors, and analyzers without forking Bomly:
bomly plugins install github:bomly-dev/bomly-plugin-bun-lock-detector@v0.1.0
bomly plugins enable bomly.examples.detector.bun-lock
bomly plugins verify bomly.examples.detector.bun-lock
See Plugins to install and trust plugins, and Plugin authoring to write one.
Documentation
- Getting started — install Bomly and run your first scan
- Tutorial — from first scan to a CI gate on a real project
- Use cases — recipes for PR gates, SBOMs, triage, licenses, and offline scans
- FAQ — quick answers on privacy, accounts, and tool differences
- Scan targets and Monorepos — what Bomly can scan
- Output formats and SBOM formats — text, JSON, SARIF, SPDX, CycloneDX
- CI integration and Bomly Guard — pipelines and the GitHub Action
- MCP server — connect Bomly to Claude Code, Cursor, VS Code, or another MCP client
- Reachability — experimental triage by whether your code can reach a vulnerability
- Plugins — external detectors, matchers, auditors, and analyzers
- Release notes — what changed in each version
- All documentation — the full index
Contributor setup lives in CONTRIBUTING.md. Architecture details live in docs/ARCHITECTURE.md.
Questions and sponsorship
For questions, ideas, and help, use Bomly Discussions. Use this repository's issues for confirmed bugs, regressions, and concrete implementation work.
If Bomly is useful to you, star the repository, share feedback, contribute, or sponsor ongoing maintenance.
License
Bomly CLI is licensed under the Apache License 2.0.