# Go's New Brand
26 Apr 2018
Tags: brand
Summary: Go’s new look and logo (don't worry, the mascot isn’t changing!).

Steve Francia

## Introduction

I am delighted to announce the launch of Go’s new look and logo.

Go has been on an amazing journey over the last 8+ years. Our project, community
and users have evolved through this journey and we wanted the Go brand to
reflect where we have been and convey where we are going.

Go’s new brand is about our identity, our values, and our users. Over the past
several months we have worked with a brand agency to develop a brand guide for
Go. Our agency, [Within](http://within.us/), coordinated with and built upon
the great foundation that Renee French established. Rest easy, our beloved
Gopher Mascot remains at the center of our brand.

## New Logo

Our logo follows the brand’s core philosophy of simplicity over complexity.
Using a modern, italicized sans-serif typeface combined with three simple motion
lines forms a mark that resembles two wheels in rapid motion, communicating
speed and efficiency. The circular shape of the letters hints at the eyes of the
Go gopher, creating a familiar shape and allowing the mark and the mascot to
pair well together.

.image go-brand/logos.jpg

Our new logo went through an extensive design process. Here are some of the
revisions we went through…

<div><center>
.iframe //www.youtube.com/embed/V4t-ymImW6c 315 560
</center></div>

## New Brand Guide

The brand guide establishes the mission, values and voice for the Go project. In
general terms, a brand guide is a reference tool for establishing a consistent
brand identity. It is sometimes referred to as “brand guidelines” or a “brand
book”. It is a single document that serves as a guide and reference to
designers, writers, and developers to create consistent, on-brand content.

.image go-brand/Go-BB_cover.jpg
.image go-brand/Go-BB_spread1.jpg
.image go-brand/Go-BB_spread2.jpg

## New presentation themes

In addition to our brand guide we have also developed a presentation theme. This
presentation theme will enable us to have a consistent representation of Go in
person at meetups and conferences as well as online. Go community members are
welcome to use this theme for their own presentations.

.image go-brand/go-slides-4up.jpg

The presentations are available as Google Slides presentations. We chose Google
slides as it is easy to share and maintain updates. People are welcome to port
them to keynote, powerpoint, etc.

Like this blog and all our gopher images,
the slide themes are Creative Commons Attribution 3.0 licensed.
The photos in the slides are all from
[unsplash](https://unsplash.com/) and are released under the unsplash license.

Instructions to use slides:

  - Open the [Go Slide Masters](https://golang.org/s/presentation-theme) presentation on Google slides.
  - File > “Make a Copy” (you may need to login first)
  - Create new slides using the layouts provided in the layouts menu.
  - Use the included example slides to help guide the styling and creation of your presentation.

### Download

The brand guide, logo and themes are copyrighted by the Go authors.

The brand guide contains the guidelines for acceptable logo use.

  - [Brand Book (pdf)](https://golang.org/s/brandbook)
  - [Go Logos (zip)](https://golang.org/s/logos)
  - [Go Slide Masters (Google Slides)](https://golang.org/s/presentation-theme)

## What’s happening next

The website will be getting a refresh based on the new design. Since we are
making significant changes, we are also taking this opportunity to update our
website infrastructure to better serve our global community with internationalization
and multilingual support. The migration will happen in stages over the
next few months starting with this blog.
