diff --git a/action/get.go b/action/get.go
index e5135e8..5665ef6 100644
--- a/action/get.go
+++ b/action/get.go
@@ -37,7 +37,10 @@
 	// Fetch the new packages. Can't resolve versions via installer.Update if
 	// get is called while the vendor/ directory is empty so we checkout
 	// everything.
-	installer.Checkout(conf, false)
+	err = installer.Checkout(conf, false)
+	if err != nil {
+		msg.Die("Failed to checkout packages: %s", err)
+	}
 
 	// Prior to resolving dependencies we need to start working with a clone
 	// of the conf because we'll be making real changes to it.
diff --git a/action/list.go b/action/list.go
index a2d35c7..8ff6c69 100644
--- a/action/list.go
+++ b/action/list.go
@@ -1,6 +1,7 @@
 package action
 
 import (
+	"encoding/json"
 	"path/filepath"
 	"sort"
 
@@ -13,8 +14,8 @@
 // Params:
 //  - dir (string): basedir
 //  - deep (bool): whether to do a deep scan or a shallow scan
-func List(basedir string, deep bool) {
-
+//  - format (string): The format to output (text, json, json-pretty)
+func List(basedir string, deep bool, format string) {
 	basedir, err := filepath.Abs(basedir)
 	if err != nil {
 		msg.Die("Could not read directory: %s", err)
@@ -27,34 +28,71 @@
 	h := &dependency.DefaultMissingPackageHandler{Missing: []string{}, Gopath: []string{}}
 	r.Handler = h
 
-	sortable, err := r.ResolveLocal(deep)
+	localPkgs, err := r.ResolveLocal(deep)
 	if err != nil {
 		msg.Die("Error listing dependencies: %s", err)
 	}
-
-	msg.Info("Sorting...")
-	sort.Strings(sortable)
-
-	msg.Puts("INSTALLED packages:")
-	for _, k := range sortable {
-		v, err := filepath.Rel(basedir, k)
+	sort.Strings(localPkgs)
+	installed := make([]string, len(localPkgs))
+	for i, pkg := range localPkgs {
+		relPkg, err := filepath.Rel(basedir, pkg)
 		if err != nil {
-			//msg.Warn("Failed to Rel path: %s", err)
-			v = k
+			// msg.Warn("Failed to Rel path: %s", err)
+			relPkg = pkg
 		}
-		msg.Puts("\t%s", v)
+		installed[i] = relPkg
+	}
+	l := PackageList{
+		Installed: installed,
+		Missing:   h.Missing,
+		Gopath:    h.Gopath,
 	}
 
-	if len(h.Missing) > 0 {
-		msg.Puts("\nMISSING packages:")
-		for _, pkg := range h.Missing {
+	outputList(l, format)
+}
+
+// PackageList contains the packages being used by their location
+type PackageList struct {
+	Installed []string `json:"installed"`
+	Missing   []string `json:"missing"`
+	Gopath    []string `json:"gopath"`
+}
+
+const (
+	textFormat       = "text"
+	jsonFormat       = "json"
+	jsonPrettyFormat = "json-pretty"
+)
+
+func outputList(l PackageList, format string) {
+	switch format {
+	case textFormat:
+		msg.Puts("INSTALLED packages:")
+		for _, pkg := range l.Installed {
 			msg.Puts("\t%s", pkg)
 		}
-	}
-	if len(h.Gopath) > 0 {
-		msg.Puts("\nGOPATH packages:")
-		for _, pkg := range h.Gopath {
-			msg.Puts("\t%s", pkg)
+
+		if len(l.Missing) > 0 {
+			msg.Puts("\nMISSING packages:")
+			for _, pkg := range l.Missing {
+				msg.Puts("\t%s", pkg)
+			}
 		}
+		if len(l.Gopath) > 0 {
+			msg.Puts("\nGOPATH packages:")
+			for _, pkg := range l.Gopath {
+				msg.Puts("\t%s", pkg)
+			}
+		}
+	case jsonFormat:
+		json.NewEncoder(msg.Default.Stdout).Encode(l)
+	case jsonPrettyFormat:
+		b, err := json.MarshalIndent(l, "", "  ")
+		if err != nil {
+			msg.Die("could not unmarshal package list: %s", err)
+		}
+		msg.Puts(string(b))
+	default:
+		msg.Die("invalid output format: must be one of: json|json-pretty|text")
 	}
 }
diff --git a/action/list_test.go b/action/list_test.go
index 6792210..69e3eaf 100644
--- a/action/list_test.go
+++ b/action/list_test.go
@@ -2,20 +2,49 @@
 
 import (
 	"bytes"
+	"encoding/json"
 	"testing"
 
 	"github.com/Masterminds/glide/msg"
 )
 
 func TestList(t *testing.T) {
-	var buf bytes.Buffer
-	old := msg.Default.Stdout
 	msg.Default.PanicOnDie = true
+	old := msg.Default.Stdout
+	defer func() {
+		msg.Default.Stdout = old
+	}()
+
+	var buf bytes.Buffer
 	msg.Default.Stdout = &buf
-	List("../", false)
+	List("../", false, "text")
 	if buf.Len() < 5 {
 		t.Error("Expected some data to be found.")
 	}
-	// TODO: We should capture and test output.
-	msg.Default.Stdout = old
+
+	var buf2 bytes.Buffer
+	msg.Default.Stdout = &buf2
+	List("../", false, "json")
+	j := buf2.Bytes()
+	var o PackageList
+	err := json.Unmarshal(j, &o)
+	if err != nil {
+		t.Errorf("Error unmarshaling json list: %s", err)
+	}
+	if len(o.Installed) == 0 {
+		t.Error("No packages found on json list")
+	}
+
+	var buf3 bytes.Buffer
+	msg.Default.Stdout = &buf3
+	List("../", false, "json-pretty")
+	j = buf3.Bytes()
+	var o2 PackageList
+	err = json.Unmarshal(j, &o2)
+	if err != nil {
+		t.Errorf("Error unmarshaling json-pretty list: %s", err)
+	}
+	if len(o2.Installed) == 0 {
+		t.Error("No packages found on json-pretty list")
+	}
 }
diff --git a/action/project_info.go b/action/project_info.go
new file mode 100644
index 0000000..5e0995e
--- /dev/null
+++ b/action/project_info.go
@@ -0,0 +1,39 @@
+package action
+
+import (
+	"bytes"
+
+	"github.com/Masterminds/glide/msg"
+)
+
+func Info(format string) {
+	conf := EnsureConfig()
+	var buffer bytes.Buffer
+	varInit := false
+	for _, var_format := range format {
+		if varInit {
+			switch var_format {
+			case 'n':
+				buffer.WriteString(conf.Name)
+			case 'd':
+				buffer.WriteString(conf.Description)
+			case 'h':
+				buffer.WriteString(conf.Home)
+			case 'l':
+				buffer.WriteString(conf.License)
+			default:
+				msg.Die("Invalid format %s", string(var_format))
+			}
+		} else {
+			switch var_format {
+			case '%':
+				varInit = true
+				continue
+			default:
+				buffer.WriteString(string(var_format))
+			}
+		}
+		varInit = false
+	}
+	msg.Puts(buffer.String())
+}
diff --git a/glide.go b/glide.go
index e13a8d9..e205796 100644
--- a/glide.go
+++ b/glide.go
@@ -52,7 +52,7 @@
 	"os/user"
 )
 
-var version = "0.10.2"
+var version = "0.11.0-dev"
 
 const usage = `The lightweight vendor package manager for your Go projects.
 
@@ -134,12 +134,12 @@
 			ShortName: "init",
 			Usage:     "Initialize a new project, creating a glide.yaml file",
 			Description: `This command starts from a project without Glide and
-	sets it up. It generates a glide.yaml file, parsing your codebase to guess
-	the dependencies to include. Once this step is done you may edit the
-	glide.yaml file to update imported dependency properties such as the version
-	or version range to include.
+   sets it up. It generates a glide.yaml file, parsing your codebase to guess
+   the dependencies to include. Once this step is done you may edit the
+   glide.yaml file to update imported dependency properties such as the version
+   or version range to include.
 
-	To fetch the dependencies you may run 'glide install'.`,
+   To fetch the dependencies you may run 'glide install'.`,
 			Flags: []cli.Flag{
 				cli.BoolFlag{
 					Name:  "skip-import",
@@ -154,33 +154,33 @@
 			Name:  "get",
 			Usage: "Install one or more packages into `vendor/` and add dependency to glide.yaml.",
 			Description: `Gets one or more package (like 'go get') and then adds that file
-	to the glide.yaml file. Multiple package names can be specified on one line.
+   to the glide.yaml file. Multiple package names can be specified on one line.
 
-		$ glide get github.com/Masterminds/cookoo/web
+   	$ glide get github.com/Masterminds/cookoo/web
 
-	The above will install the project github.com/Masterminds/cookoo and add
-	the subpackage 'web'.
+   The above will install the project github.com/Masterminds/cookoo and add
+   the subpackage 'web'.
 
-	If a fetched dependency has a glide.yaml file, configuration from Godep,
-	GPM, or GB Glide that configuration will be used to find the dependencies
-	and versions to fetch. If those are not available the dependent packages will
-	be fetched as either a version specified elsewhere or the latest version.
+   If a fetched dependency has a glide.yaml file, configuration from Godep,
+   GPM, or GB Glide that configuration will be used to find the dependencies
+   and versions to fetch. If those are not available the dependent packages will
+   be fetched as either a version specified elsewhere or the latest version.
 
-	When adding a new dependency Glide will perform an update to work out the
-	the versions to use from the dependency tree. This will generate an updated
-	glide.lock file with specific locked versions to use.
+   When adding a new dependency Glide will perform an update to work out the
+   the versions to use from the dependency tree. This will generate an updated
+   glide.lock file with specific locked versions to use.
 
-	If you are storing the outside dependencies in your version control system
-	(VCS), also known as vendoring, there are a few flags that may be useful.
-	The '--update-vendored' flag will cause Glide to update packages when VCS
-	information is unavailable. This can be used with the '--strip-vcs' flag which
-	will strip VCS data found in the vendor directory. This is useful for
-	removing VCS data from transitive dependencies and initial setups. The
-	'--strip-vendor' flag will remove any nested 'vendor' folders and
-	'Godeps/_workspace' folders after an update (along with undoing any Godep
-	import rewriting). Note, The Godeps specific functionality is deprecated and
-	will be removed when most Godeps users have migrated to using the vendor
-	folder.`,
+   If you are storing the outside dependencies in your version control system
+   (VCS), also known as vendoring, there are a few flags that may be useful.
+   The '--update-vendored' flag will cause Glide to update packages when VCS
+   information is unavailable. This can be used with the '--strip-vcs' flag which
+   will strip VCS data found in the vendor directory. This is useful for
+   removing VCS data from transitive dependencies and initial setups. The
+   '--strip-vendor' flag will remove any nested 'vendor' folders and
+   'Godeps/_workspace' folders after an update (along with undoing any Godep
+   import rewriting). Note, The Godeps specific functionality is deprecated and
+   will be removed when most Godeps users have migrated to using the vendor
+   folder.`,
 			Flags: []cli.Flag{
 				cli.BoolFlag{
 					Name:  "insecure",
@@ -259,12 +259,11 @@
 			ShortName: "rm",
 			Usage:     "Remove a package from the glide.yaml file, and regenerate the lock file.",
 			Description: `This takes one or more package names, and removes references from the glide.yaml file.
-	This will rebuild the glide lock file with the following constraints:
+   This will rebuild the glide lock file with the following constraints:
 
-	- Dependencies are re-negotiated. Any that are no longer used are left out of the lock.
-	- Minor version re-nogotiation is performed on remaining dependencies.
-	- No updates are peformed. You may want to run 'glide up' to accomplish that.
-`,
+   - Dependencies are re-negotiated. Any that are no longer used are left out of the lock.
+   - Minor version re-nogotiation is performed on remaining dependencies.
+   - No updates are peformed. You may want to run 'glide up' to accomplish that.`,
 			Flags: []cli.Flag{
 				cli.BoolFlag{
 					Name:  "delete,d",
@@ -360,9 +359,7 @@
 			Description: `Given a directory, list all the relevant Go paths that are not vendored.
 
 Example:
-
-			$ go test $(glide novendor)
-`,
+   $ go test $(glide novendor)`,
 			Flags: []cli.Flag{
 				cli.StringFlag{
 					Name:  "dir,d",
@@ -392,12 +389,12 @@
 			ShortName: "i",
 			Usage:     "Install a project's dependencies",
 			Description: `This uses the native VCS of each packages to install
-		the appropriate version. There are two ways a projects dependencies can
-	be installed. When there is a glide.yaml file defining the dependencies but
-	no lock file (glide.lock) the dependencies are installed using the "update"
-	command and a glide.lock file is generated pinning all dependencies. If a
-	glide.lock file is already present the dependencies are installed or updated
-	from the lock file.`,
+   the appropriate version. There are two ways a projects dependencies can
+   be installed. When there is a glide.yaml file defining the dependencies but
+   no lock file (glide.lock) the dependencies are installed using the "update"
+   command and a glide.lock file is generated pinning all dependencies. If a
+   glide.lock file is already present the dependencies are installed or updated
+   from the lock file.`,
 			Flags: []cli.Flag{
 				cli.BoolFlag{
 					Name:  "delete",
@@ -458,42 +455,41 @@
 			ShortName: "up",
 			Usage:     "Update a project's dependencies",
 			Description: `This uses the native VCS of each package to try to
-	pull the most applicable updates. Packages with fixed refs (Versions or
-	tags) will not be updated. Packages with no ref or with a branch ref will
-	be updated as expected.
+   pull the most applicable updates. Packages with fixed refs (Versions or
+   tags) will not be updated. Packages with no ref or with a branch ref will
+   be updated as expected.
 
-	If a dependency has a glide.yaml file, update will read that file and
-	update those dependencies accordingly. Those dependencies are maintained in
-	a the top level 'vendor/' directory. 'vendor/foo/bar' will have its
-	dependencies stored in 'vendor/'. This behavior can be disabled with
-	'--no-recursive'. When this behavior is skipped a glide.lock file is not
-	generated because the full dependency tree cannot be known.
+   If a dependency has a glide.yaml file, update will read that file and
+   update those dependencies accordingly. Those dependencies are maintained in
+   a the top level 'vendor/' directory. 'vendor/foo/bar' will have its
+   dependencies stored in 'vendor/'. This behavior can be disabled with
+   '--no-recursive'. When this behavior is skipped a glide.lock file is not
+   generated because the full dependency tree cannot be known.
 
-	Glide will also import Godep, GB, and GPM files as it finds them in dependencies.
-	It will create a glide.yaml file from the Godeps data, and then update. This
-	has no effect if '--no-recursive' is set.
+   Glide will also import Godep, GB, and GPM files as it finds them in dependencies.
+   It will create a glide.yaml file from the Godeps data, and then update. This
+   has no effect if '--no-recursive' is set.
 
-	If you are storing the outside dependencies in your version control system
-	(VCS), also known as vendoring, there are a few flags that may be useful.
-	The '--update-vendored' flag will cause Glide to update packages when VCS
-	information is unavailable. This can be used with the '--strip-vcs' flag which
-	will strip VCS data found in the vendor directory. This is useful for
-	removing VCS data from transitive dependencies and initial setups. The
-	'--strip-vendor' flag will remove any nested 'vendor' folders and
-	'Godeps/_workspace' folders after an update (along with undoing any Godep
-	import rewriting). Note, The Godeps specific functionality is deprecated and
-	will be removed when most Godeps users have migrated to using the vendor
-	folder.
+   If you are storing the outside dependencies in your version control system
+   (VCS), also known as vendoring, there are a few flags that may be useful.
+   The '--update-vendored' flag will cause Glide to update packages when VCS
+   information is unavailable. This can be used with the '--strip-vcs' flag which
+   will strip VCS data found in the vendor directory. This is useful for
+   removing VCS data from transitive dependencies and initial setups. The
+   '--strip-vendor' flag will remove any nested 'vendor' folders and
+   'Godeps/_workspace' folders after an update (along with undoing any Godep
+   import rewriting). Note, The Godeps specific functionality is deprecated and
+   will be removed when most Godeps users have migrated to using the vendor
+   folder.
 
-	Note, Glide detects vendored dependencies. With the '--update-vendored' flag
-	Glide will update vendored dependencies leaving them in a vendored state.
-	Tertiary dependencies will not be vendored automatically unless the
-	'--strip-vcs' flag is used along with it.
+   Note, Glide detects vendored dependencies. With the '--update-vendored' flag
+   Glide will update vendored dependencies leaving them in a vendored state.
+   Tertiary dependencies will not be vendored automatically unless the
+   '--strip-vcs' flag is used along with it.
 
-	By default, packages that are discovered are considered transient, and are
-	not stored in the glide.yaml file. The --file=NAME.yaml flag allows you
-	to save the discovered dependencies to a YAML file.
-	`,
+   By default, packages that are discovered are considered transient, and are
+   not stored in the glide.yaml file. The --file=NAME.yaml flag allows you
+   to save the discovered dependencies to a YAML file.`,
 			Flags: []cli.Flag{
 				cli.BoolFlag{
 					Name:  "delete",
@@ -571,11 +567,11 @@
 			Name:  "tree",
 			Usage: "Tree prints the dependencies of this project as a tree.",
 			Description: `This scans a project's source files and builds a tree
-	representation of the import graph.
+   representation of the import graph.
 
-	It ignores testdata/ and directories that begin with . or _. Packages in
-	vendor/ are only included if they are referenced by the main project or
-	one of its dependencies.`,
+   It ignores testdata/ and directories that begin with . or _. Packages in
+   vendor/ are only included if they are referenced by the main project or
+   one of its dependencies.`,
 			Action: func(c *cli.Context) {
 				action.Tree(".", false)
 			},
@@ -585,14 +581,62 @@
 			Usage: "List prints all dependencies that the present code references.",
 			Description: `List scans your code and lists all of the packages that are used.
 
-			It does not use the glide.yaml. Instead, it inspects the code to determine what packages are
-			imported.
+   It does not use the glide.yaml. Instead, it inspects the code to determine what packages are
+   imported.
 
-			Directories that begin with . or _ are ignored, as are testdata directories. Packages in
-			vendor are only included if they are used by the project.
-			`,
+   Directories that begin with . or _ are ignored, as are testdata directories. Packages in
+   vendor are only included if they are used by the project.`,
 			Action: func(c *cli.Context) {
-				action.List(".", true)
+				action.List(".", true, c.String("output"))
+			},
+			Flags: []cli.Flag{
+				cli.StringFlag{
+					Name:  "output, o",
+					Usage: "Output format. One of: json|json-pretty|text",
+					Value: "text",
+				},
+			},
+		},
+		{
+			Name:  "info",
+			Usage: "Info prints information about this project",
+			Flags: []cli.Flag{
+				cli.StringFlag{
+					Name:  "format, f",
+					Usage: `Format of the information wanted (required).`,
+				},
+			},
+			Description: `A format containing the text with replacement variables
+   has to be passed in. Those variables are:
+
+       %n - name
+       %d - description
+       %h - homepage
+       %l - license
+
+   For example, given a project with the following glide.yaml:
+
+       package: foo
+       homepage: https://example.com
+       license: MIT
+       description: Some example description
+
+   Then running the following commands:
+
+       glide info -f %n
+          prints 'foo'
+
+       glide info -f "License: %l"
+          prints 'License: MIT'
+
+       glide info -f "%n - %d - %h - %l"
+          prints 'foo - Some example description - https://example.com - MIT'`,
+			Action: func(c *cli.Context) {
+				if c.IsSet("format") {
+					action.Info(c.String("format"))
+				} else {
+					cli.ShowCommandHelp(c, c.Command.Name)
+				}
 			},
 		},
 		{
