Safeguard
Security Guides•

How do you find every dependency manifest across all your repositories?

Search every repo for manifest and lockfile names, join the hits to owners, and compare to what you think you run. The gaps are your findings.

Safeguard Security Team
4 min read

Search every repository for the manifest and lock file names of each ecosystem you use, list the hits by repo and path, and then compare against what you believe you run. The gaps, such as repos with a manifest but no lock, or forgotten directories, are the findings. Repeat the search on a schedule.

Why a manual list is not enough

Teams usually know their main services. They forget the internal tool, the old prototype, the data script with its own requirements file, the sample app inside the docs folder. Those are exactly the places where nobody watches advisories.

Inventory first, then control. You cannot lock what you cannot find.

File names to search for

Use names that official docs establish:

EcosystemManifest or lock files to look for
npmpackage.json, package-lock.json
RustCargo.toml, Cargo.lock
Gogo.mod, go.sum
.NETproject files with PackageReference items, packages.lock.json
Gradlegradle.lockfile, buildscript-gradle.lockfile
PHPcomposer.json, composer.lock
Mavenpom.xml
Pythonrequirements files, pylock.toml

Add your own ecosystems. The Gradle docs say lock state lives in a gradle.lockfile at the root of each project or subproject directory, and buildscript locks use a separate name. NuGet allows a project specific name, packages.project_name.lock.json, when several projects share a directory.

Steps

  1. Search. Use your code host's search or clone and run a file search. Include archived and forked repos if they still deploy.
  2. Normalize. Record repo, path, ecosystem, and whether a lock sits next to the manifest.
  3. Join. Match each repo to an owner using a service catalog or CODEOWNERS file. Unowned hits go on a list of their own.
  4. Compare. Check the list against the services you believe exist, and against what is actually deployed.
  5. Schedule. Rerun monthly, and diff the results.

What the results tell you

  • A manifest with no lock: an uncontrolled install.
  • A lock with no manifest change in years: possibly abandoned.
  • Many manifests inside one repo: a monorepo that needs per directory ownership.
  • A repo that deploys but has no manifest: likely vendored or built another way, so check how.

Nested and generated files

Search inside subdirectories, not only the root. Also treat generated lock files with care: if a build creates them at CI time and does not commit them, your search will miss them. Note those repos separately and ask whether the lock should be committed.

Try it yourself

Open the demo and look at how a dependency inventory shows direct and transitive components in one view. Pay attention to how each component is tied back to where it came from.

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

Safeguard can help here: it scans dependencies and generates SBOMs, applies reachability analysis so you can sort findings by what your code can actually call, and enforces policies and gates on pull requests. You can try a free scan on a repository to see what it finds.

Quick check

Do I need to search forks and archived repos?

Only those that still build or deploy something. Archived repos that nothing uses can be listed and ignored.

What if a repo has no manifest at all?

Find out how it gets its code. It may vendor dependencies, use another build tool, or contain only static content.

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.