Skip to content
 
 

Repository files navigation

Poppins

During the 1920s, Central European type foundries joined the modernist movements in art and design. Modernism was truly international in scope; only three years after the founding of the German Bauhaus school, several of its painting instructors were already exhibiting their work in Calcutta.

Geometric sans-serif typefaces have been a popular design element ever since these actors took to the world’s stage. Poppins is one of the newest comers to this long tradition. An open-source family supporting both Devanagari and Latin, this typeface is an internationalist take on the geometric sans genre. Many of the Latin glyphs — the ampersand, for instance — are far more constructed and rationalist than in previously released geometric typefaces. Poppins’s Devanagari design is particularly new. It is likely the first-ever large Devanagari family in this style that has been brought to market.

The Poppins family includes 9 upright weights, from Thin through Black with 9 complementary italics for each. Each font includes 1014 glyphs, including all of the unique conjunct forms necessary for typesetting Indian languages like Hindi, Marathi, Nepali, etc. Just like the Latin glyphs, the Devanagari forms in Poppins are based on pure geometry (particularly circles). Poppins’s letters are practically monolinear, although optical corrections have been applied to stroke joints where necessary, to maintain an even color in text. The Devanagari base character height and the Latin ascender height are equal; Latin capital letters are shorter than the Devanagari characters, and the Latin x-height is set rather high.

Poppins was designed and produced in-house at Indian Type Foundry (ITF) between 2013 and 2016 by Jonny Pinhorn, Ninad Kale, Shiva Nallaperumal, Michelle Parmar, Rahul Gajjar, & Liang Hai.

Developer Setup

1. Install dependencies

python -m venv .venv
.venv\Scripts\activate  # or source .venv/bin/activate on macOS/Linux
pip install --upgrade pip
pip install fontmake glyphsLib fonttools[woff2] defcon

Hindkit is no longer required for the day-to-day builds. Everything runs through fontmake and the helper scripts inside tools/.

2. Build the variable fonts

The entire pipeline (tabular figure generation, glyphs splitting, master UFO export, axis mapping, VF compilation) lives in tools/build_variable_fonts.py. Run it from the repo root:

python tools/build_variable_fonts.py

Outputs land in dist/:

dist/
  Poppins-roman-VF.otf
  Poppins-italic-VF.otf

3. Build static TTFs (optional)

If you also need per-instance TTFs (Thin → Black and italics), run:

python tools/build_full_family.py

The script drives fontmake -m … -i … internally and patches weight-class metadata so the resulting binaries match CSS expectations.

4. Clean working tree

All generated artifacts (build*/, dist/, dumped TTX files, designspaces, UFOs, etc.) are ignored by git. If you ever need to remove them manually, delete the directories above or re-run python tools/build_variable_fonts.py, which regenerates everything from scratch.

Using AI assistants (ChatGPT, etc.)

If another engineer (or future-you) wants to ask ChatGPT for help inside this repo, give it the following context to guarantee deterministic results:

  1. Source of truth – The Glyphs master is masters/Poppins.glyphs. Always run python tools/build_variable_fonts.py after modifying it so the intermediate UFOs, designspaces, and VFs stay aligned.
  2. Tabular numeralstools/add_tabular_figures.py and tools/normalize_tnum_widths.py keep .tnum glyphs consistent. Mention these files whenever asking about numeral spacing so the assistant knows not to reinvent them.
  3. Axis mappingtools/fix_weight_axis_mapping.py rewrites build/Poppins-*.designspace so CSS weights (100–900) work. ChatGPT should never edit the designspaces by hand; run the script instead.
  4. Artifacts stay untrackedbuild/, dist/, and other generated files are ignored. If ChatGPT produces binaries, have it confirm they will end up under those directories before running git commands.
  5. Helpful commands to mentionpython tools/build_variable_fonts.py, python tools/build_full_family.py, fontmake …, python -m fontTools.ttx <file>.

Supplying that bullet list when prompting ChatGPT drastically improves the quality of its suggestions and keeps the repository in a pushable state.

About

Poppins -

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages