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→ Static fonts specifics
must→ Variable fonts specifics

Table of contents

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.


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.


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


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.

Open Type features support

The Google Fonts API currently does not support the inclusion of OpenType features such as Stylistic Sets (salt) or Small Caps (smcp, c2sc). Fonts that absolutely need them will need to be published as a separate family with the following schema:

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

Further reading:
must→ Vertical metrics
must→ Production requirements