# Glide: Vendor Package Management for Go

Glide is a package manager for [Go](https://golang.org) that is conceptually similar to package managers for other languages such as Cargo for Rust, NPM for Node.js, Pip for Python, Bundler for Ruby, and so forth.

Glide provides the following functionality:

* Records dependency information in a `glide.yaml` file. This includes a name, version or version range, version control information for private repos or when the type cannot be detected, and more.
* Tracks the specific revision each package is locked to in a `glide.lock` file. This enables reproducibly featching the dependency tree.
* Works with Semantic Versions and Semantic Version ranges.
* Supports Git, Bzr, HG, and SVN. These are the same version control systems supported by `go get`.
* Utilizes `vendor/` directories, known as the Vendor Experiment, so that different projects can have differing versions of the same dependencies.
* Allows for aliasing packages which is useful for working with forks.
* Import configuration from Godep, GPM, and GB.

## Installing Glide

There are a few ways to install Glide.

1. Download a [versioned release](https://github.com/Masterminds/glide/releases). Glide releases are semantically versioned.
2. Use a system package manager to install Glide. For example, using `brew install glide` can be used if you're using [Homebrew](http://brew.sh) on Mac.
3. The latest development snapshot can be installed with `go get`. For example, `go get -u github.com/Masterminds/glide`. This is not a release version.
