These packages are part of the Go Project but outside the main Go tree.

They are developed under looser [compatibility requirements](http://golang.org/doc/go1compat.html) than the Go core.  In general, they will support the previous two releases and tip.

Install them with "go get".

  * [[docs](https://godoc.org/golang.org/x/tools)] [[source](https://go.googlesource.com/tools)] ` golang.org/x/tools ` — godoc, vet, cover, and other tools.
  * [[docs](https://godoc.org/golang.org/x/mobile)] [[source](https://go.googlesource.com/mobile)] ` golang.org/x/mobile ` — libraries and build tools for Go on Android.

  * [[docs](https://godoc.org/golang.org/x/crypto)] [[source](https://go.googlesource.com/crypto)] ` golang.org/x/crypto ` — additional cryptography packages.
  * [[docs](https://godoc.org/golang.org/x/image)] [[source](https://go.googlesource.com/image)] ` golang.org/x/image ` — additional imaging packages.
  * [[docs](https://godoc.org/golang.org/x/net)] [[source](https://go.googlesource.com/net)] ` golang.org/x/net ` — additional networking packages.
  * [[docs](https://godoc.org/golang.org/x/sys)] [[source](https://go.googlesource.com/sys)] ` golang.org/x/sys ` — for low-level interactions with the operating system.
  * [[docs](https://godoc.org/golang.org/x/text)] [[source](https://go.googlesource.com/text)] ` golang.org/x/text ` — packages for working with text.

  * [[docs](https://godoc.org/golang.org/x/blog)] [[source](https://go.googlesource.com/blog)] ` golang.org/x/blog ` — the content and server program for [blog.golang.org](http://blog.golang.org).


  * [[docs](https://godoc.org/golang.org/x/review)] [[source](https://go.googlesource.com/review)] ` golang.org/x/review ` — tools for code review.
  * [[docs](https://godoc.org/golang.org/x/benchmarks)] [[source](https://go.googlesource.com/benchmarks)] ` golang.org/x/benchmarks `

  * [[docs](https://godoc.org/golang.org/x/exp)] [[source](https://go.googlesource.com/exp)] ` golang.org/x/exp ` — experimental code (handle with care).

[List of all packages in sub-repositories](https://godoc.org/-/subrepo)