This page contains a list of tools for managing Go packages and their dependencies (vendoring). The tools are divided into categories based on their approach to version management.
To see popularity of these tools, click here.
See the Modules page.
The official Go proposal is at https://golang.org/issue/24301, filed on March 20, 2018 and accepted on May 21, 2018.
As of June 19th, 2015, the Go toolchain included an experimental vendoring flag,
GO15VENDOREXPERIMENT. This was part of the Go 1.5 release and represented the Go team's recommended approach to vendoring dependencies. You can read more about how this environment variable worked in the Go 1.5 documentation and the original design document. For a more detailed explanation, check out this post by @freeformz or this short explainer from Engineered Web.
The Go 1.6 release made this behaviour the default, so you no longer need to have
GO15VENDOREXPERIMENT set. Go 1.7 made this a standard feature and removed support for the flag.
Tools supporting this feature include:
- manul - Vendor packages using git submodules.
- gvt - Recursively retrieve and vendor packages.
govend - Manage dependencies like
go getbut for
- Glide - Manage packages like composer, npm, bundler, or other languages.
- Rubigo - Golang vendor utility and package manager
Pkg copy, built using GOPATH modification, supports fetching specific version
Copy packages locally. When building modify the GOPATH or use the GO 1.5
GO15VENDOREXPERIMENT to reference the local package store. Not only records specific version, but also fetches specific version.
|Title||A Full-featured Build Tool for Golang|
|Categories||Project-scoped dependencies, Go version management, Vendoring, Version/Commit locking, Transitive dependency, Automatic build. Support All platforms|
|Title||Minimalistic Go vendored code manager|
|Author||Ivan Mikushin, Darren Shepherd|
|Categories||Vendoring, Version/Commit locking, Pruning unimported code, Using package forks. Does not support Windows.|
|Title||Lightweight Vendor Package Manager|
|Author||Matt Butcher and Matt Farina|
|Categories||Retrieve and manage packages in your
|Title||Package manage and build tool in Go|
|Categories||Revision Locking (git, mercurial, bazaar). Copies into ".vendor/src".|
|Title||Go Manager - bundle for go|
|Categories||Vendoring/Bundling. Copies into "_vendor/src"|
|Title||npm-like tool for managing Go dependencies|
|Categories||Vendoring/Bundling/Revision Locking. Copies into ".vendor". Does NOT fully support windows.|
|Title||A dependency manager for Go (golang), inspired by Bundler.|
|Categories||Vendoring, Revision Locking. Copies into ".vendor/src". Does NOT fully support windows.|
|Title||A simple tool to vendor Go package dependencies. It's like
|Categories||Vendor and lock revisions of packages recursively into the "vendor" directory with
Pkg copy, build using GOPATH modification
Copy packages locally. When building modify the GOPATH to reference the local package store.
|Title||Helps build packages reproducibly by fixing their dependencies|
|Categories||Vendoring, Version Recording. Copies into "Godep/_workspace/src".|
|Title||Managed workspaces on top of the go tool|
|Categories||local GOPATH can be configured.|
|Title||Project-based workspaces and dependency management|
|Categories||Project-based workspaces, vendoring, version locking. Manages dependencies in /vendor/src|
|Title||Simple go dependency manager|
|Categories||Project-based workspaces and vendoring|
Package source control versions are recorded. Versions are updated into the GOPATH package tree. Requires switching GOPATH for every project.
|Title||Lock dependencies to specific revisions.|
|Categories||Revision Locking (git, mercurial, bzr, svn)|
|Title||Build system and package manager for go language|
|Categories||Revision Locking (git). Requires bash, no Windows support.|
|Title||Print, fetch and update dependencies with care. In production use by Canonical. The first tool with this name!|
|Categories||Revision Locking (git, mercurial, bzr)|
|Title||Dependency management for go inspired by rebar|
|Categories||Revision Locking (git)|
|Title||Experimental go-get fork with support for tags and alternative repos|
|Author||Go Package Manager|
|Categories||Revision Locking (git)|
|Title||Helps provide go get support for private repositories, pip for golang|
|Categories||Vendoring, Revision Locking (git). Does not appear to copy files.|
|Categories||Revision Locking (git). Does not alter
Pkg copy with import path re-write (As of Go 1.5, this is no longer the recommended practice)
Vendoring with import path rewriting takes the 3rd party source code that is referenced in your project and makes a copy of that code inside a new folder within the project. It re-writes the import paths so there is a single copy of all packages. GOPATH is not modified at any time.
|Categories||Vendoring, Copies into "_third_party". Does not analyze dependencies first. No inspection.|
|Title||Copy, re-write, and list dependent package status.|
|Categories||Pkg Copy,Import rewrite, record VCS version. Copies into "internal" or "vendor".|
|Categories||Vendoring. Copies into "3rdparty".|
|Author||Jingwen Owen Ou|
|Categories||Pkg Copy & Import rewrite. Copies into "vendor".|
Not full vendor tool, but may still provide value.
|Categories||Import re-writer, add or remove specified prefix|
|Author||Robert Nix (nicerobot)|
|Categories||Easy Go vendoring via git submodule|
Import Proxies act as a man in the middle between the Go tool and the VCS. It parses the data stream while the repository is being cloned.
|Title||Redirect the go tool onto well defined GitHub repositories. Versioning with tags and branches or the repository name.|
|Categories||Import Proxy (GitHub)|
Go Version Managers
Go Version Managers allow you to have multiple versions of Go installed on your machine. It allows you to switch between those versions.
|Title||Go environment manager|
|Categories||Go Version Manager|
Client App Test Packages
Here is a list of packages that authors can use to test their tools against.
|Desc||Sample Application For Using the Beego web framework with MGO|
|Desc||Sample revel project with mgo support|
Not Written in Go
These tools are recorded for completeness, but it is suggested not to use them as they are platform specific.