# Go 1.3 is released
18 Jun 2014
Summary: Go 1.3 adds better performance, static analysis in godoc, and more.

Andrew Gerrand

##

Today we are happy to announce the release of [Go 1.3](https://golang.org/doc/go1.3).
This release comes six months after our last major release and provides better
performance, improved tools, support for running Go in new environments, and more.
All Go users should upgrade to Go 1.3.
You can grab the release from our [downloads page](https://golang.org/dl/) and
find the full list of improvements and fixes in the
[release notes](https://golang.org/doc/go1.3).
What follows are some highlights.

[Godoc](https://godoc.org/code.google.com/p/go.tools/cmd/godoc),
the Go documentation server, now performs static analysis.
When enabled with the -analysis flag, analysis results are presented
in both the source and package documentation views, making it easier
than ever to navigate and understand Go programs.
See [the documentation](https://golang.org/lib/godoc/analysis/help.html) for the details.

The gc toolchain now supports the Native Client (NaCl) execution sandbox on the
32- and 64-bit Intel architectures.
This permits the safe execution of untrusted code, useful in environments such as the
[Playground](https://blog.golang.org/playground).
To set up NaCl on your system see the [NativeClient wiki page](https://golang.org/wiki/NativeClient).

Also included in this release is experimental support for the DragonFly BSD,
Plan 9, and Solaris operating systems. To use Go on these systems you must
[install from source](https://golang.org/doc/install/source).

Changes to the runtime have improved the
[performance](https://golang.org/doc/go1.3#performance) of Go binaries,
with an improved garbage collector, a new
["contiguous" goroutine stack management strategy](https://golang.org/s/contigstacks),
a faster race detector, and improvements to the regular expression engine.

As part of the general [overhaul](https://golang.org/s/go13linker) of the Go
linker, the compilers and linkers have been refactored. The instruction
selection phase that was part of the linker has been moved to the compiler.
This can speed up incremental builds for large projects.

The [garbage collector](https://golang.org/doc/go1.3#garbage_collector) is now
precise when examining stacks (collection of the heap has been precise since Go
1.1), meaning that a non-pointer value such as an integer will never be
mistaken for a pointer and prevent unused memory from being reclaimed. This
change affects code that uses package unsafe; if you have unsafe code you
should read the [release notes](https://golang.org/doc/go1.3#garbage_collector)
carefully to see if your code needs updating.

We would like to thank the many people who contributed to this release;
it would not have been possible without your help.

So, what are you waiting for?
Head on over to the [downloads page](https://golang.org/dl/) and start hacking.
