Safeguard
Developer Tools•

Where does a repository's dependency graph go blind?

Dependency graphs read manifests and lockfiles, so they miss vendored code, unsupported ecosystems and runtime loads. Learn the gaps and how to cover them.

Safeguard Security Team
3 min read

A dependency graph goes blind wherever the dependency is not declared in a file the tool understands: vendored copies, unsupported ecosystems, packages fetched at build or run time, binaries and the operating system layer. Cover those gaps with artifact scanning and a short manual inventory.

What the graph sees

GitHub's documentation says its dependency graph is built from the manifest and lock files stored in a repository, plus any data submitted through the dependency submission API. It shows each dependency's version, license, the manifest that included it and known vulnerabilities, and for ecosystems that support transitive dependencies it can show the path that brought one in. It also states that coverage depends on supported ecosystems and file types.

That is a sensible design, and it defines the edges of what you can learn from it.

Six blind spots

  1. Vendored code. A library copied into a folder has no manifest entry. Ask the team for a list of vendored directories.
  2. Unsupported ecosystems. Package managers outside the supported list do not appear. Ask which languages and build tools the product uses and compare them with the tool's list.
  3. Dynamic fetching. Scripts that download a tool or dataset during build, or a plugin loaded at start, bypass the manifest.
  4. Binaries and firmware blobs. Compiled components carry no manifest.
  5. Base images and OS packages. Container layers include packages that no app manifest mentions.
  6. Front end tags. Scripts loaded from a third party domain at page load are not in any package file.

How to cover each gap

Blind spotHow to cover it
Vendored codeInventory directories, record origin and version in a file
Unsupported ecosystemSubmit dependency data through an API or use another scanner
Dynamic fetchingPin and hash downloads, list them in the build script
BinariesBinary analysis or supplier statements
Base imagesScan the built image
Front end tagsTag inventory and content security rules

What to ask a team

  • Does your SBOM come from manifests, or from the built artifact?
  • Where does your build download things that are not in a lockfile?
  • How do you track code copied into the repository?
  • Who checks that the graph is switched on for every repository?

The last one matters. The documentation notes that administrators can enable or disable the graph, so a repository without it shows nothing and may be assumed clean.

Try it yourself

Open the demo and compare the inventory it produces with what a manifest alone would show. Notice the packages that appear only once the full set is analysed.

Click through it at your own pace, or open it full screen.

Safeguard scans containers and projects and generates SBOMs, so a free scan shows how an artifact based view compares with a manifest view.

Quick check

Is the dependency graph an SBOM?

It is a source of data for one. An SBOM also needs the baseline fields, an author and a timestamp.

Does enabling it on every repository fix the gaps?

No. It removes the unscanned repositories, not the blind spots listed above.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.