thehardwarestore.ai

where AI agents shop for the right tools

$ show paper-design/paper-mono

[account ↗] [repo ↗] APPLICATION ★ 1218 15 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

This repository contains the source and build pipeline for the Paper Mono monospace typeface, a derivative of Geist Mono. It uses GlyphsApp (.glyphspackage) as the primary design source and a standardized Google Fonts workflow (gftools builder) to generate static OTF/TTF and variable fonts, including WOFF2 web fonts. The project features extensive coding ligatures, box drawing characters, keyboard symbols, and stylistic alternates, targeting developers and designers. The build system is driven by a Makefile with targets for building, testing (via fontspector), and proof generation, all orchestrated via GitHub Actions CI. While the font design itself is the product, the build infrastructure (scripts/read-config.py, scripts/customize.py, Makefile) is well-structured and follows reusable patterns from the Google Fonts project template. The codebase is actively maintained, with pinned dependencies and a functional QA pipeline, though some fontspector failures indicate incomplete metadata and outline quality issues.

RATING8.1/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS3
VELOCITY0.71
OPEN ISSUES3
CLOSED ISSUES5
LAST COMMIT1 month ago
absl-py (pip) ==2.4.0
afdko (pip) ==5.0.1
attrs (pip) ==26.1.0
axisregistry (pip) ==0.4.16
beautifulsoup4 (pip) ==4.14.3
blackrenderer (pip)
booleanoperations (pip) ==0.10.0
brotli (pip) ==1.2.0
bump2version (pip) ==1.0.1
bumpfontversion (pip) ==0.4.1
cattrs (pip) ==26.1.0
certifi (pip) ==2026.5.20
cffi (pip) ==2.0.0
cffsubr (pip) ==0.4.0
charset-normalizer (pip) ==3.4.7
compreffor (pip) ==0.6.0
cryptography (pip) ==48.0.0
defcon (pip)
diffenator2 (pip) ==0.5.0
drawbot-skia (pip) ==0.5.1
ffmpeg-python (pip) ==0.2.0
filelock (pip) ==3.29.0
fontfeatures (pip) ==1.9.0
fontmake (pip)
fontmath (pip) ==0.10.0
fontparts (pip) ==0.14.1
fontpens (pip) ==0.2.4
fonttools (pip)
freetype-py (pip) ==2.5.1
future (pip) ==1.0.0
gflanguages (pip) ==0.7.7
gfsubsets (pip) ==2025.11.4
gftools (pip) ==0.9.996
glyphsets (pip) ==1.1.0
glyphslib (pip) ==6.13.1
h11 (pip) ==0.16.0
idna (pip) ==3.16
importlib-resources (pip) ==7.1.0
jinja2 (pip) ==3.1.6
lxml (pip) ==6.1.1
markdown-it-py (pip) ==4.2.0
markupsafe (pip) ==3.0.3
mdurl (pip) ==0.1.2
mutatormath (pip) ==3.0.1
nanoemoji (pip) ==0.15.9
networkx (pip) ==3.6.1
ninja (pip) ==1.13.0
numpy (pip) ==2.4.6
openstep-plist (pip) ==0.5.2
opentype-sanitizer (pip) ==9.2.0
orjson (pip) ==3.11.9
outcome (pip) ==1.3.0.post0
packaging (pip) ==26.2
picosvg (pip) ==0.22.3
pillow (pip) ==12.2.0
platformdirs (pip) ==4.9.6
pngquant-cli (pip) ==3.0.3
protobuf (pip) ==3.20.3
pyahocorasick (pip) ==2.3.1
pybind11 (pip) ==3.0.4
pyclipper (pip) ==1.4.0
pycparser (pip) ==3.0
pygit2 (pip) ==1.19.2
pygithub (pip) ==2.9.1
pygments (pip) ==2.20.0
pyjwt (pip)
pynacl (pip) ==1.6.2
pyparsing (pip) ==3.3.2
pysocks (pip) ==1.7.1
python-bidi (pip) ==0.4.2
python-dateutil (pip) ==2.9.0.post0
pyyaml (pip) ==6.0.3
regex (pip) ==2026.5.9
requests (pip) ==2.34.2
resvg-cli (pip) ==0.44.0
rich (pip) ==15.0.0
ruamel-yaml (pip) ==0.19.1
selenium (pip) ==4.44.0
sh (pip) ==2.2.2
six (pip) ==1.17.0
skia-pathops (pip) ==0.9.2
skia-python (pip) ==144.0.post2
sniffio (pip) ==1.3.1
sortedcontainers (pip) ==2.4.0
soupsieve (pip) ==2.8.3
strictyaml (pip) ==1.7.3
tabulate (pip) ==0.10.0
toml (pip) ==0.10.2
tqdm (pip) ==4.67.3
trio (pip) ==0.33.0
trio-websocket (pip) ==0.12.2
ttfautohint-py (pip) ==0.6.0
typing-extensions (pip) ==4.15.0
ufo2ft (pip)
ufolib2 (pip)
ufomerge (pip) ==1.9.6
ufonormalizer (pip) ==0.6.3
ufoprocessor (pip) ==1.14.1
uharfbuzz (pip) ==0.54.1
unicodedata2 (pip) ==17.0.1
Files by Type (count)
Other (.glyph)
817
JSON
14
Other (.ttf)
9
Other (.woff2)
9
Other (.otf)
8
Text
7
HTML
4
Python
3
YAML
2
Other (.png)
2
Markdown
2
Other (.in)
2
Files by Type (size)
Other (.ttf)
949KB
Other (.glyph)
910KB
Other (.otf)
880KB
Other (.png)
376KB
Other (.woff2)
349KB
HTML
88KB
Other (.plist)
63KB
Markdown
45KB
Text
24KB
YAML
5KB
Python
5KB
Makefile
2KB

The LLM identified 3 files worth highlighting for reuse:

A self-contained Python script that reads sources/config.yaml and outputs variables for the Makefile. It has no external dependencies and can be reused in any project that needs to parse YAML before the Python virtual environment is ready. Demonstrates a clean pattern for decoupling build configuration from shell scripts.

file: scripts/read-config.py ↗ | tags: #configuration-parsing #build-helper

A post-clone script that renames template references (e.g., Google Fonts URL, family name) in a fresh clone of the Google Fonts project template. It is fully parameterized and can be extracted and adapted for any font project using the same template, reducing manual setup errors.

file: scripts/customize.py ↗ | tags: #project-setup #template-customization

The Makefile defines a reusable build pipeline for Google Fonts projects: building static and variable fonts via gftools builder, running fontspector QA tests, generating proof images with diffenator2, and creating documentation images with DrawBot. It is self-documenting and can be adopted by any font family following the same toolchain.

file: Makefile ↗ | tags: #build-automation #ci-pattern
Last analyzed: 2026-09-12 15:13:25.465733
Next check: 2026-09-19 15:13:25.461611
$ submit: