Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 1 | This 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 | |
| 3 | The approach [endorsed by the Go project](http://golang.org/doc/faq#get_version) is "vendoring" (described below) and [godep](https://github.com/tools/godep) is a well-maintained tool for managing vendored dependencies. |
| 4 | |
| 5 | ## Vendoring |
| 6 | Vendoring 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. All the code your project needs is inside the one project repository. Vendoring also provides a performance enhancement on getting the code because only one url call is required. |
| 7 | |
| 8 | | **godep** |https://github.com/tools/godep| |
| 9 | |:----------|:-----------------------------| |
| 10 | |Title |Helps build packages reproducibly by fixing their dependencies| |
| 11 | |Author |Keith Rarick | |
| 12 | |Categories |Vendoring, Revision Locking (git, mercurial, bazaar)| |
| 13 | | | | |
Chayim | c87ce58 | 2015-05-01 13:40:11 -0400 | [diff] [blame] | 14 | | **gigo** |https://github.com/LyricalSecurity/gigo| |
| 15 | |Title |Helps provide go get support for private repositories, pip for golang| |
| 16 | |Author |Lyrical Security | |
| 17 | |Categories |Vendoring, Revision Locking | |
| 18 | | | | |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 19 | | **gom** |https://github.com/mattn/gom | |
| 20 | |Title |Go Manager - bundle for go | |
| 21 | |Author |Yasuhiro Matsumoto | |
| 22 | |Categories |Vendoring/Bundling | |
| 23 | | | | |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 24 | | **goop** |https://github.com/nitrous-io/goop| |
| 25 | |Title |A dependency manager for Go (golang), inspired by Bundler.| |
| 26 | |Author |Nitrous.IO | |
| 27 | |Categories |Vendoring, Revision Locking | |
| 28 | | | | |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 29 | | **third-party** |https://github.com/coreos/third_party.go| |
| 30 | |Title |Self contained GOPATH helper | |
| 31 | |Author |CoreOS | |
| 32 | |Categories |Vendoring | |
| 33 | |Notes |CoreOS now uses github.com/tools/godep| |
| 34 | | | | |
| 35 | | **vendorize** |https://github.com/kisielk/vendorize| |
| 36 | |Author |Kamil Kisiel | |
| 37 | |Categories |Vendoring | |
| 38 | | | | |
| 39 | | **party** |https://github.com/mjibson/party| |
| 40 | |Author |Matt Jibson | |
| 41 | |Categories |Vendoring | |
Daniel Theophanes | 90d88c0 | 2015-04-16 20:41:02 -0700 | [diff] [blame] | 42 | | | | |
Dmitry Savintsev | 3187113 | 2015-05-01 20:17:59 +0200 | [diff] [blame] | 43 | | **prewrite** |https://github.com/dmitris/prewrite| |
| 44 | |Author |Dmitry Savintsev | |
| 45 | |Categories |Vendoring | |
| 46 | | | | |
Daniel Theophanes | 90d88c0 | 2015-04-16 20:41:02 -0700 | [diff] [blame] | 47 | | **vendor** |https://github.com/kardianos/vendor| |
| 48 | |Author |Daniel Theophanes | |
| 49 | |Categories |Vendoring | |
Daniil Kulchenko | 3d5963e | 2015-04-27 09:45:23 -0700 | [diff] [blame] | 50 | | | | |
| 51 | | **bunch** |https://github.com/dkulchenko/bunch| |
| 52 | |Title |npm-like tool for managing Go dependencies| |
| 53 | |Author |Daniil Kulchenko | |
| 54 | |Categories |Vendoring/Bundling/Revision Locking | |
Daniel Theophanes | 2cbac8f | 2015-04-27 22:23:34 -0700 | [diff] [blame] | 55 | | | | |
| 56 | | **gondler** |https://github.com/rosylilly/gondler| |
| 57 | |Title |Bundler for golang | |
| 58 | |Author |Sho Kusano | |
| 59 | |Categories |Vendoring/Bundling/Revision Locking. Requires Ruby| |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 60 | |
| 61 | ## Revision Locking |
| 62 | Revision Locking creates a dependency file that references specific commits in the different version control systems the code is located in. Just like vendoring, the RL tool is used to get, build and install your project. One advantage is that your project repository continues to only contain the specific project code. |
| 63 | |
John Asmuth | 4d563ed | 2015-05-01 14:02:01 -0400 | [diff] [blame] | 64 | | **dondur** |https://github.com/oguzbilgic/dondur| |
John Asmuth | 7cb550d | 2015-05-01 14:31:41 -0400 | [diff] [blame^] | 65 | |:-----------|:-----------------------------| |
John Asmuth | e81899b | 2015-05-01 14:01:07 -0400 | [diff] [blame] | 66 | |Title |Freeze your Go dependencies with ease| |
| 67 | |Author |Oguz Bilgic | |
| 68 | |Categories |Revision Locking (git, mercurial, bazaar)| |
John Asmuth | 486fca3 | 2015-05-01 14:00:12 -0400 | [diff] [blame] | 69 | | | | |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 70 | | **envie** |https://github.com/sam-falvo/envie| |
| 71 | |Title |Download and manage Go projects and their dependencies| |
| 72 | |Author |Samuel A. Falvo II | |
| 73 | |Categories |Revision Locking (unknown) | |
| 74 | | | | |
| 75 | | **glock** |https://github.com/robfig/glock| |
| 76 | |Title |Lock dependencies to specific revisions.| |
| 77 | |Author |Rob Figueiredo | |
| 78 | |Categories |Revision Locking (git) | |
| 79 | | | | |
| 80 | | **gobs** |https://bitbucket.org/vegansk/gobs| |
| 81 | |Title |Build system and package manager for go language| |
| 82 | |Author |Anatoly Galiulin | |
| 83 | |Categories |Revision Locking (git) | |
| 84 | | | | |
| 85 | | **godep** |https://github.com/tools/godep| |
| 86 | |Title |Helps build packages reproducibly by fixing their dependencies| |
| 87 | |Author |Keith Rarick | |
| 88 | |Categories |Vendoring, Revision Locking (git, mercurial, bazaar)| |
| 89 | | | | |
| 90 | | **godeps** |https://launchpad.net/godeps | |
| 91 | |Title |Print, fetch and update dependencies with care. In production use by Canonical. The first tool with this name!| |
| 92 | |Author |Roger Peppe | |
| 93 | |Categories | Revision Locking (git, mercurial, bzr)| |
| 94 | | **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) | |
| 103 | | | | |
| 104 | | **gopm** |https://github.com/GPMGo/gopm | |
| 105 | |Title |Tool for search, install, update, share packages in Go| |
| 106 | |Author |Am Laher | |
| 107 | |Categories |Revision Locking (git, mercurial, bazaar)| |
| 108 | | | | |
| 109 | | **gpm** |https://github.com/pote/gpm | |
| 110 | |Title |Barebones dependency manager for Go.| |
| 111 | |Author |Pablo Astigarraga | |
| 112 | |Categories |Revision Locking (git, mercurial, bazaar)| |
| 113 | | | | |
| 114 | | **johnny deps** |https://github.com/VividCortex/johnny-deps| |
| 115 | |Title |Barebones dependency manager for Go| |
| 116 | |Author |Baron Schwartz / Gustavo Kristic| |
| 117 | |Categories |Revision Locking (git) | |
| 118 | | | | |
| 119 | | **pack** |https://github.com/theplant/pak| |
| 120 | |Title |Simple package management tool for Go| |
| 121 | |Author |The Plant | |
| 122 | |Categories |Revision Locking (git) | |
| 123 | | | | |
| 124 | | **rx** |http://godoc.org/kylelemons.net/go/rx| |
| 125 | |Title |[Automation for dependency management tasks](http://kylelemons.net/blog/2012/04/22-rx-for-go-headaches.article)| |
| 126 | |Author |Kyle Lemons | |
| 127 | |Categories |Revision Locking (git, mercurial)| |
John Asmuth | 7cb550d | 2015-05-01 14:31:41 -0400 | [diff] [blame^] | 128 | | | | |
| 129 | | **wgo** |https://github.com/skelterjohn/wgo| |
| 130 | |Title |Managed workspaces on top of the go tool| |
| 131 | |Author |John Asmuth | |
| 132 | |Categories |Revision Locking (git, extensible)| |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 133 | |
| 134 | ## Import Proxies |
| 135 | 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. |
| 136 | |
| 137 | | **git-version-proxy** |https://github.com/msiebuhr/git-version-proxy| |
| 138 | |:----------------------|:--------------------------------------------| |
| 139 | |Title |A HTTP Git proxy that only exposes certain versions| |
| 140 | |Author |Morten Siebuhr | |
| 141 | |Categories |Import Proxy (git) | |
| 142 | | | | |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 143 | | **gopkg.in** |https://gopkg.in | |
| 144 | |Title |Redirect the go tool onto well defined GitHub repositories. Versioning with tags and branches or the repository name.| |
| 145 | |Author |Gustavo Niemeyer | |
| 146 | |Categories |Import Proxy (GitHub) | |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 147 | |
| 148 | ## Go Version Managers |
| 149 | Go Version Managers allow you to have multiple versions of Go installed on your machine. It allows you to switch between those versions. |
| 150 | |
| 151 | | **gvm** |https://github.com/moovweb/gvm| |
| 152 | |:--------|:-----------------------------| |
| 153 | |Title |Go Version Manager | |
| 154 | |Author |Josh Bussdieker | |
toromoti | f5db6ae | 2015-01-17 13:59:25 +0900 | [diff] [blame] | 155 | |Categories|Go Version Manager | |
| 156 | |
| 157 | | **goenv** | https://bitbucket.org/ymotongpoo/goenv | |
| 158 | |:-----------|:---------------------------------------| |
| 159 | | Title | Go environment manager | |
| 160 | | Author | Yoshifumi YAMAGUCHI | |
| 161 | | Categories | Go Version Manager | |
Andrew Gerrand | 5bc444d | 2014-12-10 11:35:11 +1100 | [diff] [blame] | 162 | |
| 163 | ## Unclassified |
| 164 | Not able to classify these tools. |
| 165 | |
| 166 | | **go-dep** |https://github.com/go-dep/dep| |
| 167 | |:-----------|:----------------------------| |
| 168 | |Title |Go package dependencies with the help of the Go Dependency Format (GDF)| |
| 169 | |Author |Marc Rene Arns | |
| 170 | |Categories |Not Sure | |
| 171 | |
| 172 | ## Client App Test Packages |
| 173 | Here is a list of packages that authors can use to test their tools against. |
| 174 | |
| 175 | | **beego-mgo** |https://github.com/goinggo/beego-mgo| |
| 176 | |:--------------|:-----------------------------------| |
| 177 | |Author |Bill Kennedy | |
| 178 | |Desc |Sample Application For Using the Beego web framework with MGO| |
| 179 | | | | |
| 180 | | **revel-mgo** |https://github.com/goinggo/revel-mgo| |
| 181 | |Author |Bill Kennedy | |
| 182 | |Desc |Sample revel project with mgo support| |