googlefonts

All vendor-specific profiles such as the googlefonts one also include the checks from the universal profile.

fontbakery.profiles.googlefonts.can_shape(ttFont, text, parameters=None)[source][source]

Returns true if the font can render a text string without any .notdef characters.

com.google.fonts/check/STAT/axis_order[source][source]

Check axis ordering on the STAT table.

Rationale:

This is (for now) a merely informative check to detect what’s the axis ordering declared on the STAT table of fonts in the Google Fonts collection.

We may later update this to enforce some unified axis ordering scheme, yet to be determined.

com.google.fonts/check/STAT/gf_axisregistry[source][source]

Validate STAT particle names and values match the fallback names in GFAxisRegistry.

Rationale:

Check that particle names and values on STAT table match the fallback names in each axis entry at the Google Fonts Axis Registry, available at https://github.com/google/fonts/tree/main/axisregistry

com.google.fonts/check/aat[source][source]

Are there unwanted Apple tables?

Rationale:

Apple’s TrueType reference manual [1] describes SFNT tables not in the Microsoft OpenType specification [2] and these can sometimes sneak into final release files, but Google Fonts should only have OpenType tables.

[1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html [2] https://docs.microsoft.com/en-us/typography/opentype/spec/

com.google.fonts/check/canonical_filename[source][source]

Checking file is named canonically.

Rationale:

A font’s filename must be composed as “<familyname>-<stylename>.ttf”:

  • Nunito-Regular.ttf

  • Oswald-BoldItalic.ttf

Variable fonts must list the axis tags in alphabetical order in square brackets and separated by commas:

  • Roboto[wdth,wght].ttf

  • Familyname-Italic[wght].ttf

Legacy check originally simply called ‘check/001’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/cjk_not_enough_glyphs[source][source]

Does the font contain less than 150 CJK characters?

Rationale:

Kana has 150 characters and it’s the smallest CJK writing system.

If a font contains less CJK glyphs than this writing system, we inform the user that some glyphs may be encoded incorrectly.

com.google.fonts/check/cjk_vertical_metrics[source][source]

Check font follows the Google Fonts CJK vertical metric schema

Rationale:

CJK fonts have different vertical metrics when compared to Latin fonts. We follow the schema developed by dr Ken Lunde for Source Han Sans and the Noto CJK fonts.

Our documentation includes further information: https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics

com.google.fonts/check/cjk_vertical_metrics_regressions[source][source]

Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.

Rationale:

Check CJK family has the same vertical metrics as the same family hosted on Google Fonts.

com.google.fonts/check/color_cpal_brightness[source][source]

Color layers should have a minimum brightness

Rationale:

Layers of a COLRv0 font should not be too dark or too bright. When layer colors are set explicitly, they can’t be changed and they may turn out illegible against dark or bright backgrounds.

While traditional color-less fonts can be colored in design apps or CSS, a black color definition in a COLRv0 font actually means that that layer will be rendered in black regardless of the background color. This leads to text becoming invisible against a dark background, for instance when using a dark theme in a web browser or operating system.

This check ensures that layer colors are at least 10% bright and at most 90% bright, when not already set to the current color (0xFFFF).

com.google.fonts/check/colorfont_tables[source][source]

Check font has the expected color font tables.

Rationale:

COLR v0 fonts are widely supported in most browsers so they do not require an SVG color table. However, some environments (e.g. Safari, Adobe apps) do not currently support COLR v1 so we need to add an SVG table to these fonts, except in the case of variable fonts, since SVG does not support OpenType Variations.

To automatically generate compatible SVG/COLR tables, run the maximum_color tool in nanoemoji: https://github.com/googlefonts/nanoemoji

Does DESCRIPTION file contain broken links?

Rationale:

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font family webpage on the Google Fonts website. For that reason, all hyperlinks in it must be properly working.

Legacy check originally simply called ‘check/003’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description. - Some additional changes were proposed at https://github.com/fonttools/fontbakery/issues/4110

com.google.fonts/check/description/eof_linebreak[source][source]

DESCRIPTION.en_us.html should end in a linebreak.

Rationale:

Some older text-handling tools sometimes misbehave if the last line of data in a text file is not terminated with a newline character (also known as ‘n’).

We know that this is a very small detail, but for the sake of keeping all DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts collection, we chose to adopt the practice of placing this final linebreak character on them.

com.google.fonts/check/description/family_update[source][source]

On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.

Rationale:

We want to ensure that any significant changes to the font family are properly mentioned in the DESCRIPTION file.

In general, it means that the contents of the DESCRIPTION.en_us.html file will typically change if when font files are updated. Please treat this check as a reminder to do so whenever appropriate!

com.google.fonts/check/description/git_url[source][source]

Does DESCRIPTION file contain a upstream Git repo URL?

Rationale:

The contents of the DESCRIPTION.en-us.html file are displayed on the Google Fonts website in the about section of each font family specimen page.

Since all of the Google Fonts collection is composed of libre-licensed fonts, this check enforces a policy that there must be a hypertext link in that page directing users to the repository where the font project files are made available.

Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or any other git-based version control service.

com.google.fonts/check/description/min_length[source][source]

DESCRIPTION.en_us.html must have more than 200 bytes.

Legacy check originally simply called ‘check/005’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/description/noto_has_article[source][source]

Noto fonts must have an ARTICLE.en_us.html file

Rationale:

Noto fonts are displayed in a different way on the fonts.google.com

web site, and so must also contain an article about them.

com.google.fonts/check/description/urls[source][source]

URLs on DESCRIPTION file must not display http(s) prefix.

Rationale:

The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font family webpage on the Google Fonts website.

Google Fonts has a content formatting policy for that snippet that expects the text content of anchors not to include the http:// or https:// prefixes.

com.google.fonts/check/description/valid_html[source][source]

Is this a proper HTML snippet?

Rationale:

Sometimes people write malformed HTML markup. This check should ensure the file is good.

Additionally, when packaging families for being pushed to the google/fonts git repo, if there is no DESCRIPTION.en_us.html file, some older versions of the add_font.py tool insert a placeholder description file which contains invalid html. This file needs to either be replaced with an existing description file or edited by hand.

Legacy check originally simply called ‘check/004’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description. - Some additional changes were proposed at https://github.com/fonttools/fontbakery/issues/2664

com.google.fonts/check/empty_glyph_on_gid1_for_colrv0[source][source]

Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.

Rationale:

A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of some glyphs, colored or not. This only occurs for COLR version 0 fonts.

Having a glyph with no contours on GID 1 is a practical workaround for that.

See https://github.com/googlefonts/gftools/issues/609

com.google.fonts/check/epar[source][source]

EPAR table present in font?

Rationale:

The EPAR table is/was a way of expressing common licensing permissions and restrictions in metadata; while almost nothing supported it, Dave Crossland wonders that adding it to everything in Google Fonts could help make it more popular.

More info is available at: https://davelab6.github.io/epar/

com.google.fonts/check/family/control_chars[source][source]

Does font file include unacceptable control character glyphs?

Rationale:

Use of some unacceptable control characters in the U+0000 - U+001F range can lead to rendering issues on some platforms.

Acceptable control characters are defined as .null (U+0000) and CR (U+000D) for this test.

com.google.fonts/check/family/equal_codepoint_coverage[source][source]

Fonts have equal codepoint coverage

com.google.fonts/check/family/has_license[source][source]

Check font has a license.

Legacy check originally simply called ‘check/028’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/family/italics_have_roman_counterparts[source][source]

Ensure Italic styles have Roman counterparts.

Rationale:

For each font family on Google Fonts, every Italic style must have a Roman sibling.

This kind of problem was first observed at [1] where the Bold style was missing but BoldItalic was included.

[1] https://github.com/google/fonts/pull/1482

com.google.fonts/check/family/tnum_horizontal_metrics[source][source]

All tabular figures must have the same width across the RIBBI-family.

Rationale:

Tabular figures need to have the same metrics in all styles in order to allow tables to be set with proper typographic control, but to maintain the placement of decimals and numeric columns between rows.

Here’s a good explanation of this: https://www.typography.com/techniques/fonts-for-financials/#tabular-figs

com.google.fonts/check/file_size[source][source]

Ensure files are not too large.

Rationale:

Serving extremely large font files on Google Fonts causes usability issues. This check ensures that file sizes are reasonable.

Copyright notices match canonical pattern in fonts

com.google.fonts/check/font_names[source][source]

Check font names are correct

Rationale:

com.google.fonts/check/fontdata_namecheck[source][source]

Familyname must be unique according to namecheck.fontdata.com

Rationale:

We need to check names are not already used, and today the best place to check that is http://namecheck.fontdata.com

com.google.fonts/check/fontv[source][source]

Check for font-v versioning.

Rationale:

The git sha1 tagging and dev/release features of Source Foundry font-v tool are awesome and we would love to consider upstreaming the approach into fontmake someday. For now we only emit an INFO if a given font does not yet follow the experimental versioning style, but at some point we may start enforcing it.

com.google.fonts/check/fstype[source][source]

Checking OS/2 fsType does not impose restrictions.

Rationale:

The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the Google Fonts collection must have it set to zero (also known as “Installable Embedding”). This setting indicates that the fonts can be embedded in documents and permanently installed by applications on remote systems.

More detailed info is available at: https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype

Legacy check originally simply called ‘check/016’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/fvar_instances[source][source]

Check variable font instances

Rationale:

Check a font’s fvar instance coordinates comply with our guidelines: https://googlefonts.github.io/gf-guide/variable.html#fvar-instances

com.google.fonts/check/fvar_name_entries[source][source]

All name entries referenced by fvar instances exist on the name table?

Rationale:

The purpose of this check is to make sure that all name entries referenced by variable font instances do exist in the name table.

com.google.fonts/check/gasp[source][source]

Is the Grid-fitting and Scan-conversion Procedure (‘gasp’) table set to optimize rendering?

Rationale:

Traditionally version 0 ‘gasp’ tables were set so that font sizes below 8 ppem had no grid fitting but did have antialiasing. From 9-16 ppem, just grid fitting. And fonts above 17ppem had both antialiasing and grid fitting toggled on. The use of accelerated graphics cards and higher resolution screens make this approach obsolete. Microsoft’s DirectWrite pushed this even further with much improved rendering built into the OS and apps.

In this scenario it makes sense to simply toggle all 4 flags ON for all font sizes.

Legacy check originally simply called ‘check/062’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/gf_axisregistry_bounds[source][source]

Validate METADATA.pb axes values are within gf_axisregistry bounds.

Rationale:

Each axis range in a METADATA.pb file must be registered, and within the bounds of the axis definition in the Google Fonts Axis Registry, available at https://github.com/google/fonts/tree/main/axisregistry

com.google.fonts/check/gf_axisregistry/fvar_axis_defaults[source][source]

Validate defaults on fvar table match registered fallback names in GFAxisRegistry.

Rationale:

Check that axis defaults have a corresponding fallback name registered at the Google Fonts Axis Registry, available at https://github.com/google/fonts/tree/main/axisregistry

This is necessary for the following reasons:

To get ZIP files downloads on Google Fonts to be accurate — otherwise the chosen default font is not generated. The Newsreader family, for instance, has a default value on the ‘opsz’ axis of 16pt. If 16pt was not a registered fallback position, then the ZIP file would instead include another position as default (such as 14pt).

For the Variable fonts to display the correct location on the specimen page.

For VF with no weight axis to be displayed at all. For instance, Ballet, which has no weight axis, was not appearing in sandbox because default position on ‘opsz’ axis was 16pt, and it was not yet a registered fallback positon.

com.google.fonts/check/metadata/gf_axisregistry_valid_tags[source][source]

Validate METADATA.pb axes tags are defined in gf_axisregistry.

Rationale:

Ensure all axes in a METADATA.pb file are registered in the Google Fonts Axis Registry, available at https://github.com/google/fonts/tree/main/axisregistry

Why does Google Fonts have its own Axis Registry?

We support a superset of the OpenType axis registry axis set, and use additional metadata for each axis. Axes present in a font file but not in this registry will not function via our API. No variable font is expected to support all of the axes here.

Any font foundry or distributor library that offers variable fonts has a implicit, latent, de-facto axis registry, which can be extracted by scanning the library for axes’ tags, labels, and min/def/max values. While in 2016 Microsoft originally offered to include more axes in the OpenType 1.8 specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of August 2020, this effort has stalled. We hope more foundries and distributors will publish documents like this that make their axes explicit, to encourage of adoption of variable fonts throughout the industry, and provide source material for a future update to the OpenType specification’s axis registry.

com.google.fonts/check/glyf_nested_components[source][source]

Check glyphs do not have components which are themselves components.

Rationale:

There have been bugs rendering variable fonts with nested components. Additionally, some static fonts with nested components have been reported to have rendering and printing issues.

For more info, see: * https://github.com/fonttools/fontbakery/issues/2961 * https://github.com/arrowtype/recursive/issues/412

com.google.fonts/check/glyph_coverage[source][source]

Check Google Fonts glyph coverage.

Rationale:

Google Fonts expects that fonts in its collection support at least the minimal set of characters defined in the GF-latin-core glyph-set.

com.google.fonts/check/glyphsets/shape_languages[source][source]

Shapes languages in all GF glyphsets.

Rationale:

This check uses a heuristic to determine which GF glyphsets a font supports. Then it checks the font for correct shaping behaviour for all languages in those glyphsets.

com.google.fonts/check/has_ttfautohint_params[source][source]

Font has ttfautohint params?

com.google.fonts/check/hinting_impact[source][source]

Show hinting filesize impact.

Rationale:

This check is merely informative, displaying and useful comparison of filesizes of hinted versus unhinted font files.

Legacy check originally simply called ‘check/054’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/integer_ppem_if_hinted[source][source]

PPEM must be an integer on hinted fonts.

Rationale:

Hinted fonts must have head table flag bit 3 set.

Per https://docs.microsoft.com/en-us/typography/opentype/spec/head, bit 3 of Head::flags decides whether PPEM should be rounded. This bit should always be set for hinted fonts.

Note: Bit 3 = Force ppem to integer values for all internal scaler math;

May use fractional ppem sizes if this bit is clear;

com.google.fonts/check/kerning_for_non_ligated_sequences[source][source]

Is there kerning info for non-ligated sequences?

Rationale:

Fonts with ligatures should have kerning on the corresponding non-ligated sequences for text where ligatures aren’t used (eg https://github.com/impallari/Raleway/issues/14).

com.google.fonts/check/license/OFL_body_text[source][source]

Check OFL body text is correct.

Rationale:

Check OFL body text is correct. Often users will accidently delete parts of the body text.

Check license file has good copyright string.

Rationale:

An OFL.txt file’s first line should be the font copyright e.g: “Copyright 2019 The Montserrat Project Authors (https://github.com/julietaula/montserrat)”

com.google.fonts/check/ligature_carets[source][source]

Are there caret positions declared for every ligature?

Rationale:

All ligatures in a font must have corresponding caret (text cursor) positions defined in the GDEF table, otherwhise, users may experience issues with caret rendering.

If using GlyphsApp or UFOs, ligature carets can be defined as anchors with names starting with ‘caret_’. These can be compiled with fontmake as of version v2.4.0.

com.google.fonts/check/mandatory_avar_table[source][source]

Ensure variable fonts include an avar table.

Rationale:

Most variable fonts should include an avar table to correctly define axes progression rates.

For example, a weight axis from 0% to 100% doesn’t map directly to 100 to 1000, because a 10% progression from 0% may be too much to define the 200, while 90% may be too little to define the 900.

If the progression rates of axes is linear, this check can be ignored. Fontmake will also skip adding an avar table if the progression rates are linear. However, we still recommend designers visually proof each instance is at the expected weight, width etc.

com.google.fonts/check/meta/script_lang_tags[source][source]

Ensure fonts have ScriptLangTags declared on the ‘meta’ table.

Rationale:

The OpenType ‘meta’ table originated at Apple. Microsoft added it to OT with just two DataMap records:

  • dlng: comma-separated ScriptLangTags that indicate which scripts, or languages and scripts, with possible variants, the font is designed for.

  • slng: comma-separated ScriptLangTags that indicate which scripts, or languages and scripts, with possible variants, the font supports.

The slng structure is intended to describe which languages and scripts the font overall supports. For example, a Traditional Chinese font that also contains Latin characters, can indicate Hant,Latn, showing that it supports Hant, the Traditional Chinese variant of the Hani script, and it also supports the Latn script.

The dlng structure is far more interesting. A font may contain various glyphs, but only a particular subset of the glyphs may be truly “leading” in the design, while other glyphs may have been included for technical reasons. Such a Traditional Chinese font could only list Hant there, showing that it’s designed for Traditional Chinese, but the font would omit Latn, because the developers don’t think the font is really recommended for purely Latin-script use.

The tags used in the structures can comprise just script, or also language and script. For example, if a font has Bulgarian Cyrillic alternates in the locl feature for the cyrl BGR OT languagesystem, it could also indicate in dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages in meta use the ISO language and script codes, not the OpenType ones).

This check ensures that the font has the meta table containing the slng and dlng structures.

All families in the Google Fonts collection should contain the ‘meta’ table. Windows 10 already uses it when deciding on which fonts to fall back to. The Google Fonts API and also other environments could use the data for smarter filtering. Most importantly, those entries should be added to the Noto fonts.

In the font making process, some environments store this data in external files already. But the meta table provides a convenient way to store this inside the font file, so some tools may add the data, and unrelated tools may read this data. This makes the solution much more portable and universal.

Does METADATA.pb copyright field contain broken links?

com.google.fonts/check/metadata/can_render_samples[source][source]

Check samples can be rendered.

Rationale:

In order to prevent tofu from being seen on fonts.google.com, this check verifies that all samples specified by METADATA.pb can be properly rendered by the font.

com.google.fonts/check/metadata/canonical_style_names[source][source]

METADATA.pb: Font styles are named canonically?

Legacy check originally simply called ‘check/115’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/canonical_weight_value[source][source]

METADATA.pb: Check that font weight has a canonical value.

Legacy check originally simply called ‘check/111’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/category[source][source]

Ensure METADATA.pb category field is valid.

Rationale:

There are only five acceptable values for the category field in a METADATA.pb file:

  • MONOSPACE

  • SANS_SERIF

  • SERIF

  • DISPLAY

  • HANDWRITING

This check is meant to avoid typos in this field.

com.google.fonts/check/metadata/category_hints[source][source]

Check if category on METADATA.pb matches what can be inferred from the family name.

Rationale:

Sometimes the font familyname contains words that hint at which is the most likely correct category to be declared on METADATA.pb

com.google.fonts/check/metadata/consistent_axis_enumeration[source][source]

Validate VF axes match the ones declared on METADATA.pb.

Rationale:

All font variation axes present in the font files must be properly declared on METADATA.pb so that they can be served by the GFonts API.

com.google.fonts/check/metadata/consistent_repo_urls[source][source]

METADATA.pb: Check URL on copyright string is the same as in repository_url field.

Rationale:

Sometimes, perhaps due to copy-pasting, projects may declare different URLs between the font.coyright and the family.sources.repository_url fields.

com.google.fonts/check/metadata/copyright[source][source]

METADATA.pb: Copyright notice is the same in all fonts?

Legacy check originally simply called ‘check/088’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/copyright_max_length[source][source]

METADATA.pb: Copyright notice shouldn’t exceed 500 chars.

Legacy check originally simply called ‘check/104’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/designer_profiles[source][source]

METADATA.pb: Designers are listed correctly on the Google Fonts catalog?

Rationale:

Google Fonts has a catalog of designers.

This check ensures that the online entries of the catalog can be found based on the designer names listed on the METADATA.pb file.

It also validates the URLs and file formats are all correctly set.

com.google.fonts/check/metadata/designer_values[source][source]

Multiple values in font designer field in METADATA.pb must be separated by commas.

Rationale:

We must use commas instead of forward slashes because the server-side code at the fonts.google.com directory will segment the string on the commas into a list of names and display the first item in the list as the “principal designer” while the remaining names are identified as “contributors”.

See eg https://fonts.google.com/specimen/Rubik

com.google.fonts/check/metadata/empty_designer[source][source]

At least one designer is declared in METADATA.pb

Rationale:

Any font published on Google Fonts must credit one or several authors, foundry and/or individuals.

Ideally, all authors listed in the upstream repository’s AUTHORS.txt should be mentioned in the designer field.

com.google.fonts/check/metadata/escaped_strings[source][source]

Ensure METADATA.pb does not use escaped strings.

Rationale:

In some cases we’ve seen designer names and other fields with escaped strings in METADATA files (such as “Juli303241n”).

Nowadays the strings can be full unicode strings (such as “Julián”) and do not need escaping.

Escaping quotes or double-quotes is fine, though.

com.google.fonts/check/metadata/family_directory_name[source][source]

Check font family directory name.

Rationale:

We want the directory name of a font family to be predictable and directly derived from the family name, all lowercased and removing spaces.

com.google.fonts/check/metadata/familyname[source][source]

Check that METADATA.pb family values are all the same.

Legacy check originally simply called ‘check/089’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/filenames[source][source]

METADATA.pb: Font filenames match font.filename entries?

Rationale:

Note: This check only looks for files in the current directory.

Font files in subdirectories are checked by these other two checks:
  • com.google.fonts/check/metadata/undeclared_fonts

  • com.google.fonts/check/repo/vf_has_static_fonts

We may want to merge them all into a single check.

com.google.fonts/check/metadata/has_regular[source][source]

METADATA.pb: According to Google Fonts standards, families should have a Regular style.

Legacy check originally simply called ‘check/090’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/includes_production_subsets[source][source]

Check METADATA.pb includes production subsets.

Rationale:

Check METADATA.pb file includes the same subsets as the family in production.

com.google.fonts/check/metadata/italic_style[source][source]

METADATA.pb font.style “italic” matches font internals?

Legacy check originally simply called ‘check/106’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/license[source][source]

METADATA.pb license is “APACHE2”, “UFL” or “OFL”?

Legacy check originally simply called ‘check/085’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/match_filename_postscript[source][source]

METADATA.pb font.filename and font.post_script_name fields have equivalent values?

Legacy check originally simply called ‘check/097’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/match_fullname_postscript[source][source]

METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?

Legacy check originally simply called ‘check/096’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/match_name_familyname[source][source]

METADATA.pb: Check font name is the same as family name.

Legacy check originally simply called ‘check/110’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/match_weight_postscript[source][source]

METADATA.pb weight matches postScriptName for static fonts.

Legacy check originally simply called ‘check/113’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/menu_and_latin[source][source]

METADATA.pb should contain at least “menu” and “latin” subsets.

Legacy check originally simply called ‘check/086’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description. - Some additional changes were proposed at https://github.com/fonttools/fontbakery/issues/912#issuecomment-237935444

com.google.fonts/check/metadata/multiple_designers[source][source]

Font designer field in METADATA.pb must not contain ‘Multiple designers’.

Rationale:

For a while the string “Multiple designers” was used as a placeholder on METADATA.pb files. We should replace all those instances with actual designer names so that proper credits are displayed on the Google Fonts family specimen pages.

If there’s more than a single designer, the designer names must be separated by commas.

com.google.fonts/check/metadata/nameid/copyright[source][source]

Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?

Legacy check originally simply called ‘check/155’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/nameid/family_and_full_names[source][source]

METADATA.pb font.name and font.full_name fields match the values declared on the name table?

Legacy check originally simply called ‘check/108’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/nameid/family_name[source][source]

Checks METADATA.pb font.name field matches family name declared on the name table.

Legacy check originally simply called ‘check/092’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/nameid/font_name[source][source]

METADATA.pb font.name value should be same as the family name declared on the name table.

Rationale:

This check ensures consistency between the font name declared on the name table and the contents of the METADATA.pb file.

Legacy check originally simply called ‘check/095’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description. - Some additional changes were proposed at https://github.com/fonttools/fontbakery/issues/4086

com.google.fonts/check/metadata/nameid/full_name[source][source]

METADATA.pb font.full_name value matches fullname declared on the name table?

Legacy check originally simply called ‘check/094’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/nameid/post_script_name[source][source]

Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.

Legacy check originally simply called ‘093’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/normal_style[source][source]

METADATA.pb font.style “normal” matches font internals?

Legacy check originally simply called ‘check/107’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/os2_weightclass[source][source]

Check METADATA.pb font weights are correct.

Rationale:

Check METADATA.pb font weights are correct.

For static fonts, the metadata weight should be the same as the static font’s OS/2 usWeightClass.

For variable fonts, the weight value should be 400 if the font’s wght axis range includes 400, otherwise it should be the value closest to 400.

Legacy check originally simply called ‘check/112’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description. - Some additional changes were proposed at https://github.com/fonttools/fontbakery/issues/2683

com.google.fonts/check/metadata/parses[source][source]

Check METADATA.pb parse correctly.

Rationale:

The purpose of this check is to ensure that the METADATA.pb file is not malformed.

com.google.fonts/check/metadata/primary_script[source][source]

METADATA.pb: Check for primary_script

Rationale:

Try to guess font’s primary script and see if that’s set in METADATA.pb. This is an educated guess based on the number of glyphs per script in the font and should be taken with caution.

com.google.fonts/check/metadata/regular_is_400[source][source]

METADATA.pb: Regular should be 400.

Legacy check originally simply called ‘check/091’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/reserved_font_name[source][source]

Copyright notice on METADATA.pb should not contain ‘Reserved Font Name’.

Legacy check originally simply called ‘check/103’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/subsets_order[source][source]

METADATA.pb subsets should be alphabetically ordered.

Legacy check originally simply called ‘check/087’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/undeclared_fonts[source][source]

Ensure METADATA.pb lists all font binaries.

Rationale:

The set of font binaries available, except the ones on a “static” subdir, must match exactly those declared on the METADATA.pb file.

Also, to avoid confusion, we expect that font files (other than statics) are not placed on subdirectories.

com.google.fonts/check/metadata/unique_full_name_values[source][source]

METADATA.pb: check if fonts field only has unique “full_name” values.

Legacy check originally simply called ‘check/083’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/unique_weight_style_pairs[source][source]

METADATA.pb: check if fonts field only contains unique style:weight pairs.

Legacy check originally simply called ‘check/084’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/unknown_designer[source][source]

Font designer field in METADATA.pb must not be ‘unknown’.

Legacy check originally simply called ‘check/007’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description. - Some additional changes were proposed at https://github.com/fonttools/fontbakery/issues/800

com.google.fonts/check/metadata/unreachable_subsetting[source][source]

Check for codepoints not covered by METADATA subsets.

Rationale:

This check ensures that all encoded glyphs in the font are covered by a subset declared in the METADATA.pb. Google Fonts splits the font into a set of subset fonts based on the contents of the subsets field and the subset definitions in the glyphsets repository.

Any encoded glyphs which are not by any of these subset definitions will not be served in the subsetted fonts, and so will be unreachable to the end user.

com.google.fonts/check/metadata/unsupported_subsets[source][source]

Check for METADATA subsets with zero support.

Rationale:

This check ensures that the subsets specified on a METADATA.pb file are actually supported (even if only partially) by the font files.

Subsets for which none of the codepoints are supported will cause the check to FAIL.

Copyright notices match canonical pattern in METADATA.pb

Rationale:

The expected pattern for the copyright string adheres to the following rules:

  • It must say “Copyright” followed by a 4 digit year (optionally followed by a hyphen and another 4 digit year)

  • Then it must say “The <familyname> Project Authors”

  • And within parentheses, a URL for a git repository must be provided

  • The check is case insensitive and does not validate whether the familyname is correct, even though we’d expect it is (and we may soon update the check to validate that aspect as well!)

Here is an example of a valid copyright string:

“Copyright 2017 The Archivo Black Project Authors

(https://github.com/Omnibus-Type/ArchivoBlack)”

Legacy check originally simply called ‘check/102’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/valid_filename_values[source][source]

METADATA.pb font.filename field contains font name in right format?

Legacy check originally simply called ‘check/100’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/valid_full_name_values[source][source]

METADATA.pb font.full_name field contains font name in right format?

Legacy check originally simply called ‘check/099’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/valid_name_values[source][source]

METADATA.pb font.name field contains font name in right format?

Legacy check originally simply called ‘check/098’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/metadata/valid_nameid25[source][source]

Check name ID 25 to end with “Italic” for Italic VFs.

Rationale:

Due to a bug in (at least) Adobe Indesign, name ID 25 needs to be different for Italic VFs than their Upright counterparts. Google Fonts chooses to append “Italic” here.

com.google.fonts/check/metadata/valid_post_script_name_values[source][source]

METADATA.pb font.post_script_name field contains font name in right format?

Legacy check originally simply called ‘check/101’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/missing_small_caps_glyphs[source][source]

Check small caps glyphs are available.

Rationale:

Ensure small caps glyphs are available if a font declares smcp or c2sc OT features.

com.google.fonts/check/name/ascii_only_entries[source][source]

Are there non-ASCII characters in ASCII-only NAME table entries?

Rationale:

The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).

For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be the same in CFF fonts which also have this requirement in the OpenType spec.

Note: A common place where we find non-ASCII strings is on name table entries with NameID > 18, which are expressly for localising the ASCII-only IDs into Hindi / Arabic / etc.

Legacy check originally simply called ‘check/074’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description. - Some additional changes were proposed at https://github.com/fonttools/fontbakery/issues/1663

com.google.fonts/check/name/copyright_length[source][source]

Length of copyright notice must not exceed 500 characters.

Rationale:

This is an arbitrary max length for the copyright notice field of the name table. We simply don’t want such notices to be too long. Typically such notices are actually much shorter than this with a length of roughly 70 or 80 characters.

com.google.fonts/check/name/description_max_length[source][source]

Description strings in the name table must not exceed 200 characters.

Rationale:

An old FontLab version had a bug which caused it to store copyright notices in nameID 10 entries.

In order to detect those and distinguish them from actual legitimate usage of this name table entry, we expect that such strings do not exceed a reasonable length of 200 chars.

Longer strings are likely instances of the FontLab bug.

Legacy check originally simply called ‘check/032’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/name/family_and_style_max_length[source][source]

Combined length of family and style must not exceed 27 characters.

Rationale:

According to a GlyphsApp tutorial [1], in order to make sure all versions of Windows recognize it as a valid font file, we must make sure that the concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not exceed 20 characters.

After discussing the problem in more detail at FontBakery issue #2179 [2] we decided that allowing up to 27 chars would still be on the safe side, though.

[1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances [2] https://github.com/fonttools/fontbakery/issues/2179

com.google.fonts/check/name/family_name_compliance[source][source]

Check family name for GF Guide compliance.

Rationale:

Checks the family name for compliance with the Google Fonts Guide. https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts

If you want to have your family name added to the CamelCase exceptions list, please submit a pull request to the camelcased_familyname_exceptions.txt file.

Similarly, abbreviations can be submitted to the abbreviations_familyname_exceptions.txt file.

These are located in the Lib/fontbakery/data/googlefonts/ directory of the FontBakery source code currently hosted at https://github.com/fonttools/fontbakery/

com.google.fonts/check/name/familyname_first_char[source][source]

Make sure family name does not begin with a digit.

Rationale:

Font family names which start with a numeral are often not discoverable in Windows applications.

Legacy check originally simply called ‘check/067’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/name/license[source][source]

Check copyright namerecords match license file.

Rationale:

A known licensing description must be provided in the NameID 14 (LICENSE DESCRIPTION) entries of the name table.

The source of truth for this check (to determine which license is in use) is a file placed side-by-side to your font project including the licensing terms.

Depending on the chosen license, one of the following string snippets is expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the name table:

  • “This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL

  • “Licensed under the Apache License, Version 2.0”

  • “Licensed under the Ubuntu Font Licence 1.0.”

Currently accepted licenses are Apache or Open Font License. For a small set of legacy families the Ubuntu Font License may be acceptable as well.

When in doubt, please choose OFL for new font projects.

Legacy check originally simply called ‘check/029’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/name/license_url[source][source]

License URL matches License text on name table?

Rationale:

A known license URL must be provided in the NameID 14 (LICENSE INFO URL) entry of the name table.

The source of truth for this check is the licensing text found on the NameID 13 entry (LICENSE DESCRIPTION).

The string snippets used for detecting licensing terms are:

  • “This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFL

  • “Licensed under the Apache License, Version 2.0”

  • “Licensed under the Ubuntu Font Licence 1.0.”

Currently accepted licenses are Apache or Open Font License. For a small set of legacy families the Ubuntu Font License may be acceptable as well.

When in doubt, please choose OFL for new font projects.

Legacy check originally simply called ‘check/030’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/name/line_breaks[source][source]

Name table entries should not contain line-breaks.

Rationale:

There are some entries on the name table that may include more than one line of text. The Google Fonts team, though, prefers to keep the name table entries short and simple without line breaks.

For instance, some designers like to include the full text of a font license in the “copyright notice” entry, but for the GFonts collection this entry should only mention year, author and other basic info in a manner enforced by com.google.fonts/check/font_copyright

Legacy check originally simply called ‘check/057’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/name/mandatory_entries[source][source]

Font has all mandatory ‘name’ table entries?

Legacy check originally simply called ‘check/156’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/name/rfn[source][source]

Name table strings must not contain the string ‘Reserved Font Name’.

Rationale:

Some designers adopt the “Reserved Font Name” clause of the OFL license. This means that the original author reserves the rights to the family name and other people can only distribute modified versions using a different family name.

Google Fonts published updates to the fonts in the collection in order to fix issues and/or implement further improvements to the fonts. It is important to keep the family name so that users of the webfonts can benefit from the updates. Since it would forbid such usage scenario, all families in the GFonts collection are required to not adopt the RFN clause.

This check ensures “Reserved Font Name” is not mentioned in the name table.

com.google.fonts/check/name/unwanted_chars[source][source]

Substitute copyright, registered and trademark symbols in name table entries.

Legacy check originally simply called ‘check/019’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/name/version_format[source][source]

Version format is correct in ‘name’ table?

Legacy check originally simply called ‘check/055’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/no_debugging_tables[source][source]

Ensure fonts do not contain any pre-production tables.

Rationale:

Tables such as Debg are useful in the pre-production stages of font development, but add unnecessary bloat to a production font and should be removed before release.

com.google.fonts/check/old_ttfautohint[source][source]

Font has old ttfautohint applied?

Rationale:

Check if font has been hinted with an outdated version of ttfautohint.

Legacy check originally simply called ‘check/056’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/os2/use_typo_metrics[source][source]

OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.

Rationale:

All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7 (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme established as a Google Fonts policy aiming at a common ground supported by all major font rendering environments.

For more details, read: https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md

Below is the portion of that document that is most relevant to this check:

Use_Typo_Metrics must be enabled. This will force MS Applications to use the OS/2 Typo values instead of the Win values. By doing this, we can freely set the Win values to avoid clipping and control the line height with the typo values. It has the added benefit of future line height compatibility. When a new script is added, we simply change the Win values to the new yMin and yMax, without needing to worry if the line height have changed.

com.google.fonts/check/production_glyphs_similarity[source][source]

Glyphs are similiar to Google Fonts version?

Legacy check originally simply called ‘check/118’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/render_own_name[source][source]

Check font can render its own name.

Rationale:

A base expectation is that a font family’s regular/default (400 roman) style can render its ‘menu name’ (nameID 1) in itself.

com.google.fonts/check/repo/dirname_matches_nameid_1[source][source]

Directory name in GFonts repo structure must match NameID 1 of the regular.

com.google.fonts/check/repo/fb_report[source][source]

A font repository should not include FontBakery report files

Rationale:

A FontBakery report is ephemeral and so should be used for posting issues on a bug-tracker instead of being hosted in the font project repository.

com.google.fonts/check/repo/sample_image[source][source]

Check README.md has a sample image.

Rationale:

In order to showcase what a font family looks like, the project’s README.md file should ideally include a sample image and highlight it in the upper portion of the document, no more than 10 lines away from the top of the file.

com.google.fonts/check/repo/upstream_yaml_has_required_fields[source][source]

Check upstream.yaml file contains all required fields

Rationale:

If a family has been pushed using the gftools packager, we must check that all the required fields in the upstream.yaml file have been populated.

com.google.fonts/check/repo/vf_has_static_fonts[source][source]

A static fonts directory, if present, must contain manually hinted fonts

Rationale:

Variable font family directories kept in the google/fonts git repo may include a static/ subdir containing static fonts, if manual hinting is used on these fonts. Otherwise, the directory should be removed.

com.google.fonts/check/repo/zip_files[source][source]

A font repository should not include ZIP files

Rationale:

Sometimes people check in ZIPs into their font project repositories. While we accept the practice of checking in binaries, we believe that a ZIP is a step too far ;)

Note: a source purist position is that only source files and build scripts should be checked in.

com.google.fonts/check/slant_direction[source][source]

Checking direction of slnt axis angles

Rationale:

The ‘slnt’ axis values are defined as negative values for a clockwise (right) lean, and positive values for counter-clockwise lean. This is counter-intuitive for many designers who are used to think of a positive slant as a lean to the right.

This check ensures that the slant axis direction is consistent with the specs.

https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt

com.google.fonts/check/smart_dropout[source][source]

Font enables smart dropout control in “prep” table instructions?

Rationale:

This setup is meant to ensure consistent rendering quality for fonts across all devices (with different rendering/hinting capabilities).

Below is the snippet of instructions we expect to see in the fonts: B8 01 FF PUSHW 0x01FF 85 SCANCTRL (unconditinally turn on

dropout control mode)

B0 04 PUSHB 0x04 8D SCANTYPE (enable smart dropout control)

“Smart dropout control” means activating rules 1, 2 and 5: Rule 1: If a pixel’s center falls within the glyph outline,

that pixel is turned on.

Rule 2: If a contour falls exactly on a pixel’s center,

that pixel is turned on.

Rule 5: If a scan line between two adjacent pixel centers

(either vertical or horizontal) is intersected by both an on-Transition contour and an off-Transition contour and neither of the pixels was already turned on by rules 1 and 2, turn on the pixel which is closer to the midpoint between the on-Transition contour and off-Transition contour. This is “Smart” dropout control.

For more detailed info (such as other rules not enabled in this snippet), please refer to the TrueType Instruction Set documentation.

Legacy check originally simply called ‘check/072’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/STAT[source][source]

Check a font’s STAT table contains compulsory Axis Values.

Rationale:

Check a font’s STAT table contains compulsory Axis Values which exist in the Google Fonts Axis Registry.

We cannot determine what Axis Values the user will set for axes such as opsz, GRAD since these axes are unique for each font so we’ll skip them.

com.google.fonts/check/stylisticset_description[source][source]

Ensure Stylistic Sets have description.

Rationale:

Stylistic sets should provide description text. Programs such as InDesign, TextEdit and Inkscape use that info to display to the users so that they know what a given stylistic set offers.

com.google.fonts/check/unitsperem_strict[source][source]

Stricter unitsPerEm criteria for Google Fonts.

Rationale:

Even though the OpenType spec allows unitsPerEm to be any value between 16 and 16384, the Google Fonts project aims at a narrower set of reasonable values.

Values above 4000 would likely result in unreasonable filesize increases.

Legacy check originally simply called ‘check/116’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/usweightclass[source][source]

Check the OS/2 usWeightClass is appropriate for the font’s best SubFamily name.

Rationale:

Google Fonts expects variable fonts, static ttfs and static otfs to have differing OS/2 usWeightClass values.

  • For Variable Fonts, Thin-Black must be 100-900

  • For static ttfs, Thin-Black can be 100-900 or 250-900

  • For static otfs, Thin-Black must be 250-900

If static otfs are set lower than 250, text may appear blurry in legacy Windows applications.

Glyphsapp users can change the usWeightClass value of an instance by adding a ‘weightClass’ customParameter.

Legacy check originally simply called ‘check/020’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/varfont/consistent_axes[source][source]

Ensure that all variable font files have the same set of axes and axis ranges.

Rationale:

In order to facilitate the construction of intuitive and friendly user interfaces, all variable font files in a given family should have the same set of variation axes. Also, each axis must have a consistent setting of min/max value ranges accross all the files.

com.google.fonts/check/varfont/duplexed_axis_reflow[source][source]

Ensure VFs with duplexed axes do not vary horizontal advance.

Rationale:

Certain axes, such as grade (GRAD) or roundness (ROND), should not change any advanceWidth or kerning data across the font’s design space. This is because altering the advance width of glyphs can cause text reflow.

com.google.fonts/check/varfont_duplicate_instance_names[source][source]

Check variable font instances don’t have duplicate names

Rationale:

This check’s purpose is to detect duplicate named instances names in a given variable font. Repeating instance names may be the result of instances for several VF axes defined in fvar, but since currently only weight+italic tokens are allowed in instance names as per GF specs, they ended up repeating. Instead, only a base set of fonts for the most default representation of the family can be defined through instances in the fvar table, all other instances will have to be left to access through the STAT table.

com.google.fonts/check/varfont/generate_static[source][source]

Check a static ttf can be generated from a variable font.

Rationale:

Google Fonts may serve static fonts which have been generated from variable fonts. This test will attempt to generate a static ttf using fontTool’s varLib mutator.

The target font will be the mean of each axis e.g:

## VF font axes

  • min weight, max weight = 400, 800

  • min width, max width = 50, 100

## Target Instance

  • weight = 600

  • width = 75

com.google.fonts/check/varfont/has_HVAR[source][source]

Check that variable fonts have an HVAR table.

Rationale:

Not having a HVAR table can lead to costly text-layout operations on some platforms, which we want to avoid.

So, all variable fonts on the Google Fonts collection should have an HVAR with valid values.

More info on the HVAR table can be found at: https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements

com.google.fonts/check/varfont/unsupported_axes[source][source]

Ensure VFs do not contain the ital axis.

Rationale:

The ‘ital’ axis is not supported yet in Google Chrome.

For the time being, we need to ensure that VFs do not contain this axis. Once browser support is better, we can deprecate this check.

For more info regarding browser support, see: https://arrowtype.github.io/vf-slnt-test/

com.google.fonts/check/vendor_id[source][source]

Checking OS/2 achVendID.

Rationale:

Microsoft keeps a list of font vendors and their respective contact info. This list is updated regularly and is indexed by a 4-char “Vendor ID” which is stored in the achVendID field of the OS/2 table.

Registering your ID is not mandatory, but it is a good practice since some applications may display the type designer / type foundry contact info on some dialog and also because that info will be visible on Microsoft’s website:

https://docs.microsoft.com/en-us/typography/vendors/

This check verifies whether or not a given font’s vendor ID is registered in that list or if it has some of the default values used by the most common font editors.

Each new FontBakery release includes a cached copy of that list of vendor IDs. If you registered recently, you’re safe to ignore warnings emitted by this check, since your ID will soon be included in one of our upcoming releases.

Legacy check originally simply called ‘check/018’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description. - Some additional changes were proposed at https://github.com/fonttools/fontbakery/issues/3943

com.google.fonts/check/version_bump[source][source]

Version number has increased since previous release on Google Fonts?

Legacy check originally simply called ‘check/117’. We used to lack richer metadata back in 2015. We’re open to further improvements to this description.

com.google.fonts/check/vertical_metrics[source][source]

Check font follows the Google Fonts vertical metric schema

Rationale:

This check generally enforces Google Fonts’ vertical metrics specifications. In particular: * lineGap must be 0 * Sum of hhea ascender + abs(descender) + linegap must be

between 120% and 200% of UPM

  • Warning if sum is over 150% of UPM

The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen and may hint at a glaring mistake in the metrics calculations or UPM settings.

Our documentation includes further information: https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics

com.google.fonts/check/vertical_metrics_regressions[source][source]

Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.

Rationale:

If the family already exists on Google Fonts, we need to ensure that the checked family’s vertical metrics are similar. This check will test the following schema which was outlined in Font Bakery issue #1162 [1]:

  • The family should visually have the same vertical metrics as the Regular style hosted on Google Fonts.

  • If the family on Google Fonts has differing hhea and typo metrics, the family being checked should use the typo metrics for both the hhea and typo entries.

  • If the family on Google Fonts has use typo metrics not enabled and the family being checked has it enabled, the hhea and typo metrics should use the family on Google Fonts winAscent and winDescent values.

  • If the upms differ, the values must be scaled so the visual appearance is the same.

[1] https://github.com/fonttools/fontbakery/issues/1162

com.google.fonts/check/vttclean[source][source]

There must not be VTT Talk sources in the font.

Rationale:

The goal here is to reduce filesizes and improve pageloading when dealing with webfonts.

The VTT Talk sources are not necessary at runtime and endup being just dead weight when left embedded in the font binaries. The sources should be kept on the project files but stripped out when building release binaries.

FontBakeryCondition fontbakery.profiles.googlefonts.description_html[source][source]
FontBakeryCondition fontbakery.profiles.googlefonts.font_codepoints[source][source]
FontBakeryCondition fontbakery.profiles.googlefonts.uharfbuzz_blob[source][source]