blob: 33a961d4cdfc4337591f3723915ec5127dc6b4d8 [file] [log] [blame] [view]
Andrew Gerrand5bc444d2014-12-10 11:35:11 +11001This page contains a list of tools for managing Go packages and their dependencies. The tools are divided into categories based on their approach to version management.
2
Jason Buberel044aea32015-08-17 08:12:05 -07003## GO15VENDOREXPERIMENT
4
Jason Buberelcbb22962015-08-24 07:57:43 -07005As of [June 19th, 2015](https://groups.google.com/d/msg/golang-dev/74zjMON9glU/EOKSoaL5p8wJ), 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](https://golang.org/cmd/go/#hdr-Vendor_Directories) and the [original design document](https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx-rw5t9MxJwkfpx90cqG9AFL0JAYo/view). For a more detailed explanation, check out [this post](https://medium.com/@freeformz/go-1-5-s-vendor-experiment-fd3e830f52c3) by [@freeformz](https://twitter.com/freeformz) or [this short explainer](http://engineeredweb.com/blog/2015/go-1.5-vendor-handling/) from Engineered Web.
Jason Buberel044aea32015-08-17 08:12:05 -07006
Jason Buberel66d32352015-08-23 08:35:14 -07007Tools supporting this feature include:
8
9 * [Godep](https://github.com/tools/godep)
10 * [Govendor](https://github.com/kardianos/govendor)
Jason Buberel66d32352015-08-23 08:35:14 -070011 * [godm](https://github.com/hectorj/godm)
12 * [vexp](https://github.com/kr/vexp)
Jesse Lucas6b640322015-08-23 15:24:06 -040013 * [gv](https://github.com/forestgiant/gv)
Daniel Theophanes3b58ac92015-09-18 08:34:03 -070014 * [gvt](https://github.com/FiloSottile/gvt) - Recursively retrieve and vendor packages.
Jack Spiroudf7580b2015-09-10 14:42:40 -050015 * [govend](https://github.com/gophersaurus/govend)
Daniel Theophanes3b58ac92015-09-18 08:34:03 -070016 * [Glide](https://github.com/Masterminds/glide)
Jason Buberel044aea32015-08-17 08:12:05 -070017
Jason Bubereld16be8a2015-08-23 13:19:27 -070018## Pkg copy, built using GOPATH modification, supports fetching specific version
Daniel Theophanes6626fb22015-05-02 06:40:58 -070019
Jason Bubereld16be8a2015-08-23 13:19:27 -070020Copy 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.
Daniel Theophanes6626fb22015-05-02 06:40:58 -070021
Matt Farinaa2dad972015-09-01 19:46:04 -040022| **glide** |https://github.com/Masterminds/glide|
Matt Farinacb3f5982015-09-01 19:47:07 -040023|:----------|:-----------------------------|
Matt Farinaa2dad972015-09-01 19:46:04 -040024|Title |Lightweight Vendor Package Manager|
25|Author |Matt Butcher and Matt Farina |
26|Categories |Retrieve and manage packages in your `vendor/` directory using the `GO15VENDOREXPERIMENT`. |
27| | |
Daniel Theophanes6626fb22015-05-02 06:40:58 -070028| **gopm** |https://github.com/GPMGo/gopm |
Daniel Theophanes6626fb22015-05-02 06:40:58 -070029|Title |Tool for search, install, update, share packages in Go|
30|Author |Am Laher |
31|Categories |Revision Locking (git, mercurial, bazaar). Copies into ".vendor/src".|
32| | |
33| **gom** |https://github.com/mattn/gom |
34|Title |Go Manager - bundle for go |
35|Author |Yasuhiro Matsumoto |
36|Categories |Vendoring/Bundling. Copies into "_vendor/src" |
37| | |
38| **bunch** |https://github.com/dkulchenko/bunch|
39|Title |npm-like tool for managing Go dependencies|
40|Author |Daniil Kulchenko |
41|Categories |Vendoring/Bundling/Revision Locking. Copies into ".vendor". Does NOT fully support windows.|
42| | |
43| **goop** |https://github.com/nitrous-io/goop|
44|Title |A dependency manager for Go (golang), inspired by Bundler.|
45|Author |Nitrous.IO |
46|Categories |Vendoring, Revision Locking. Copies into ".vendor/src". Does NOT fully support windows. |
Jack Spiroudf7580b2015-09-10 14:42:40 -050047| |
Jack Spirou509a99d2015-09-10 14:43:48 -050048| **govend** |https://github.com/gophersaurus/govend |
Jack Spirou49efb9c2015-09-10 14:45:59 -050049|Title |A simple tool to vendor dependencies |
Jack Spirou509a99d2015-09-10 14:43:48 -050050|Author |Jack Spirou |
51|Categories |Vendor and lock revisions of packages in `vendor/` via the `GO15VENDOREXPERIMENT`. |
Daniel Theophanes6626fb22015-05-02 06:40:58 -070052
53## Pkg copy, build using GOPATH modification
Jason Bubereld16be8a2015-08-23 13:19:27 -070054
Daniel Theophanes6626fb22015-05-02 06:40:58 -070055Copy packages locally. When building modify the GOPATH to reference the local package store.
Andrew Gerrand5bc444d2014-12-10 11:35:11 +110056
John Asmuthae6c16a2015-05-01 14:35:23 -040057| **godep** |https://github.com/tools/godep|
Daniel Theophanes1376c402015-05-01 12:01:03 -070058|:----------|:-----------------------------|
John Asmuthae6c16a2015-05-01 14:35:23 -040059|Title |Helps build packages reproducibly by fixing their dependencies|
60|Author |Keith Rarick |
Daniel Theophanes19437fc2015-05-06 21:18:43 -070061|Categories |Vendoring, Version Recording. Copies into "Godep/_workspace/src".|
John Asmuthae6c16a2015-05-01 14:35:23 -040062| | |
Daniel Theophanes6626fb22015-05-02 06:40:58 -070063| **wgo** |https://github.com/skelterjohn/wgo|
64|Title |Managed workspaces on top of the go tool|
65|Author |John Asmuth |
66|Categories |local GOPATH can be configured.|
Jason Buberela6db58e2015-07-11 16:21:03 -070067| | |
Jason Buberela6db58e2015-07-11 16:21:03 -070068| **gb** |http://getgb.io/|
69|Title |Project-based workspaces and dependency management|
70|Author |Dave Cheney |
71|Categories |Project-based workspaces, vendoring, version locking. Manages dependencies in /vendor/src|
Andrew Gerrand5bc444d2014-12-10 11:35:11 +110072
73## Revision Locking
Jason Bubereld16be8a2015-08-23 13:19:27 -070074
Daniel Theophanes6626fb22015-05-02 06:40:58 -070075Package source control versions are recorded. Versions are updated into the GOPATH package tree.
76Requires switching GOPATH for every project.
Andrew Gerrand5bc444d2014-12-10 11:35:11 +110077
Andrew Gerrand5bc444d2014-12-10 11:35:11 +110078| **glock** |https://github.com/robfig/glock|
Jason Buberela6db58e2015-07-11 16:21:03 -070079|:-----------|:-----------------------------|
Andrew Gerrand5bc444d2014-12-10 11:35:11 +110080|Title |Lock dependencies to specific revisions.|
81|Author |Rob Figueiredo |
82|Categories |Revision Locking (git) |
83| | |
84| **gobs** |https://bitbucket.org/vegansk/gobs|
85|Title |Build system and package manager for go language|
86|Author |Anatoly Galiulin |
Daniel Theophanes0af40002015-05-02 07:07:28 -070087|Categories |Revision Locking (git). Requires bash, no Windows support. |
Andrew Gerrand5bc444d2014-12-10 11:35:11 +110088| | |
Andrew Gerrand5bc444d2014-12-10 11:35:11 +110089| **godeps** |https://launchpad.net/godeps |
90|Title |Print, fetch and update dependencies with care. In production use by Canonical. The first tool with this name!|
91|Author |Roger Peppe |
92|Categories | Revision Locking (git, mercurial, bzr)|
Daniel Theophanes6626fb22015-05-02 06:40:58 -070093| | |
Andrew Gerrand5bc444d2014-12-10 11:35:11 +110094| **gopack** |https://github.com/d2fn/gopack|
95|Title |Dependency management for go inspired by rebar|
96|Author |Dietrich Featherston |
97|Categories |Revision Locking (git) |
98| | |
99| **gopin** |https://github.com/laher/gopin|
100|Title |Experimental go-get fork with support for tags and alternative repos|
101|Author |Go Package Manager |
102|Categories |Revision Locking (git) |
Daniel Theophanes6626fb22015-05-02 06:40:58 -0700103| | |
104| **gigo** |https://github.com/LyricalSecurity/gigo|
105|Title |Helps provide go get support for private repositories, pip for golang|
106|Author |Lyrical Security |
107|Categories |Vendoring, Revision Locking (git). Does not appear to copy files. |
108
Jason Bubereld16be8a2015-08-23 13:19:27 -0700109## Pkg copy with import path re-write (As of Go 1.5, this is no longer the recommended practice)
110
111Vendoring 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.
112
113| **party** |https://github.com/mjibson/party|
114|:----------|:-----------------------------|
115|Author |Matt Jibson |
116|Categories |Vendoring, Copies into "_third_party". Does not analyze dependencies first. No inspection.|
117| | |
118| **govendor** |https://github.com/kardianos/govendor|
119|Title |Copy, re-write, and list dependent package status.|
120|Author |Daniel Theophanes |
121|Categories |Pkg Copy,Import rewrite, record VCS version. Copies into "internal" or "vendor". |
122| | |
123| **vendorize** |https://github.com/kisielk/vendorize|
124|Author |Kamil Kisiel |
125|Categories |Vendoring. Copies into "3rdparty". |
126| | |
127| **nut** |https://github.com/jingweno/nut|
128|Author |Jingwen Owen Ou |
129|Categories |Pkg Copy & Import rewrite. Copies into "vendor". |
130
Daniel Theophanes6626fb22015-05-02 06:40:58 -0700131
132## Vendor Utilities
133Not full vendor tool, but may still provide value.
134
135| **prewrite** |https://github.com/dmitris/prewrite|
136|:-----------|:-----------------------------|
137|Author |Dmitry Savintsev |
138|Categories |Import re-writer, add or remove specified prefix |
Andrew Gerrand5bc444d2014-12-10 11:35:11 +1100139
140## Import Proxies
141Import 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.
142
Andrew Gerrand5bc444d2014-12-10 11:35:11 +1100143| **gopkg.in** |https://gopkg.in |
James Whitedd414852015-09-22 15:07:19 +0100144|:----------------------|:--------------------------------------------|
Andrew Gerrand5bc444d2014-12-10 11:35:11 +1100145|Title |Redirect the go tool onto well defined GitHub repositories. Versioning with tags and branches or the repository name.|
146|Author |Gustavo Niemeyer |
147|Categories |Import Proxy (GitHub) |
Andrew Gerrand5bc444d2014-12-10 11:35:11 +1100148
149## Go Version Managers
150Go Version Managers allow you to have multiple versions of Go installed on your machine. It allows you to switch between those versions.
151
toromotif5db6ae2015-01-17 13:59:25 +0900152| **goenv** | https://bitbucket.org/ymotongpoo/goenv |
153|:-----------|:---------------------------------------|
154| Title | Go environment manager |
155| Author | Yoshifumi YAMAGUCHI |
156| Categories | Go Version Manager |
Andrew Gerrand5bc444d2014-12-10 11:35:11 +1100157
Andrew Gerrand5bc444d2014-12-10 11:35:11 +1100158
159## Client App Test Packages
160Here is a list of packages that authors can use to test their tools against.
161
162| **beego-mgo** |https://github.com/goinggo/beego-mgo|
163|:--------------|:-----------------------------------|
164|Author |Bill Kennedy |
165|Desc |Sample Application For Using the Beego web framework with MGO|
166| | |
167| **revel-mgo** |https://github.com/goinggo/revel-mgo|
168|Author |Bill Kennedy |
Daniel Theophanes6626fb22015-05-02 06:40:58 -0700169|Desc |Sample revel project with mgo support|
170
171## Abandoned Tools
172 * https://github.com/coreos/third_party.go
173 * http://godoc.org/kylelemons.net/go/rx
174 * https://github.com/theplant/pak
James Whitedd414852015-09-22 15:07:19 +0100175 * https://github.com/msiebuhr/git-version-proxy
Daniel Theophanes6626fb22015-05-02 06:40:58 -0700176
177## Not Written in Go
178These tools are recorded for completeness, but it is suggested not to use them as they are platform specific.
179 * https://github.com/rosylilly/gondler
180 * https://github.com/VividCortex/johnny-deps
181 * https://github.com/moovweb/gvm
Jack Spiroudf7580b2015-09-10 14:42:40 -0500182 * https://github.com/pote/gpm