
I made a typeface. It's called CooperPixel, it has two weights, it covers all of Basic Latin, and you can download it from the catalogue. It's free for any use, including commercial.
This is a small gift to the design community. I learned this craft from free fonts, free tutorials, free icon sets, and from designers showing their process in public. I want to keep adding to that pool.
Why a pixel font
The original brief I gave myself was "geometric, terminal style monospace, two weights." I had a vague picture in my head of something between Berkeley Mono and Departure Mono. I sat down with Python and the fontTools library and started drawing every glyph as a set of strokes and curves, expanding stroke widths into outlines on the fly.
It looked terrible.
The bezier approach broke whenever I tried to "carve" an opening into a ring (think C, S, e, G). The non-zero winding fill rule meant my carving rectangles also undid the inner counters, so the shapes filled in weird places. Half my letters rendered as blobs. I spent an hour debugging contour orientation before I realised I was pulling on a thread that goes very deep.
I switched to bitmaps.
The design
Every glyph is a 9 row by 5 column grid of dots, like an Atari font. Each ON pixel renders as a square. The whole font lives in one Python file. If you want to fix a letter, you edit a string of dots and hashes:
A: i:
.###. .....
#...# .#...
#...# .....
##### ##...
#...# .#...
#...# .#...
#...# ###..
You can read the source like sheet music. No glyph editor, no UFO files, no .glyphs project.

Two weights from one bitmap
The trick that gives CooperPixel its second weight without a separate Bold design: the rendered square is bigger than the grid spacing.
The grid is on a 100 unit pitch. Regular renders each ON pixel as a 100x100 square (no overlap, sharp corners). Bold renders the same pixels at 140x140 (40 units of overlap with each neighbour). Adjacent pixels merge into solid strokes.
One bitmap, two weights, no separate design.


Adding a third weight is one more line of config.
The "i" problem
Pure pixel monospace inherits a problem: characters like "i" have one column of stem in a five column cell, so they look stranded next to letters that fill all five. I tried bias tricks (push the stem right, add asymmetric serifs) but every fix that helped one word broke another.
In the end I broke strict monospace. Slim glyphs (i, l, !, ., ,, :, ;, ') get a 400 unit advance instead of 600. Code alignment is no longer pixel perfect, but words read naturally. A trade I'd make again.
Strict monospace is a programmer convention, not a design law. Break it where the eye says to.
What's in the box
95
glyphs (Basic Latin)
2
weights
4
formats
OFL
licensed
OTF, TTF, WOFF, WOFF2 across both weights. WOFF2 for the web (under 2 KB per weight, smaller than a small JPEG). OTF and TTF for desktop install. WOFF for older browsers.
It ships under the SIL Open Font License 1.1, the same license that Inter and Cooper Hewitt use. You can:
- Use it commercially, in client work, in products, anywhere.
- Modify it, fork it, make it your own.
- Embed it in apps, games, PDFs, ebooks.
- Redistribute it bundled with your software.
You can't sell the font file by itself, and a derivative needs a different name. That's it.
A small ask
Go and make something with it. A poster, a personal site, a band logo, a Game Boy mockup, a fanzine, your CV. Anything.
If you do, I'd love to see it. Post it with #cooperPixel and tag me on X at @0xCoops. I will be quietly delighted.
Help me make it better
This is v0.1. It's deliberately small (Basic Latin only, two weights, a handful of opinionated decisions). I'd love to take it further with help from you.
Things I'm open to:
- More glyphs. Latin Extended for Swedish, French, German, Polish. Greek. Cyrillic. Currency symbols. Mathematical operators. Ligatures for code (=>, !=, ->). If your language or your code editor needs something it doesn't have, tell me.
- Tweaks to existing glyphs. Disagree with my "i" trade-off? Think the "g" should be double-story? The "Q" tail should swing wider? Open an issue or post on X with a screenshot of what's bugging you.
- More weights. Currently Regular and Bold. Light and Black are one config line away.
- Italic. Pixel italics are mostly a slant transform, but it would benefit from per-glyph attention.
Best ways to reach me: tag @0xCoops on X, or open an issue on the GitHub repo. Pull requests welcome.