# Go fonts
16 Nov 2016
Summary: The experimental user interface toolkit being built at [`golang.org/x/exp/shiny`](https://godoc.org/golang.org/x/exp/shiny) includes several text elements, but there is a problem with testing them: What font should be used? Answering this question led us to today's announcement, the release of a family of high-quality [WGL4](https://en.wikipedia.org/wiki/Windows_Glyph_List_4) TrueType fonts, created by the [Bigelow & Holmes](http://bigelowandholmes.typepad.com/) type foundry specifically for the Go project.

Nigel Tao

Chuck Bigelow

Rob Pike

## An Announcement

The experimental user interface toolkit being built at
[`golang.org/x/exp/shiny`](https://godoc.org/golang.org/x/exp/shiny)
includes several text elements, but there is a problem with testing them:
What font should be used?
Answering this question led us to today's announcement,
the release of a family of high-quality [WGL4](https://en.wikipedia.org/wiki/Windows_Glyph_List_4) TrueType fonts,
created by the [Bigelow & Holmes](http://bigelowandholmes.typepad.com/) type foundry specifically for the Go project.

The font family, called Go (naturally), includes proportional- and fixed-width faces in normal,
bold, and italic renderings.
The fonts have been tested for technical uses, particularly programming.
Go source code looks particularly good when displayed in Go fonts, as its name implies, with things like
punctuation characters easily distinguishable and operators lined up and placed consistently:

.image go-fonts/go-font-code.png _ 519

Perhaps the most remarkable feature of the Go fonts is their license:
They are licensed under the same open source license as the rest of the Go project's software,
an unusually free arrangement for a high-quality font set.

Here are samples of the proportionally-spaced...

.image go-fonts/go-regular.png _ 600

and monospaced fonts:

.image go-fonts/go-mono.png _ 600

## How to use them

If you just want the TTF files, run

	git clone https://go.googlesource.com/image

and copy them from the subsequent `image/font/gofont/ttfs` directory.
If you want to use Go (the fonts) with Go (the software), each font is provided by a separate package.
To use the Go Regular font in a program, import `golang.org/x/image/font/gofont/goregular`, and write:

	font, err := truetype.Parse(goregular.TTF)

The [`github.com/golang/freetype/truetype`](https://godoc.org/github.com/golang/freetype/truetype)
package provides the [`truetype.Parse`](https://godoc.org/github.com/golang/freetype/truetype#Parse) function today.
There is also work underway to add a TrueType package under `golang.org/x`
again licensed under the same open source license as the rest of the Go project's software.

We leave it to you to find some of the other unusual properties the fonts have,
but for an overview of the fonts' design we asked Chuck Bigelow to provide some background.
The remainder of this blog post is his response.

## Notes on the fonts, by Chuck Bigelow

The Go fonts are divided into two sets, Go proportional, which is
sans-serif, and Go Mono, which is slab-serif.

## Go proportional fonts

### Sans-serif

Go proportional fonts are sans-serif, like several popular fonts
for screen displays. There is some evidence that some sans-serif
faces at small sizes and low resolutions on screens are slightly
more legible than their seriffed counterparts, while at large sizes,
there is not a significant difference in legibility between sans and
seriffed faces, at least in the pair tested. [1] (The bracketed numbers
refer to the references listed at the end of this article.)

### Style

Go sans-serif fonts are "humanist" rather than "grotesque" in
style. This is an historical distinction, not an aesthetic judgment.
Widely used sans-serif fonts like Helvetica and Arial are called
grotesque because an early 19th century sans-serif typeface
was named "Grotesque," and the name became generic.

The shapes of modern grotesque fonts like Helvetica are sculpted,
with smooth, assimilated forms.

Humanist sans-serifs are derived from Humanist handwriting
and early fonts of the Italian Renaissance and still show subtle
traces of pen-written calligraphy. There is some evidence that
humanist fonts are more legible than grotesque fonts. [2]

### Italics

Go proportional italics have the same width metrics as the roman
fonts. Go italics are oblique versions of the romans, with one
noticeable exception: the italic lowercase 'a' is redesigned as a
cursive single-story form to harmonize with the bowl shapes of
the b d g p q set, in which the upright forms also adapt well to
slanting, The addition of cursive 'a' makes the italics appear more
lively than a simply slanted roman. Some typographers believe that
slanted roman sans-serif italics are preferable to truly "cursive" sans
Italics, in part because of history and design. [3]

.image go-fonts/abdgpq-proportional.png

### The x-height

The x-height of a typeface is the height of the lowercase 'x' relative
to the body size. The x-height of Go fonts is 53.0% of body size, a
bit larger than the x-heights of Helvetica (52.3%) or Arial (51.9%),
but the difference is usually unnoticeable at normal reading sizes.
Typographers believe that larger x-heights contribute to greater
legibility in small sizes and on screens. A study of "print size"
(particularly x-height) and reading noted that types for reading on
screens and for small sizes tend to have large x-heights. [4]

### DIN Legibility Standard

The recent German DIN 1450 legibility standard recommends
several features for font legibility, including differentiation of
letter shapes to reduce confusion. The Go fonts conform to the
1450 standard by carefully differentiating zero from capital O;
numeral 1 from capital I (eye) and lowercase l (ell); numeral 5 from
capital S; and numeral 8 from capital B. The shapes of bowls of
b d p q follow the natural asymmetries of legible Renaissance
handwriting, aiding differentiation to reduce confusion. [5]

### Weights

The Go proportional fonts come in three weights: Normal, Medium,
and Bold. The Normal weight is strong enough that it maintains
clarity on backlit screens, which often tend to erode letter features
and thickness. The Medium weight has stem thickness 1.25 times
the Normal, for greater sturdiness on bright screens or for users
who prefer a sturdy font. The Bold weight has stem thickness
1.5 times the Normal, bold enough to be distinct from the normal
weight. These Go fonts have CSS numerical weights of 400, 500,
and 600. Although CSS specifies "Bold" as a 700 weight and 600
as Semibold or Demibold, the Go numerical weights match the
actual progression of the ratios of stem thicknesses:
Normal:Medium = 400:500; Normal:Bold = 400:600. The Bold
weight name matches the use of “Bold” as the usual corresponding
bold weight of a normal font. More discussion of the relationship of
stem thicknesses, weight names, and CSS numbering is in [6].

### WGL4 character set

The WGL4 character set, originally developed by Microsoft, is often
used as an informal standard character set. WGL4 includes Western
and Eastern European Latin characters plus Modern Greek and
Cyrillic, with additional symbols, signs, and graphical characters,
totalling more than 650 characters in all. The Go WGL4 fonts can
be used to compose a wide range of languages. [7]

### Metric compatibility with Arial and Helvetica

The Go sans-serif fonts are nearly metrically compatible with
standard Helvetica or Arial characters. Texts set in Go occupy
nearly the same space as texts in Helvetica or Arial (at the same
size), but Go has a different look and texture because of its
humanist style. Some Go letters with DIN legibility features are
wider than corresponding letters in Helvetica or Arial, so some
texts set in Go may take slightly more space.

## Go Mono fonts

### Monospaced

Go Mono fonts are monospaced—each letter has the same width as
the other letters. Monospaced fonts have been used in programming
since the beginning of computing and are still widely used because the
typewriter regularity of their spacing makes text align in columns and
rows, a style also found in Greek inscriptions of the 5th century BC.
(The ancient Greeks didn't have typewriters or computer keyboards,
but they did have great mathematicians and a great sense of symmetry
and pattern that shaped their alphabet.)

### Slab-serif

The Go Mono fonts have slab-shaped serifs, giving them a sturdy
appearance.

### Style

The underlying letter shapes of Go Mono are, like the Go sans-serif fonts,
derived from humanist handwriting, but the monospacing and slab serifs
tend to obscure the historical and stylistic connections.

### Italics

Go Mono Italics are oblique versions of the romans, with the exception
that the italic lowercase 'a' is redesigned as a cursive single-story form
to harmonize with the bowl shapes of the b d g p q. The cursive 'a' makes
the italics appear more lively than a simply slanted roman. As with many
sans-serif fonts, it is believed that slanted roman slab-serifs fonts may
be more legible than truly "cursive" italics.

.image go-fonts/abdgpq-mono.png

### The x-height

Go Mono fonts have the same x-height as Go sans-serif fonts, 53% of
the body size. Go Mono looks almost 18% bigger than Courier, which
has an x-height 45% of body size. Yet Go Mono has the same width
as Courier, so the bigger look is gained with no loss of economy in
characters per line.

### DIN Legibility Standard

Go Mono fonts conform to the DIN 1450 standard by differentiating
zero from capital O; numeral 1 from capital I (eye) and lowercase l (ell);
numeral 5 from capital S; and numeral 8 from capital B. The shapes of
bowls of b d p q follow the natural asymmetries of legible Renaissance
handwriting, aiding differentiation and reducing confusion.

### Weights

Go Mono fonts have two weights: Normal and Bold. The normal weight
stem is the same as in Go Normal and thus maintains clarity on backlit
screens, which tend to erode letter features and stem thickness. The
bold stem thickness is 1.5 times thicker than the normal weight, hence
the Bold Mono has the same stem thickness as Bold Go proportional.
Because the letter width of monospaced bold is identical to the width of
monospaced normal, the bold Mono appears slightly bolder than the
proportional Go Bold, as more black pixels are put into the same area.)

### Metric compatibility with popular monospaced fonts

Go Mono is metrically compatible with Courier and other monospaced
fonts that match the "Pica" typewriter type widths of 10 characters per
linear inch at 12 point. At 10 point, Go Mono fonts set 12 characters
per inch. The TrueType fonts are scalable, of course, so Go Mono can
be set at any size.

### WGL4 character set

The Go Mono fonts offer the WGL4 character set often used as an
informal standard character set. WGL4 includes Western and Eastern
European Latin characters plus Modern Greek and Cyrillic, with
additional symbols, signs, and graphical characters. The 650+ characters
of the Go WGL4 sets can be used for a wide range of languages.

## References

[1] Morris, R. A., Aquilante, K., Yager, D., & Bigelow, C.
(2002, May). P‐13: Serifs Slow RSVP Reading at Very Small Sizes,
but Don't Matter at Larger Sizes.
In SID Symposium Digest of Technical Papers (Vol.
33, No. 1, pp. 244-247). Blackwell Publishing Ltd.

[2] Bryan Reimer et al. (2014) “Assessing the impact of typeface design
in a text-rich automotive user interface”,
Ergonomics, 57:11, 1643-1658.
http://www.tandfonline.com/doi/abs/10.1080/00140139.2014.940000

[3] Adrian Frutiger - Typefaces: The Complete Works.
H. Osterer and P. Stamm, editors. Birkhäuser,
Basel, 2009, page 257.

[4] Legge, G. E., & Bigelow, C. A. (2011).
Does print size matter for reading? A review of findings from vision science and typography.
Journal of Vision, 11(5), 8-8. http://jov.arvojournals.org/article.aspx?articleid=2191906

[5] Charles Bigelow. "Oh, oh, zero!" TUGboat, Volume 34 (2013), No. 2.
https://tug.org/TUGboat/tb34-2/tb107bigelow-zero.pdf
https://tug.org/TUGboat/tb34-2/tb107bigelow-wang.pdf

[6] "Lucida Basic Font Weights" Bigelow & Holmes.
http://lucidafonts.com/pages/facts

[7] WGL4 language coverage: Afrikaans, Albanian, Asu, Basque,
Belarusian, Bemba, Bena, Bosnian, Bulgarian, Catalan, Chiga,
Colognian, Cornish, Croatian, Czech, Danish, Embu, English, Esperanto,
Estonian, Faroese, Filipino, Finnish, French, Friulian, Galician,
Ganda, German, Greek, Gusii, Hungarian, Icelandic, Inari Sami,
Indonesian, Irish, Italian, Jola-Fonyi, Kabuverdianu, Kalaallisut,
Kalenjin, Kamba, Kikuyu, Kinyarwanda, Latvian, Lithuanian, Lower
Sorbian, Luo, Luxembourgish, Luyia, Macedonian, Machame, Makhuwa-Meetto,
Makonde, Malagasy, Malay, Maltese, Manx, Meru, Morisyen, North
Ndebele, Northern Sami, Norwegian Bokmål, Norwegian Nynorsk, Nyankole,
Oromo, Polish, Portuguese, Romanian, Romansh, Rombo, Rundi, Russian,
Rwa, Samburu, Sango, Sangu, Scottish Gaelic, Sena, Serbian, Shambala,
Shona, Slovak, Slovenian, Soga, Somali, Spanish, Swahili, Swedish,
Swiss German, Taita, Teso, Turkish, Turkmen, Upper Sorbian, Vunjo,
Walser, Welsh, Zulu

## Jabberwocky in Go Regular

From [en.wikipedia.org/wiki/Jabberwocky](https://en.wikipedia.org/wiki/Jabberwocky):

.image go-fonts/go-font-jabberwocky.png _ 500

There is no Greek version listed. Instead, a pangram from [clagnut.com/blog/2380/#Greek](http://clagnut.com/blog/2380/#Greek):

.image go-fonts/go-font-greek.png _ 530
