^ ^ ^ ^ =(o.o)= ~byakuren =(o.o)= m m m m
A bitmap font that visualises the binary representation of ASCII characters.
When programming, we work with text that is ultimately represented as binary data. Each character has an underlying numeric value in ASCII, which in turn has a binary representation. I wanted to create a font that makes this relationship visible - allowing you to literally see the binary encoding of each character as you read.
The initial approach of simply displaying bits in a grid proved unreadable. Characters merged together into an indistinguishable mass of pixels, with no clear boundaries between glyphs.
The solution was to connect the active bits with flow lines, showing their relative positions while maintaining a consistent square shape for each character. This creates a visual language where the structure of each glyph directly reflects its binary encoding.
Each ASCII character uses 7 bits. These bits are mapped to positions in a 3x3 grid:
3 2 1
6 5 4
_ X 7
The X position (bit 6) is always filled for printable
ASCII characters, providing a consistent anchor point. The
_ position is always empty, creating visual separation
between adjacent glyphs.
This layout means every character has: - A central reference point (the always-filled X) - Built-in spacing (the always-empty corner) - A predictable structure that becomes recognisable with use - A unique shape - no two characters can be identical translations of each other, since the fixed positions anchor every glyph to the same coordinates
Each character occupies a 9x9 pixel grid, with bit positions centred in their respective cells of the 3x3 layout.
Aside from the space character, which has been left blank, such that it’s sane to look at and read in the TTY, as that uses spaces for all the empty positions.
Active bits (1s) are connected to show their relationships:
###
# #
###
This “gap box” indicates the path flows around the inactive bit, not through it. Where possible, gaps are positioned centrally to maintain visual balance.
To illustrate the encoding, consider uppercase H and lowercase h:
| Character | ASCII | Binary |
|---|---|---|
| H | 72 | 1001000 |
| h | 104 | 1101000 |
Mapping H to the grid:
0 0 0
0 0 1
_ X 1
The two active bits (positions 3 and 6) are adjacent, forming a simple L-shape:
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . # .
. . . . . . . # .
. . . . . . . # .
. . . . # # # # .
. . . . . . . . .
For lowercase h:
0 0 0
1 0 1
_ X 1
Bit 5 is active but separated from bit 3 by the inactive bit 4. A gap box bridges them:
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . # # # . . .
. # # # . # # # .
. . . # # # . # .
. . . . # . . # .
. . . . # # # # .
. . . . . . . . .
Two variants are available:
The base design with single-pixel-width connections. Clean and minimal, but the thin lines can be subtle at small sizes.
Adds weight to connection endpoints, making the bit positions more visible at small sizes. Additionally ensures all pixels in each glyph are directly connected - no diagonal-only connections that leave pixels appearing to float.
the quick brown fox jumps over the lazy dog
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
bafs:the quick brown fox jumps over the lazy dog
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
bafss:the quick brown fox jumps over the lazy dog
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
All 128 ASCII characters arranged in a 32x4 grid. Control characters (0-31) and DEL (127) are displayed using the Unicode Control Pictures range (U+2400-U+241F, U+2421), which bafs/bafss include with their native control character glyphs.
Default (monospace):␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~␡
bafs:
␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~␡
bafss:
␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~␡
| Format | Description | Download |
|---|---|---|
| WOFF2 | Web font (vector) | bafs-web.woff2 |
| TTF | TrueType (bitmap) | bafs.ttf |
| OTB | OpenType Bitmap | bafs.otb |
| BDF | Bitmap Distribution Format | bafs-9.bdf |
| FNT | FreeBSD TTY | bafs.fnt |
| Format | Description | Download |
|---|---|---|
| WOFF2 | Web font (vector) | bafss-web.woff2 |
| TTF | TrueType (bitmap) | bafss.ttf |
| OTB | OpenType Bitmap | bafss.otb |
| BDF | Bitmap Distribution Format | bafss-9.bdf |
| FNT | FreeBSD TTY | bafss.fnt |
For web use, include the WOFF2 files with
@font-face:
@font-face {
font-family: 'bafs';
src: url('bafs-web.woff2') format('woff2');
}The font works best at multiples of 9px (9, 18, 27, 36…) to preserve the pixel-perfect rendering.
Copyright 2025 (~byakuren)