# 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…

.html go-brand/video.html

## 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.
