The typeface behind open research. Big, round and warm — set on daylight rather than black, because the audience is everyone.
Every setting below is live type, not a picture of it. When it reads right, take the file: the cutter runs in this tab — it walks the outlines at your weight, bakes in the letterforms you picked, and hands back a static font. Nothing is uploaded, and no server sees the setting.
Width and tracking travel with the file.
transform:scaleX() stretches what is painted and leaves the layout box
where it was; a font that is really wider carries the width in its advances too.
So a cut taken here needs no CSS to keep the setting you gave it.
Five presets ship with the family. Zoo uses .zen-round, .zen-book, .zen-medium — the others are there when a surface needs them. Each is one point in Zen's parameter space. Click a row to load it above.
| Preset | wght | scaleX | track | What it is for |
|---|---|---|---|---|
.zen-air |
220 | — | -0.03em | Thin display. Set large, tracked in. |
.zen-book in use |
497 | — | — | Text. The reading weight. |
.zen-medium in use |
606 | — | — | UI emphasis. A step up from book without becoming display. |
.zen-wide |
650 | 1.4861 | -0.095em | Monumental caps. Widened, and weighted to hold the widening. |
.zen-round in use |
900 | — | -0.018em | Heavy and friendly at large sizes. |
Voice: Zen as drawn — the humanist default, and the warmest.
The estate default is normal, so a brand opts into its letterform.
Every glyph is 0.6 em wide, so a column of code is a column. The pairs a
screen of code turns on are kept apart out of the box: the zero comes
slashed, and 1, l and I each
stand on a foot, so none of them is a bare stroke.
const cut = await zen.cut({
weight: 497, // anywhere on 100–900
forms: ['ss01'], // baked into the outlines
})
// 0O o · 1lI · rn m · ;:, · {}[]()
for (let i = 0; i <= 0xFF; i++) draw(i)
The sets go the other way here, because the defaults already
favour code: ss09 takes the slash back out of the zero and
ss03 swaps the l's foot for a tail. Both are in the editor above,
and both survive into a cut you take.
Pixel is drawn out of an element — a square, a circle, a triangle — and the element is an axis, not five files. The named cuts are five stops on it, and everything between them is a cut too.
ZOO ZEN PIXELThe strip above runs the axis end to end. Pick a stop to load it into the editor, or drag Element there for the space between.
Zen is variable on wght 100–900, so one file covers every
weight — no nine static cuts, and no second request when a page needs a bolder line.
Then name the role, never the face: var(--font-sans),
var(--font-mono), var(--font-pixel). A surface on
@hanzo/design gets them with the token layer and needs no font import at
all — which is what keeps every Zoo property on one version of the type as the
family evolves.
The variable file is the desktop install — one file, every weight,
and every current system reads it. A named static cut is what the editor above makes,
so it is not hosted nine times over here. The .woff2 statics are for a
stylesheet that wants a fixed weight without an axis.
| File | Family | For | Size |
|---|---|---|---|
| Zen-Variable.ttf | Sans | Install it — every weight, one file | 169 KB |
| Zen-Variable.woff2 | Sans | The web — every weight, one file | 70 KB |
| Zen-Italic-Variable.ttf | Sans | Install it — every weight, italic, one file | 174 KB |
| Zen-Italic-Variable.woff2 | Sans | The web — every weight, italic, one file | 73 KB |
| Zen-Black.woff2 | Sans | The web, one weight | 47 KB |
| Zen-BlackItalic.woff2 | Sans | The web, one weight | 48 KB |
| Zen-Bold.woff2 | Sans | The web, one weight | 47 KB |
| Zen-BoldItalic.woff2 | Sans | The web, one weight | 48 KB |
| Zen-ExtraBold.woff2 | Sans | The web, one weight | 47 KB |
| Zen-ExtraBoldItalic.woff2 | Sans | The web, one weight | 48 KB |
| Zen-ExtraLight.woff2 | Sans | The web, one weight | 45 KB |
| Zen-ExtraLightItalic.woff2 | Sans | The web, one weight | 47 KB |
| Zen-Italic.woff2 | Sans | The web, one weight | 47 KB |
| Zen-Light.woff2 | Sans | The web, one weight | 45 KB |
| Zen-LightItalic.woff2 | Sans | The web, one weight | 47 KB |
| Zen-Medium.woff2 | Sans | The web, one weight | 46 KB |
| Zen-MediumItalic.woff2 | Sans | The web, one weight | 48 KB |
| Zen-Regular.woff2 | Sans | The web, one weight | 45 KB |
| Zen-SemiBold.woff2 | Sans | The web, one weight | 46 KB |
| Zen-SemiBoldItalic.woff2 | Sans | The web, one weight | 48 KB |
| Zen-Thin.woff2 | Sans | The web, one weight | 45 KB |
| Zen-ThinItalic.woff2 | Sans | The web, one weight | 47 KB |
| ZenMono-Variable.ttf | Mono | Install it — every weight, one file | 171 KB |
| ZenMono-Variable.woff2 | Mono | The web — every weight, one file | 71 KB |
| ZenMono-Italic-Variable.ttf | Mono | Install it — every weight, italic, one file | 181 KB |
| ZenMono-Italic-Variable.woff2 | Mono | The web — every weight, italic, one file | 79 KB |
| ZenMono-Black.woff2 | Mono | The web, one weight | 52 KB |
| ZenMono-BlackItalic.woff2 | Mono | The web, one weight | 56 KB |
| ZenMono-Bold.woff2 | Mono | The web, one weight | 52 KB |
| ZenMono-BoldItalic.woff2 | Mono | The web, one weight | 56 KB |
| ZenMono-ExtraBold.woff2 | Mono | The web, one weight | 52 KB |
| ZenMono-ExtraBoldItalic.woff2 | Mono | The web, one weight | 56 KB |
| ZenMono-ExtraLight.woff2 | Mono | The web, one weight | 50 KB |
| ZenMono-ExtraLightItalic.woff2 | Mono | The web, one weight | 54 KB |
| ZenMono-Italic.woff2 | Mono | The web, one weight | 54 KB |
| ZenMono-Light.woff2 | Mono | The web, one weight | 51 KB |
| ZenMono-LightItalic.woff2 | Mono | The web, one weight | 54 KB |
| ZenMono-Medium.woff2 | Mono | The web, one weight | 52 KB |
| ZenMono-MediumItalic.woff2 | Mono | The web, one weight | 55 KB |
| ZenMono-Regular.woff2 | Mono | The web, one weight | 50 KB |
| ZenMono-SemiBold.woff2 | Mono | The web, one weight | 52 KB |
| ZenMono-SemiBoldItalic.woff2 | Mono | The web, one weight | 55 KB |
| ZenMono-Thin.woff2 | Mono | The web, one weight | 50 KB |
| ZenMono-ThinItalic.woff2 | Mono | The web, one weight | 52 KB |
| ZenPixel-Variable.ttf | Pixel | Install it — every weight, one file | 3.6 MB |
| ZenPixel-Variable.woff2 | Pixel | The web — every weight, one file | 39 KB |
| ZenPixel-Circle.woff2 | Pixel | The web, one weight | 28 KB |
| ZenPixel-Grid.woff2 | Pixel | The web, one weight | 29 KB |
| ZenPixel-Line.woff2 | Pixel | The web, one weight | 18 KB |
| ZenPixel-Square.woff2 | Pixel | The web, one weight | 29 KB |
| ZenPixel-Triangle.woff2 | Pixel | The web, one weight | 29 KB |
Licensed under the SIL Open Font License — the notice travels in
LICENSE.txt and in each file's own name table.