PackageManagementTools

Bo Zhang edited this page Feb 14, 2017 · 73 revisions
Clone this wiki locally

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.

dep tool

dep, will be the official dependency tool. It is currently being implemented, in pre-alpha state and should be used with caution as "Lots of functionality is knowingly missing or broken".

GO15VENDOREXPERIMENT

As of June 19th, 2015, the Go toolchain includes an experimental vendoring flag, GO15VENDOREXPERIMENT. This is now part of the Go 1.5 release and represents the Go team's recommended approach to vendoring dependencies. You can read more about how this environment variable works 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.

Go 1.6 release makes this behaviour the default, so you no longer need to have GO15VENDOREXPERIMENT set. Go 1.7 makes this a standard feature and removes support for this flag.

Tools supporting this feature include:

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.

gogradle https://github.com/blindpirate/gogradle
Title A Full-featured Build Tool for Golang
Author Bo Zhang
Categories Project-scoped dependencies, Go version management, Vendoring, Version/Commit locking, Transitive dependency, Automatic build. Support All platforms
trash https://github.com/rancher/trash
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.
glide https://github.com/Masterminds/glide
Title Lightweight Vendor Package Manager
Author Matt Butcher and Matt Farina
Categories Retrieve and manage packages in your vendor/ directory using the GO15VENDOREXPERIMENT.
gopm https://github.com/gpmgo/gopm
Title Package manage and build tool in Go
Author Jiahua Chen
Categories Revision Locking (git, mercurial, bazaar). Copies into ".vendor/src".
gom https://github.com/mattn/gom
Title Go Manager - bundle for go
Author Yasuhiro Matsumoto
Categories Vendoring/Bundling. Copies into "_vendor/src"
bunch https://github.com/dkulchenko/bunch
Title npm-like tool for managing Go dependencies
Author Daniil Kulchenko
Categories Vendoring/Bundling/Revision Locking. Copies into ".vendor". Does NOT fully support windows.
goop https://github.com/nitrous-io/goop
Title A dependency manager for Go (golang), inspired by Bundler.
Author Nitrous.IO
Categories Vendoring, Revision Locking. Copies into ".vendor/src". Does NOT fully support windows.
govend https://github.com/govend/govend
Title A simple tool to vendor Go package dependencies. It's like go get for vendoring.
Author Jack Spirou
Categories Vendor and lock revisions of packages recursively into the "vendor" directory with go get commands/flags. Supports Go 1.5+ and Windows. Does not alter $GOPATH and works with normal go commands/tooling.

Pkg copy, build using GOPATH modification

Copy packages locally. When building modify the GOPATH to reference the local package store.

godep https://github.com/tools/godep
Title Helps build packages reproducibly by fixing their dependencies
Author Keith Rarick
Categories Vendoring, Version Recording. Copies into "Godep/_workspace/src".
wgo https://github.com/skelterjohn/wgo
Title Managed workspaces on top of the go tool
Author John Asmuth
Categories local GOPATH can be configured.
gb http://getgb.io/
Title Project-based workspaces and dependency management
Author Dave Cheney
Categories Project-based workspaces, vendoring, version locking. Manages dependencies in /vendor/src
goat https://github.com/mediocregopher/goat
Title Simple go dependency manager
Author Brian Picciano
Categories Project-based workspaces and vendoring

Revision Locking

Package source control versions are recorded. Versions are updated into the GOPATH package tree. Requires switching GOPATH for every project.

glock https://github.com/robfig/glock
Title Lock dependencies to specific revisions.
Author Rob Figueiredo
Categories Revision Locking (git, mercurial, bzr, svn)
gobs https://bitbucket.org/vegansk/gobs
Title Build system and package manager for go language
Author Anatoly Galiulin
Categories Revision Locking (git). Requires bash, no Windows support.
godeps https://github.com/rogpeppe/godeps
Title Print, fetch and update dependencies with care. In production use by Canonical. The first tool with this name!
Author Roger Peppe
Categories Revision Locking (git, mercurial, bzr)
gopack https://github.com/d2fn/gopack
Title Dependency management for go inspired by rebar
Author Dietrich Featherston
Categories Revision Locking (git)
gopin https://github.com/laher/gopin
Title Experimental go-get fork with support for tags and alternative repos
Author Go Package Manager
Categories Revision Locking (git)
gigo https://github.com/LyricalSecurity/gigo
Title Helps provide go get support for private repositories, pip for golang
Author Lyrical Security
Categories Vendoring, Revision Locking (git). Does not appear to copy files.

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.

party https://github.com/mjibson/party
Author Matt Jibson
Categories Vendoring, Copies into "_third_party". Does not analyze dependencies first. No inspection.
govendor https://github.com/kardianos/govendor
Title Copy, re-write, and list dependent package status.
Author Daniel Theophanes
Categories Pkg Copy,Import rewrite, record VCS version. Copies into "internal" or "vendor".
vendorize https://github.com/kisielk/vendorize
Author Kamil Kisiel
Categories Vendoring. Copies into "3rdparty".
nut https://github.com/jingweno/nut
Author Jingwen Owen Ou
Categories Pkg Copy & Import rewrite. Copies into "vendor".

Vendor Utilities

Not full vendor tool, but may still provide value.

prewrite https://github.com/dmitris/prewrite
Author Dmitry Savintsev
Categories Import re-writer, add or remove specified prefix
git freeze https://github.com/nicerobot/git-freeze
Author Robert Nix (nicerobot)
Categories Easy Go vendoring via git submodule

Import Proxies

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.

gopkg.in https://gopkg.in
Title Redirect the go tool onto well defined GitHub repositories. Versioning with tags and branches or the repository name.
Author Gustavo Niemeyer
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.

goenv https://bitbucket.org/ymotongpoo/goenv
Title Go environment manager
Author Yoshifumi YAMAGUCHI
Categories Go Version Manager

Client App Test Packages

Here is a list of packages that authors can use to test their tools against.

beego-mgo https://github.com/goinggo/beego-mgo
Author Bill Kennedy
Desc Sample Application For Using the Beego web framework with MGO
revel-mgo https://github.com/goinggo/revel-mgo
Author Bill Kennedy
Desc Sample revel project with mgo support

Abandoned Tools

Not Written in Go

These tools are recorded for completeness, but it is suggested not to use them as they are platform specific.