# The Gopher Gala is the first worldwide Go hackathon
7 Jan 2015
Summary: The Gopher Gala, the first global Go hackathon, will take place January 23-25, 2015.

Francesc Campoy
campoy@golang.org

##

The [Gopher Gala](http://gophergala.com/) is the first Go hackathon at a
global scale and will take place from January 23rd through the 25th. The event
is organized by the community, supported by the Go team, and sponsored by
Google among others.

.image gophergala/fancygopher.jpg _ 300
_Fancy_Gopher,_by_ [[http://www.reneefrench.com/][_Renée_French_]]

You can read about the rules of the hackathon
[here](http://gophergala.com/rules/), but if you know about
[Rails Rumble](http://railsrumble.com/) or
[Node Knockout](http://nodeknockout.com/) you already have a pretty good idea
of what to expect.

During this event gophers from all around the globe will form teams to build
great applications using Go as the main tool. Afterwards, all the participants
will vote for their favorite applications and the 20 highest voted applications
will be ranked by a jury of renowned names from the community, including some
members of the Go core team. More information on the judging phase can be found
[here](http://gophergala.com/judging/).

And in case you needed one more reason to
[get involved](https://gophers.typeform.com/to/wondM5) there will be prizes!

"What prizes?" you ask. Well, that’s a
[secret](http://gophergala.com/prizes/) until January 10th but we’re pretty
sure you won’t be disappointed.
