Google Fonts

Overall font files requirements

🦥 The following guidelines apply to all fonts, regardless of their format (static or variable fonts) or if you want to add a new font or update one already included in the catalog.

For specific information on any of those cases, please read the pages with the requirements on them. before continuing.
Background reading:
start Libre Font Culture
must→ Adding & upgrading fonts to Google Fonts
must→ Production requirements

Table of contents

Font name

Naming a font is pretty difficult, and not only because of the need of originalty and creativity. Google Fonts expects font names to comply with basic SEO and tooling limitations.

For example, the hyphen is used to separate the family name from the style name in the file path; adding a hyphen to your family name may cause the QA tool to think that your style name is unconventional, and therefore fail the font. It will also break the file naming convention put in place across the entire collection (no foundy likes that). And finally, a user searching for the font in Google Fonts may not find it if they forget about the hyphen.

Any exception to these rules shall be discussed and validated prior to onboarding, and listed in Fontbakery’s exceptions lists to avoid FAILS.

Font versioning

Every new version onboarded to GF should have an increased version number compared to the precedent. This is explained in the Main contribution cases chapter under the Font Upgrades section.

Versioning is based on semver, apart from we use MAJOR.SIGNIFICANTMINORPATCH, instead of MAJOR.MINOR.PATCH.

Examples:

If a breaking change is made e.g. converting a static font family to a variable font family, the MAJOR must be incremented by 1, and the others reset, e.g.:

Current 1.230, new 2.000

If a new character set is inserted, SIGNIFICANT should be incremented, e.g.:

Current 1.230, new 1.330

If a few new glyphs are added, MINOR should be incremented, e.g.:

Current 1.230, new 1.240

If a name table record is updated such as the copyright string, PATCH should be incremented, e.g.:

Current 1.230, new 1.231

Font Embedding (fsType)

fsType is one of the parameters of the OS/2 table in which the embeding permissions of a font are declared. For Libre Fonts it should be set to bit 0 (Installable embedding).

This is how it should look like in the OS/2 table: <fsType value="00000000 00000000"/>

If you are using the Glyphs font editor, create a new custom parameter called “fsType” in the “Font” tab of the Font Info pane. Change the Embedding drop-down to “Installable” and leave the “Subsetting Forbidden” checkbox unchecked.

Font Vertical Metrics

Please read the following pages about vertical metrics for setting vertical metrics.

These font info parameters are not optional and should follow the same scheme within the entire GF library.

Trademarks

Typically libre fonts are not subject to any trademarks.

If you do not trademark your project name:

If you do trademark your project name:

Monospace fonts

We require the post table isFixedPitch to be set and the OS/2 panose table to have OS/2.panose.bProportion (bit 4) set correctly. If either of these is set incorrectly, users may get fallback glyphs that are not monospaced if they type a character that doesn’t exist in the font.

Developers can set these automatically by using the following gftools command: gftools fix-isfixedpitch

Glyph Sets

GF Glyphsets provides the glyph set definition standards that Google Fonts fonts must adhere to.

The structure of these sets is based on a modular scheme that allows the use of different blocks of information to be combined to build sets of glyphs with different levels of complexity according to the needs of each project.

This system aims to give enough flexibility to define the intended scope of each project as well as a way to better assess the font development status and quality analysis.

Currently, the most used ones are:

Find all the glyphsets definition and filter lists in the Glyphsets repository. Be aware that these glyphsets are still a work in progress and any advise or recommendation can be submitted using the Glyphsets’ issue tracker.

OpenType Features support

Required Features

The Google Fonts API currently has limited support for some “required” or “always on” OpenType features, such as number sets like Tabular Numbers (tnum).

The default numerals (ASCII 0 to 9) should be proportional, and complemented by a Tabular Numbers (tnum) feature.

Optional/Discretionary Features

The Google Fonts API currently does not support requesting the inclusion of optional (also known as discretionary, or opt-in) OpenType Features, such as Stylistic Sets (salt) or Small Caps (smcp, c2sc). Instead the glyphs contained in these features may be published as a separate family, as follows:

The vertical metrics should be the same in each sibling family, and the “Use of Typo Metrics” flag should be set. Please refer to the Vertical Metrics section for further details.

Further reading:
must→ Static fonts specifics
must→ Variable fonts specifics
must→ Vertical metrics
must→ Color fonts