CADR Mono: A Monospace Programming Font Generated via Common Lisp
A programmatic typeface featuring 935 glyphs and algorithmic box drawing capabilities.
1Algorithmic Font Generation
CADR Mono is a monospace typeface for terminals and code, generated entirely from Common Lisp. Unlike traditional font design, every glyph functions as a pure function of parameters defined in src/params.lisp. This approach eliminates drawn outlines and removes the need for a standard font editor within the development loop.
2Technical Design Specifications
The project includes 935 glyphs across eight static font files, utilizing a 2048 em grid with an advance of 1229. It supports 39 European languages, including Latin Extended, Greek, and Cyrillic sets. The typeface is licensed under the SIL Open Font License 1.1, ensuring broad accessibility for developers and terminal users.
3Grade and Theme Optimization
The family features two distinct grades: CADR Mono for light themes and CADR Mono Dark for dark backgrounds. The dark version reduces stem weight from 180 to 164 while maintaining identical advances and vertical metrics. This design choice ensures that swapping themes never causes column reflows in terminal environments.
4Computed Box and Braille
Box drawing, blocks, and braille characters are computed directly from the cell metrics. Rules reach cell edges to meet across boundaries, with junction arms overrunning by half the crossing rule's weight. Notably, these elements do not slope in italic mode, ensuring that italic terminals continue to draw straight, consistent boxes.
5Italic and Powerline Support
The italic variant is explicitly drawn rather than slanted. Six specific letters are reshaped: the 'a' becomes single-storey, 'f' gains a descender, and 'k', 'v', 'w', and 'y' are redrawn. Additionally, Powerline separators are generated from the same cell metrics as the box drawing, ensuring alignment across various terminal status line configurations.
6Hinting and Rendering Details
The font is hinted using ttfautohint. At 13px, a whole pixel corresponds to 158 units, with horizontal strokes set at 147 units. Above 13px, manual instructions are ignored in favor of hintslight, which provides better rendering results. This ensures clarity across different screen densities and terminal emulator font rendering engines.
7Nerd Fonts Integration
Users can generate a Nerd Font build using the provided Makefile, which supports 11,130 codepoints. This build pins to Nerd Fonts v3.5.1, though Font Logos and Pomicons are excluded due to licensing conflicts. Any distribution of this build requires shipping the src/nerdfont/LICENSES/ directory to maintain compliance with upstream attribution requirements.
8Development and Tooling
Designed by Anthony Green, the project relies on fontmake, ttfautohint, and SBCL for its build pipeline. By treating typography as code, the project demonstrates a unique intersection between Lisp programming and font engineering. It serves as a functional tool for developers seeking precise control over their terminal's visual presentation and character rendering.