Added `glide list`.
diff --git a/cmd/tree.go b/cmd/tree.go
index 5061bb9..885f34a 100644
--- a/cmd/tree.go
+++ b/cmd/tree.go
@@ -6,6 +6,7 @@
 	"go/build"
 	"os"
 	"path/filepath"
+	"sort"
 	"strings"
 
 	"github.com/Masterminds/cookoo"
@@ -29,32 +30,68 @@
 	}
 
 	fmt.Println(myName)
-
-	// Start with *.go
-	// Do a breadth-first search of subdirectories, excluding _*, .*, testdata,
-	// and vendor.
-	/*
-		deps := walkDeps(basedir, myName)
-		for _, name := range deps {
-			found := findPkg(name, basedir)
-			msg := found.Path
-			if found.PType == ptypeUnknown {
-				msg = "glide get " + found.Name
-			}
-			if !showcore && found.PType == ptypeGoroot {
-				continue
-			}
-			fmt.Printf("\t%s\t(%s)\n", found.Name, msg)
-		}
-	*/
 	displayTree(basedir, myName, 1, showcore)
-
-	// Now look up all of the external dependencies.
-
-	// Make it pretty.
 	return nil, nil
 }
 
+// ListDeps lists all of the dependencies of the current project.
+//
+// Params:
+//
+// Returns:
+//
+func ListDeps(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
+	basedir := p.Get("dir", ".").(string)
+	myName := guessPackageName(basedir)
+
+	var err error
+	basedir, err = filepath.Abs(basedir)
+	if err != nil {
+		return nil, err
+	}
+
+	direct := map[string]bool{}
+	d := walkDeps(basedir, myName)
+	for _, i := range d {
+		listDeps(direct, i, basedir)
+	}
+
+	sortable := make([]string, len(direct))
+	i := 0
+	for k, _ := range direct {
+		sortable[i] = k
+		i++
+	}
+
+	sort.Strings(sortable)
+
+	for _, k := range sortable {
+		dec := "no"
+		if direct[k] {
+			dec = "yes"
+		}
+		fmt.Printf("%s (Present: %s)\n", k, dec)
+	}
+
+	return nil, nil
+}
+
+func listDeps(info map[string]bool, name, path string) {
+	found := findPkg(name, path)
+	switch found.PType {
+	case ptypeUnknown:
+		info[name] = false
+		break
+	case ptypeGoroot:
+		break
+	default:
+		info[name] = true
+		for _, i := range walkDeps(found.Path, found.Name) {
+			listDeps(info, i, found.Path)
+		}
+	}
+}
+
 func displayTree(basedir, myName string, level int, core bool) {
 	deps := walkDeps(basedir, myName)
 	for _, name := range deps {
diff --git a/glide.go b/glide.go
index 1daf147..ce59609 100644
--- a/glide.go
+++ b/glide.go
@@ -321,6 +321,13 @@
 			},
 		},
 		{
+			Name:  "list",
+			Usage: "List prints all dependencies that Glide could discover.",
+			Action: func(c *cli.Context) {
+				setupHandler(c, "list", cxt, router)
+			},
+		},
+		{
 			Name:  "guess",
 			Usage: "Guess dependencies for existing source.",
 			Description: `This looks through existing source and dependencies,
@@ -488,6 +495,11 @@
 		Includes("@ready").
 		Does(cmd.Tree, "tree").
 		Using("conf").From("cxt:cfg")
+	reg.Route("list", "Print a dependency graph.").
+		Includes("@startup").
+		Includes("@ready").
+		Does(cmd.ListDeps, "list").
+		Using("conf").From("cxt:cfg")
 
 	reg.Route("nv", "No Vendor").
 		Includes("@startup").