Google Fonts

Upstream repository structure

🐰 Font projects must be hosted on GitHub (or another VCS), and the repositories must be public. Google Fonts accepts private repositories while the project is still in progress, but they must be public once completed.

This guide will help users understand what and why directories, files, and documents are needed in a Google Fonts project.

Before starting this reading, make sure that:
Background reading:
learn Hosting projects on Github

Table of contents

The Google Fonts Project Template repo

If you read this before you have created your project Github repo, you would like to use the Google Fonts project template repo to start with everything set up for you.

The template is based on Raphael Bastide’s UFR, and was adapted to meet Google Fonts’ needs. Its purpose is to help type designers set up their repo of open-source fonts β€”Β especially if they want to publish them on Google Fonts. A unified structure throughout all the repositories helps GF to automate the fonts’ quality assurance and onboarding processes into the catalog.

But there is more: the project template incorporates GitHub Actions to provide users with many automations.

This is particularly practical if you don’t want to run gftools by yourself: your GitHub repo is doing it for you! The downside is that it is harder to customize for GitHub beginners or people who don’t want to get their hands dirty in some code, and so maybe harder to use for a project that doesn’t follow this exact template.

But give it a try :) Simon Cozens has made a 1 minute video to show how quick this way to start is.

The essentials explained

Be aware that the scripts and automated actions provided by the Google Fonts project template are not mandatory, although your font repo still must follow certain requirements.

Texturina is a good example of a simple repo that only contains the essentials.

β”œβ”€β”€ AUTHORS.txt
β”œβ”€β”€ CONTRIBUTORS.txt
β”œβ”€β”€ OFL.txt
β”œβ”€β”€ README.md
β”œβ”€β”€ documentation
β”‚ Β  β”œβ”€β”€ readme-images.jpg
β”‚ Β  └── promo.zip
β”œβ”€β”€ fonts
β”‚ Β  β”œβ”€β”€ otf
β”‚ Β  β”‚ Β  └── FontFamily-Regular.otf
β”‚ Β  β”œβ”€β”€ ttf
β”‚ Β  β”‚ Β  └── FontFamily-Regular.ttf
β”‚ Β  β”œβ”€β”€ webfonts
β”‚ Β  β”‚ Β  └── FontFamily-Regular.woff2
β”‚ Β  └── variable
β”‚ Β  Β  Β  └── FontFamily-[wdth,wght].ttf
β”œβ”€β”€ sources
β”‚ Β  β”œβ”€β”€ FontFamily.ext
β”‚ Β  β”œβ”€β”€ FontFamily-Italic.ext
β”‚ Β  └── config.yaml and/or build.sh
β”œβ”€β”€ requirements.txt
└── .gitignore

Each file or dir has the following purpose:

An example is provided for each file (from this Guide or other repositories). Please use these templates and modify what you need.

The files and directories listed above are mandatory. However, we don’t mind if you include further doc and dirs, but they should have a clear purpose (such as a scripts directory for example).


Further reading:
must→ README file
learn Maintaining your font repo