# Go 1.3 is released
18 Jun 2014
Summary: 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.

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.
