# The Go Gopher
24 Mar 2014
Tags: gopher
Summary: The backstory of the Go gopher.

Rob Pike

Andrew Gerrand

##

.image gopher/header.jpg

The Go gopher is an iconic mascot and one of the most distinctive features of the Go project.
In this post we'll talk about its origins,
evolution, and behavior.

About 15 years ago—long before the Go project—the gopher first appeared as
a promotion for the [WFMU radio station](https://wfmu.org/) in New Jersey.
[Renee French](http://reneefrench.blogspot.com) was commissioned to
design a T-shirt for an annual fundraiser and out came the gopher.

.image gopher/wfmu.jpg

The gopher next made an appearance at Bell Labs,
as Bob Flandrena's [avatar](https://research.swtch.com/face) in the Bell Labs mail system.
Other Renee drawings became avatars for ken, r, rsc, and others.
(Of course, Peter Weinberger's was his own [iconic face](http://spinroot.com/pico/pjw.html).)

.image gopher/avatars.png

Another Bell Labs activity led to Renee creating [Glenda](https://9p.io/plan9/glenda.html),
the Plan 9 mascot, a distant cousin of the WFMU gopher.

.image gopher/glenda.png

When we started the Go project we needed a logo,
and Renee volunteered to draw it.
It was featured on the first Go T-shirt and the Google Code site.

.image gopher/logo.png

For the open source launch in 2009, Renee suggested adapting the WFMU gopher as a mascot. And the Go gopher was born:

.image gopher/gopher.png

(The gopher has no name, and is called just the "Go gopher".)

For the [launch](https://www.youtube.com/watch?v=-i0hat7pdpk#t=24m40s)
of the [Go App Engine runtime](https://developers.google.com/appengine/docs/go) at
Google I/O 2011 we engaged [Squishable](http://squishable.com) to manufacture the plush gophers.
This was the first time the gopher was colored blue and appeared in three dimensions.
The first prototype was kinda hairy:

.image gopher/prototype.jpg

But the second one was just right:

.image gopher/plush.jpg

Around the same time, Renee roughed out a gopher in clay.
This inspired a refined sculpture that became a vinyl figurine made by [Kidrobot](http://www.kidrobot.com/).
The vinyls were first distributed at OSCON 2011.

.image gopher/vinyl.jpg

The gopher therefore exists in many forms,
but has always been Renee's creation.
It stands for the Go project and Go programmers everywhere,
and is one of the most popular things in the Go world.

The Go gopher is a character; a unique creation. Not any old gopher, just as Snoopy is not any old cartoon dog.

The [gopher images](https://golang.org/doc/gopher/) are Creative Commons
Attribution 3.0 licensed.
That means you can play with the images but you must give credit to their
creator (Renee French) wherever they are used.

Here are a few gopher adaptations that people have used as mascots for user group mascots and similar organizations.

.image gopher/usergroups.png

They're cute and we like them, but by the Creative Commons rules the groups
should give Renee credit,
perhaps as a mention on the user group web site.

The vinyl and plush gophers are copyrighted designs;
accept no substitutes!
But how can you get one? Their natural habitat is near high concentrations of Go programmers,
and their worldwide population is growing.
They may be purchased from the [Google Store](https://www.googlemerchandisestore.com/Google+Redesign/Fun/Go+Gopher+Blue+Squishable.axd?cid=1399),
although the supply can be irregular.
(These elusive creatures have been spotted in all [kinds](http://www.flickr.com/photos/pinkhamsters/sets/72157627910426064/) [of](https://plus.google.com/107966629974328136037/posts/TcFA9zHzQB8) [places](https://twitter.com/goroutine).)

Perhaps the best way to get a gopher is to catch one in the wild at a Go conference.
There are two big chances this year: [GopherCon](http://gophercon.com/) (Denver,
April 24-26) and [dotGo](http://dotgo.eu) (Paris, October 10).

.image gopher/portrait.jpg

_(Photo by_ [_Noah Lorang_](https://twitter.com/noahhlo/status/437395572081688576)_.)_
