Go "inconsistent vendoring; run go mod vendor" - Fix in CI
By Daniel Zoghalchali·Latchkey
When a vendor/ directory exists, Go builds from it and checks vendor/modules.txt against go.mod. If the two disagree, the build refuses rather than guess which is right.
What this error means
A build fails with inconsistent vendoring listing modules that differ between go.mod and vendor/modules.txt, ending with a go mod vendor hint. It means the vendor tree was not regenerated after a go.mod change.
go
go: inconsistent vendoring in /home/runner/work/app:
github.com/foo/bar@v1.2.0: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt
To sync the vendor directory, run:
go mod vendor
Diagnose it: module path, proxy, or checksum?
Go module errors name the module but rarely the layer that failed. Separate the three: the module path does not resolve, the proxy cannot serve it, or the checksum database disagrees with what was downloaded.
Terminal
# what Go resolves and from where
go env GOPROXY GOSUMDB GOPRIVATE GOFLAGS
# does the module resolve at all, bypassing the build?
go list -m -versions github.com/org/module
# verify the module cache against go.sum
go mod verify
# private modules must be excluded from proxy and sumdb
go env -w GOPRIVATE=github.com/yourorg/*
Common causes
vendor tree not regenerated
go.mod changed but go mod vendor was never re-run, so vendor/modules.txt is stale.
Partial vendor commit
Some vendored files or modules.txt were omitted from the commit, leaving the tree internally inconsistent.
How to fix it
Regenerate and commit the vendor tree
Run go mod vendor to rebuild vendor/ and vendor/modules.txt from go.mod.
Stage the entire vendor directory plus modules.txt and commit.
Terminal
go mod vendor
git add vendor go.mod go.sum
Verify the vendor tree in CI
Re-run go mod vendor and fail if it changes anything under vendor/.
.github/workflows/ci.yml
go mod vendorgit diff --exit-code vendor
How to prevent it
Re-run go mod vendor after any go.mod change.
Commit the whole vendor/ tree, not a subset.
Add a git diff --exit-code vendor guard to CI.
Frequently asked questions
What causes Go "inconsistent vendoring; run go mod vendor"?
There are 2 common causes: vendor tree not regenerated and partial vendor commit. go.mod changed but go mod vendor was never re-run, so vendor/modules.txt is stale.
How do I fix Go "inconsistent vendoring; run go mod vendor"?
There are 2 fixes depending on which cause you have: regenerate and commit the vendor tree and verify the vendor tree in ci. Work through them in order, since the first is the most common.
What does Go "inconsistent vendoring; run go mod vendor" actually mean?
A build fails with inconsistent vendoring listing modules that differ between go.mod and vendor/modules.txt, ending with a go mod vendor hint.
How do I stop Go "inconsistent vendoring; run go mod vendor" happening again?
Re-run go mod vendor after any go.mod change. The prevention section lists 3 changes that keep it from recurring.