Cybersecurity glossary

What is Dependency Pinning?

Learn what dependency pinning is, how lockfiles and exact versions prevent surprise upgrades, and how pinning improves supply-chain integrity without freezing security patches forever.

DevSecOps and supply chainUpdated August 11, 2026
Also known asVersion pinningExact dependency versionsPinned dependencies

Definition

Dependency pinning is the practice of constraining software dependencies to exact versions—and often exact artifact digests—so builds repeatedly resolve the same components instead of silently floating to newer releases.

Why dependency pinning matters

Floating ranges feel convenient until Friday’s build differs from Monday’s and nobody knows why. Dependency pinning makes the dependency graph an explicit engineering decision instead of a race with registry clocks.

Pinning is a foundation for reproducible builds, trustworthy incident response, and meaningful vulnerability tracking—because you finally know which versions you run.

What teams pin in practice

Direct dependencies

Exact versions in application manifests rather than wide caret/tilde ranges.

Transitive graphs

Lockfiles freeze the full tree so nested packages cannot drift unnoticed.

Toolchains

Compiler, runtime, and package-manager versions pinned in toolchain files.

Base images and actions

Container digests and CI action SHAs instead of moving tags.

How pinning improves integrity

1

Declare intent

Developers add or upgrade a dependency through a reviewed change.

2

Resolve once

The package manager computes a full graph and writes exact versions/hashes.

3

Commit the pins

Lockfiles and digests enter source control as part of the change.

4

Reproduce everywhere

CI and local installs rehydrate the same graph from the committed snapshot.

5

Upgrade deliberately

Automated PRs move pins after tests and security review, not silently at install time.

Pinning strategies compared

StrategyBest forCaveat
Manifest exact versions onlySimple apps with few transitive depsTransitive drift can still occur without a lockfile
Lockfile pinningMost application repositoriesMust be committed and used in CI consistently
Digest pinningImages, artifacts, high-assurance buildsUpdates require explicit digest changes
Vendor / mirror copiesAir-gapped or highly controlled environmentsOperational cost to refresh the mirror

Dependency pinning checklist

  • Commit lockfiles for every application and service you deploy.
  • Fail CI if install commands would mutate the lockfile unexpectedly.
  • Prefer digest pins for container bases and third-party CI actions.
  • Use automated dependency update PRs with tests—not unattended floating ranges.
  • Record package hashes when your ecosystem supports integrity fields.
  • Separate library publishing (may use ranges) from application consumption (should pin).
  • Review major upgrades with extra scrutiny for install scripts and maintainer changes.
  • Pair pinning with SCA so known-bad pinned versions are visible and scheduled for movement.

The practical takeaway

Dependency pinning makes your software’s third-party ingredients deterministic. It does not freeze you in time—it makes time travel explicit through reviewed upgrades.

If two builds can resolve different packages from the same commit, you do not yet have a reliable supply chain. Pin first, then automate careful movement of those pins.

Related security terms

Frequently asked questions

What is dependency pinning in simple terms?

Instead of saying ‘give me something compatible with 2.x,’ you say ‘give me exactly 2.4.1’ so every machine installs the same bits.

Is pinning the same as using a lockfile?

Lockfiles are the common mechanism for pinning an entire graph. Direct pins in manifests help, but transitive dependencies still need a lockfile.

Does pinning stop all supply-chain attacks?

No. It stops surprise version changes and some confusion scenarios. Compromised specific versions still need scanning, verification, and vendor trust controls.

Won’t pinning block security updates?

Only if you never refresh. Healthy teams pin for reproducibility and use automated update bots with tests to move pins deliberately.

Should Docker images be pinned too?

Yes. Prefer digests (`image@sha256:...`) over mutable tags like `latest` for base images and CI actions.

What about ranges like ^1.2.3?

Ranges are convenient for libraries you publish, risky for applications you deploy. Applications generally should lock exact resolved trees.

How do monorepos handle pinning?

Use workspace-aware lockfiles, consistent internal versions, and controlled upgrade PRs so one service cannot silently drift from another.

References

Explore authoritative guidance and frameworks related to dependency pinning.

Explore every security definition

Return to the glossary to search by term, alias, starting letter, or security category.

Browse glossary