Beyond the visible outlines of a typeface, each font binary is composed of an ensemble of required tables. These tables store fundamental metadata for the font to transmit operating information to the different environments (OS, applications, browsers) and, therefore, for it to function properly in all of them.
Hence, it is important to inspect them to verify all the information is as expected. You can make use of the following
Fontbakery is our primary quality assurance testing tool to make it easier to check that font projects are optimal, making sure that the fonts are reliable before they are submitted to the users.
The check results are categorised according to levels of relevance, ranging from ERROR to SKIP. The icons are helpers to identify the severity. Be calm! There-could be many of them. Get comfortable with receiving them and embrace them as a way to improve your font.
💔 ERROR Is a problem with the program itself, not the fonts. For example a bug or a check that requires an internet connection. If you get an Error, please give it a quick look to see which case it is. If it’s not an internet connection issue, please help us to improve the tool by reporting it in the issue tracker of the Fontbakery repository.
🔥 FAIL Is a problem with the font that must be fixed.
⚠️ WARN Is something worth warning about the font but requires human judgment. It might be something expected by design decision but needs to be considered.
💤 SKIP Happens when the check does not apply to the given font (for example a static font check will not run when you give it a variable font - like it happens with the overlapping contours check)
ℹ️ INFO Simply prints something useful for information purposes. For example, there is an INFO check that tells you what is the file size impact of hinting on a font.
🍞 PASS Means the font looks-good for the given checking routine.
Checks are separated into different collections called profiles (and a profile can include all or some checks from other profiles).
Main profiles are:
OpenType Specification. Checking routines are directly mapped to the requirements of the OpenType specification table by table.
Universal. Collects checks for good practices not formalized by the Open Type spec, but broadly accepted among the type-design community.
Vendor Specific. Requirements that are not useful for everyone but something that is a specific vendor need.
To onboard fonts to Google Fonts they must pass the checks of this profile. Sometimes users consider a reported fail inapropriate, but remember that a FAIL for the googlefonts profile may be only specific to Google Fonts API, not all environments.
The command to run this profiles is:
fontbakery check-googlefonts path/fonts/Family-*.ttf
There is also an option to filter the check result by log-level. For a font to be published in GF it should be at least from Warn level. There is also an option to generate a output file of the report in Markdown format:
fontbakery check-googlefonts -l WARN --ghmarkdown report.md
To see all the commands available in a profile run:
fontbakery [profile] --help
Some foundries created their own profile to have vendor-specific checks. This is the case of Fontwerk and Font Bureau, and you could do it too with a little bit of python skill!
Diffenator2 is a tool allows you to generate html with real words to proof the font functioning, and also to compare two different versions of a font.
To see the available options run one of the following commands:
diffenator2 proof --help
or diffenator2 diff --help
You can also check for install instructions and more options in its GitHub repository.
There are many standards and conventions established over centuries around the design and drawing of fonts. Providing a comprehensive list of them goes out of the scope of the current Guide.
However, you could:
Start by reading the How typefaces are designed & fonts are made section on the Font Knowledge page which includes some bibliography listed.
Read the Outline Quality Checklist and the Diacritic Marks sections of this Guide.
And check some helpful links to many resources at the bottom of this page.