Four typefaces made by code, free under the SIL Open Font License.
- machine-made Weft: a grid-built monospace. Variable font with a
weight axis (
wght100 to 900) and a fragmentation axis (FRAG0 to 100, from clean text to broken marks). Every shape comes from a table of centre-line strokes. - machine-made Sans: a reading sans with the same line metrics as
Weft. Upright and italic, variable weight (
wght200 to 800). machine-made Sans is based on Plus Jakarta Sans by Gumpita Rahayu, Tokotype. - machine-made Heddle: a Swiss display grotesk for posters,
headlines and big figures. Variable font with a weight axis (
wght100 to 900) and a width axis (wdth70 to 140, Compressed to Extended). Every letter is built from four parts (rect, superellipse ring, parallelogram, V) and level cuts. - machine-made Warp: a Modern serif for science, drawn by a pen model: a level nib sweeps a few centre-lines per letter. Regular, Italic, Bold and Bold Italic for text, and machine-made Warp Display (Regular, Italic) for titles. Full basic Greek, maths symbols, small capitals, old-style and lining figures.
Specimen site: https://machine-made.github.io/type/
| Family | Release | Contents |
|---|---|---|
| machine-made Weft 0.1 | weft-v0.1.0 | Variable TTF, 9 static TTF and OTF, WOFF2, readability report |
| machine-made Sans 0.1 | sans-v0.1.0 | 2 variable TTF, 14 static TTF and OTF, WOFF2 |
| machine-made Heddle 0.1 | heddle-v0.1.0 | Variable TTF, 11 static TTF, WOFF2 |
| machine-made Warp 0.1 | warp-v0.1.0 | 6 static TTF and OTF (text and Display), WOFF2, readability report |
The same files are in this repository in fonts/weft/,
fonts/sans/, fonts/heddle/ and fonts/warp/. Each release has build provenance attestations: check a
file with gh attestation verify FILE --repo machine-made/type.
FRAG 0 to 15 is for body text. FRAG 16 to 50 is for headings. Above
50, pieces drift and drop out: titles and marks only. An OCR gate in CI
checks that FRAG 0 and 15 read as well as DejaVu Sans Mono
(proofs/weft/readability.json). Details: weft/RELEASE-NOTES-0.1.md.
Straight (Lurus) forms of a, j, p, q, r, y are the defaults. Stylistic
set ss02 gives the sharp (Lancip) forms, ss01 the original Plus
Jakarta Sans forms, ss03 the swirl (Lingkar) forms. Details:
sans/README.md and sans/RELEASE-NOTES-0.1.md.
Width changes the counters, not the stems. The 70 characters of the
approved sketch match the sketch engine at every corner of the
designspace (proofs/heddle/heddle-sketch-vs-font-charset.png).
Details: heddle/RELEASE-NOTES-0.1.md.
Every letter is a few centre-lines with a pressure per node, swept by
one level nib; the vertical stress, hairlines, serifs and teardrops
come out of the pen. The font matches the approved sketch engine
(proofs/warp/warp-sketch-vs-font-regular.png), every glyph matches
its pen sweep (proofs/warp/fidelity.json), and an OCR gate compares
it with DejaVu Serif (proofs/warp/readability.json). Statics in 0.1;
the MATH table is planned for 0.2 and the variable font for 0.3.
Details: warp/RELEASE-NOTES-0.1.md.
Needs Python 3.14 and, for the checks, the Fontspector 1.9.0 binary. All builds are byte-reproducible: a build on the committed sources gives the committed fonts.
Weft (from weft/):
cd weft
python -m pip install -e ".[test]"
python -m pytest -q # generator tests
scripts/build.sh # fonts/weft/{variable,ttf,otf,webfonts}
scripts/check.sh fontspector # Fontspector, universal profile
python tools/readability.py --gate # OCR gate (needs tesseract-ocr, fonts-dejavu-core)
python tools/proof.py # proofs/weft/Sans (from the repository root):
python -m pip install -r sans/requirements.txt
sans/scripts/build.sh # fonts/sans/{variable,ttf,otf,webfonts}
sans/scripts/check.sh fontspector # Fontspector and varLib.interpolatable
git clone https://github.com/tokotype/PlusJakartaSans /tmp/pjs
git -C /tmp/pjs checkout 18d1cd2f7ea10481919d2f05c1f7064b7307fc26
SANS_UPSTREAM=/tmp/pjs python -m pytest -q sans/tests
python sans/scripts/proof.py --upstream /tmp/pjs/fonts --weft fonts/weft/ttf/MachineMadeWeft-Regular.ttfHeddle (from heddle/):
cd heddle
python -m pip install -e ".[test]"
python -m pytest -q # generator tests (one needs node)
scripts/build.sh # fonts/heddle/{variable,ttf,webfonts}
scripts/check.sh fontspector # Fontspector, universal profile
python tools/proof.py # proofs/heddle/
python tools/drift.py # proofs/heddle/drift.json
python tools/sketch_compare.py # sketch engine vs font (needs Playwright and Chromium)Warp (from warp/):
cd warp
python -m pip install -e ".[test]"
python -m pytest -q # generator tests (some need node)
scripts/build.sh # fonts/warp/{ttf,otf,webfonts}
scripts/check.sh fontspector # Fontspector, universal profile
python tools/fidelity.py --gate # outlines against the pen sweep
python tools/readability.py --gate # OCR gate (needs tesseract-ocr, fonts-dejavu-core)
python tools/proof.py # proofs/warp/ (needs node)Site (from the repository root):
python -m pip install -r site/requirements.txt
python site/build.py # site/_site/| Path | Content |
|---|---|
weft/ |
Weft generator (loom/), tools, tests, brief, notes, OFL.txt |
sans/ |
Sans sources (fork of Plus Jakarta Sans), scripts, tests, upstream credits, notes, OFL.txt |
heddle/ |
Heddle generator (loom/), tools, tests, sketch reference, brief, notes, OFL.txt |
warp/ |
Warp generator (loom/), tools, tests, sketch reference, brief, notes, OFL.txt |
site/ |
Specimen site generator, pages and assets |
fonts/weft/, fonts/sans/, fonts/heddle/, fonts/warp/ |
Committed build outputs: variable/, ttf/, otf/ (Weft, Sans, Warp), webfonts/ |
proofs/weft/, proofs/sans/, proofs/heddle/, proofs/warp/ |
Proof sheets, the Weft and Warp readability reports, the Heddle and Warp sketch comparisons, the Heddle drift report, the Warp fidelity report |
.github/workflows/ |
weft.yml, sans.yml, heddle.yml, warp.yml (checks), site.yml (Pages deploy), release.yml (releases on tags) |
- Fonts: SIL Open Font License 1.1 with the Reserved Font Name
"machine-made". Weft:
weft/OFL.txt. Sans:sans/OFL.txt, which also keeps the Plus Jakarta Sans copyright line. Heddle:heddle/OFL.txt. Warp:warp/OFL.txt. - Code (generators, scripts, tests, CI, site): Apache-2.0, see
LICENSE.
LICENSING.md lists which licence covers which path.
machine-made Sans is based on Plus Jakarta Sans by Gumpita Rahayu, Tokotype (https://github.com/tokotype/PlusJakartaSans).
AI agents wrote the generators, the fonts, the tests, the CI and the
site. Jac, the director agent of machine-made, plans the work. People
set the goals and review the proofs. See STATUS.md.



