FontBakeryCondition fontbakery.profiles.universal.STAT_table[source][source]
force = False[source]

Check correctness of STAT table strings


On the STAT table, the “Italic” keyword must not be used on AxisValues for variation axes other than ‘ital’.


Checking all files are in the same directory.


If the set of font files passed in the command line is not all in the same directory, then we warn the user since the tool will interpret the set of files as belonging to a single family (and it is unlikely that the user would store the files from a single family spreaded in several separate directories).


Each font in a family must have the same set of vertical metrics values.


We want all fonts within a family to have the same vertical metrics so their line spacing is consistent across the family.


Checking OS/2 usWinAscent & usWinDescent.


A font’s winAscent and winDescent values should be greater than the head table’s yMax, abs(yMin) values. If they are less than these values, clipping can occur on Windows platforms (https://github.com/RedHatBrand/Overpass/issues/33).

If the font includes tall/deep writing systems such as Arabic or Devanagari, the winAscent and winDescent can be greater than the yMax and abs(yMin) to accommodate vowel marks.

When the win Metrics are significantly greater than the upm, the linespacing can appear too loose. To counteract this, enabling the OS/2 fsSelection bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 typo values instead. This means the font developer can control the linespacing with the typo values, whilst avoiding clipping by setting the win values to values greater than the yMax and abs(yMin).


Do we have the latest version of FontBakery installed?


Checking with ftxvalidator.


Is the command ftxvalidator (Apple Font Tool Suite) available?


There’s no reasonable (and legal) way to run the command ftxvalidator of the Apple Font Tool Suite on a non-macOS machine. I.e. on GNU+Linux or Windows etc.

If Font Bakery is not running on an OSX machine, the machine running Font Bakery could access ftxvalidator on OSX, e.g. via ssh or a remote procedure call (rpc).

There’s an ssh example implementation at: https://github.com/googlefonts/fontbakery/blob/main/prebuilt/workarounds/ftxvalidator/ssh-implementation/ftxvalidator


Font contains ‘.notdef’ as its first glyph?


The OpenType specification v1.8.2 recommends that the first glyph is the ‘.notdef’ glyph without a codepoint assigned and with a drawing.


Pre-v1.8, it was recommended that fonts should also contain ‘space’, ‘CR’ and ‘.null’ glyphs. This might have been relevant for MacOS 9 applications.


Name table records must not have trailing spaces.


Checking OS/2 Metrics match hhea Metrics.

OS/2 and hhea vertical metric values should match. This will produce the same linespacing on Mac, GNU+Linux and Windows.

Mac OS X uses the hhea values. Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.


When OS/2 and hhea vertical metrics match, the same linespacing results on macOS, GNU+Linux and Windows. Unfortunately as of 2018, Google Fonts has released many fonts with vertical metrics that don’t match in this way. When we fix this issue in these existing families, we will create a visible change in line/paragraph layout for either Windows or macOS users, which will upset some of them.

But we have a duty to fix broken stuff, and inconsistent paragraph layout is unacceptably broken when it is possible to avoid it.

If users complain and prefer the old broken version, they have the freedom to take care of their own situation.


Checking with ots-sanitize.


Font contains all required tables?


Depending on the typeface and coverage of a font, certain tables are recommended for optimum quality. For example, the performance of a non-linear font is improved if the VDMX, LTSH, and hdmx tables are present. Non-monospaced Latin fonts should have a kern table. A gasp table is necessary if a designer wants to influence the sizes at which grayscaling is used under Windows. A DSIG table containing a digital signature helps ensure the integrity of the font file. Etc.


Ensure indic fonts have the Indian Rupee Sign glyph.


Per Bureau of Indian Standards every font supporting one of the official Indian languages needs to include Unicode Character “₹” (U+20B9) Indian Rupee Sign.


List all superfamily filepaths


This is a merely informative check that lists all sibling families detected by fontbakery.

Only the fontfiles in these directories will be considered in superfamily-level checks.


Each font in set of sibling families must have the same set of vertical metrics values.


We may want all fonts within a super-family (all sibling families) to have the same vertical metrics so their line spacing is consistent across the super-family.

This is an experimental extended version of com.google.fonts/check/superfamily/vertical_metrics and for now it will only result in WARNs.


Checking with fontTools.ttx


Font contains unique glyph names?


Duplicate glyph names prevent font installation on Mac OS X.


Are there unwanted tables?


Some font editors store source data in their own SFNT tables, and these can sometimes sneak into final release files, which should only have OpenType spec tables.


Glyph names are all valid?


Microsoft’s recommendations for OpenType Fonts states the following:

‘NOTE: The PostScript glyph name must be no longer than 31 characters, include only uppercase or lowercase English letters, European digits, the period or the underscore, i.e. from the set [A-Za-z0-9_.] and should start with a letter, except the special glyph name “.notdef” which starts with a period.’


In practice, though, particularly in modern environments, glyph names can be as long as 63 characters. According to the “Adobe Glyph List Specification” available at:



Font has proper whitespace glyph names?


This check enforces adherence to recommended whitespace (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.


Font contains glyphs for whitespace characters?


Whitespace glyphs have ink?

FontBakeryCondition fontbakery.profiles.universal.ftxvalidator_cmd[source][source]

Test if ftxvalidator is a command; i.e. an executable with a path.

force = False[source]
fontbakery.profiles.universal.is_up_to_date(installed, latest)[source][source]