buena mono — a free variable monospace typeface for code and prose

A writer-first monospace typeface

buena mono is designed for the place where writing and code meet. Optimized for markdown editors, code editors, and terminals with carefully tuned ligatures, small caps, and variable weight (Thin to ExtraBold) and slant (upright to 10° italic) axes.

5406glyphs
2axes
8masters
51features
SIL Open Font License 971 languages Variable font
Appearance — Monospaced Sans Serif — Neo-grotesque Feeling — Calm Feeling — Precise Feeling — Warm Feeling — Editorial For — Code & Writing
Get the font ↓

Playground

Type anything — switch between Text and Code, sweep the weight (100–800) and slant (0 to −10°) axes, and toggle OpenType features live.

Presets
Paste the current weight, slant, size & features straight into your stylesheet.

Glyph Browser

Hover over any glyph to inspect it with metric guidelines.

A
A
Latin Capital Letter A U+0041

Design Notes

buena mono is a writer-first monospace — tuned to read comfortably across long passages of prose in markdown, while keeping code unambiguous. Every glyph sits on one fixed 618-unit cell, so columns stay aligned in editors and terminals.

Distinct by design

The characters most often confused while reading code are drawn to be told apart at a glance.

1 l I
one · ell · eye — each distinct
0 O
dotted zero vs. capital O
rn m
r⁠n never blurs into m
, . ; :
weighted punctuation, clear when small

A true italic on the slant axis

Rather than a mechanical oblique, the slnt axis runs from upright to a 10° italic voice — enough to mark emphasis and comments without straining the eye.

Upright — slnt 0
// this comment stands upright
Italic — slnt −10
// this comment leans ten degrees
Read the essay — Against Mechanical Oblique

Ask a browser for italic monospace and, more often than not, it lies to you. When a fixed-width font ships no slanted design, the renderer fakes one: it takes the upright letters and shears them a few degrees to the right. Nothing is redrawn. The curves that were tuned to sit straight now lean under a shove, the spacing that was balanced for uprights goes slightly wrong, and the result is an oblique — a mechanical slant, italic's understudy reciting from memory.

For decades that was simply the state of things. Courier had no italic at all; comments and emphasis borrowed the roman or a software skew. Even much-loved coding faces leaned on synthesized obliques long after their romans were beautiful. The terminal, the argument went, didn't need a voice for its asides.

The third screen does. A comment is not code — it is a person talking to the next person — and it deserves to look like speech, not like an accident of transformation. So buena mono draws the slant instead of faking it. The lean lives on a real slnt axis with dedicated masters across the family, spacing corrected as it goes, running continuously from upright to ten degrees. Ten is a deliberate number: enough to whisper an aside, not enough to shout over the code around it.

Because it is an axis and not a switch, the slant is yours to place — a hair of lean for a docstring, the full ten for a block of prose — anywhere on the slider, at any weight. That is the whole quiet argument: a comment is a voice, and a voice should be drawn, not sheared.

Recommended settings

Vision science puts fluent reading a touch above editor defaults (Legge & Bigelow 2011); buena mono's tall x-height earns some of that back. Readers differ — find your size in the playground.

Size — code 14–15 px
Size — writing 16 px
Line spacing 1.5

Weight Ramp

Coding Ligatures

A ligature merges two or more characters into a single shape. In code, this renders multi-character operators as one clear symbol — cutting visual noise and evening out whitespace — while the underlying text stays exactly what you typed.

159 coding ligatures via calt + 5 standard (liga) + 11 discretionary (dlig)

Arrows

Comparison

Operators

Show all 18 categories comments · pipes · slashes · tildes · assignment · brackets · and more

Comments & JSX

Arrows — Extended

Pipes & Bars

Slashes & Comments

Tildes

Assignment

Question Marks

Hash / Pound

Arrows — Exotic

Plus / Asterisk / Dollar

Brackets & Braces

Logical & Arithmetic

Miscellaneous

Extended Operators

On / Off Comparison

calt ON (default)
=> -> !== === <= >= |> :: ... ?? <> ==> <== ~> |= := ?. /// && || <=>
calt OFF
=> -> !== === <= >= |> :: ... ?? <> ==> <== ~> |= := ?. /// && || <=>

Stylistic Alternates

13 alternates across 12 stylistic sets — mix and match for your preferred coding style — plus ss13, a machine-readable mode that decomposes every ligature for OCR/verbatim contexts

ss01: single-storey a
a a
ss02: f
f f
ss03: l
l l
ss04: Rounded dots
i j i j
ss05: g open tail
g g
ss06: g ear
g g
ss07: i tailed
i i
ss08: y straight
y y
ss09: y cursive
y y
ss10: Plain Zero
0 0
ss11: Dotted Zero
0 0
ss12: r
r r

All Alternates Combined

Default
a f g i l r y 0 — Agile algorithms juggle logarithmic indices.
All stylistic sets + zero
a f g i l r y 0 — Agile algorithms juggle logarithmic indices.

Small Caps

847 mappings — smcp (457 lowercase → small caps) and c2sc (390 uppercase → small caps)

Normal
The API returns JSON
smcp
The API returns JSON
c2sc + smcp
The API returns JSON
The quick brown fox jumps over the lazy dog. Pack my box with five dozen liquor jugs. How vexingly quick daft zebras jump!

Variable Weight & Slant

Size Waterfall

Slant Spectrum

The slnt axis runs 0 to −10° for a true, upright-to-italic voice.

Weight × Slant Matrix

Box Drawing & TUI

128 box drawing glyphs — light, heavy, double, rounded, dashed, and diagonal. Ships native Powerline glyphs and is compatible with the Nerd Fonts patcher for the full 10K+ dev-icon set.

Tiling Test

Light
┌─────────────┬───────────┐ │ Build │ ✓ passing │ │ Tests │ 48/48 │ │ Coverage │ 97% │ └─────────────┴───────────┘
Double
╔═════════╦═════════════╗ ║ API ║ ● online ║ ║ Worker ║ ● online ║ ║ Cache ║ ○ degraded ║ ╚═════════╩═════════════╝
Rounded
╭──────────┬───────────╮ │ Glyphs │ 5406 │ │ Axes │ wght·slnt │ │ Features │ 51 │ ╰──────────┴───────────╯

TUI Demos

╭─ Build ──────────────────────────────────────╮ │ ✓ install deps 1.2s │ │ ✓ compile 142 modules 3.4s │ │ ◐ bundle ████████░░░░ 68% │ │ ○ optimize queued │ ╰──────────────────────────────────────────────╯
┌─ git status ─────────────────────────────────┐ │ on main ↑2 ↓0 synced │ │ M src/pages/index.astro │ │ M src/styles/global.css │ │ ?? public/fonts/Buena.woff2 │ └──────────────────────────────────────────────┘
╔═ test run ═══════════════════════════════════╗ ║ ✓ parser.test 12 passed ║ ║ ✓ render.test 8 passed ║ ║ ✗ slant.test 1 failed ║ ║ 20 passed · 1 failed · 2.4s ║ ╚══════════════════════════════════════════════╝

Directory Tree

Box-drawing glyphs render file trees cleanly — here, the .claude harness layout (agents, skills, hooks, workflows).

your-project/
├── CLAUDE.md              Instructions read every session
├── .mcp.json              Project-scoped MCP servers
└── .claude/               The harness — config + extensions
    ├── settings.json      Permissions, hooks, config
    ├── rules/             Topic-scoped instructions
    │   ├── testing.md
    │   └── api-design.md
    ├── skills/            Reusable prompts invoked by name
    │   └── security-review/
    │       ├── SKILL.md   Trigger + instructions
    │       └── checklist.md
    ├── agents/            Subagents with their own context
    │   └── code-reviewer.md
    ├── commands/
    │   └── fix-issue.md
    ├── workflows/         Scripts that orchestrate subagents
    └── agent-memory/      Subagent persistent memory
        └── <agent-name>/
            └── MEMORY.md  Maintained automatically

Code Sample

// buena mono — ligatures render inline, syntax by GitHub (light/dark)
const pipe = <T,>(x: T) => (...fns: Array<(v: T) => T>) =>
  fns.reduce((acc, fn) => fn(acc), x);

function classify(n: number): string {
  if (n !== 0 && n >= 0) return n <= 9 ? "digit" : "number";
  return n < 0 ? "negative" : "zero";
}

const mode = config?.settings?.mode ?? "default";
const node = <>{items.map((i) => <li key={i.id}>{i.label}</li>)}</>;

Braille Graphics

Braille patterns (U+2800–28FF) pack a 2×4 dot grid into a single cell, so terminals draw high-resolution graphics with them — btop, gnuplot’s dumb terminal, drawille, TUI sparklines. buena mono ships all 256, cell-aligned, so they render sharp instead of falling back to a mismatched face. It’s rare: of ~18 monospace fonts we tested, only buena and Cascadia carry the full block.

╭─ monitor ────────────────────────────────────╮ │ cpu ⠒⠒⠊⠉⠉⠒⠒⠢⠤⠤⠤⠤⠤⠔⠒⠒⠉⠉ 64% │ │ mem ⠤⠤⠤⠤⠔⠒⠒⠒⠒⠒⠒⠒⠒⠒⠊⠉⠉⠉ 81% │ │ net ⠤⠒⠒⠒⠤⠤⡠⠤⠊⠉⠉⠒⠤⢄⡠⠤⠤⠒ 2.4M/s │ ╰──────────────────────────────────────────────╯
Why it matters
Each Braille cell is a 2×4 pixel grid — plot eight “pixels” per character and a terminal renders real graphs. The cpu / mem / net sparklines to the left are live Braille. A font without the block falls back to a mismatched face and the graph breaks apart; buena keeps every cell on the same 618 grid.

Block Elements

The Block Elements range (U+2580–259F) is Braille’s blunt cousin — full and part blocks, shades and quadrants that terminals use for bars, meters, gradients and mosaics. Buena ships the whole range on the cell, so a progress bar or a shaded ramp stays flush instead of stepping.

╭─ blocks ─────────────────────────────────────╮ │ shades ░░▒▒▓▓██ light → dark │ │ eighths ▁▂▃▄▅▆▇█ ▏▎▍▌▋▊▉█ │ │ rules ▔▔▔▔▔▔ ▁▁▁▁▁▁ ▏ ▕ hairlines │ │ meter ██████████████░░░░░░ 72% │ │ mosaic ▛▜▙▟ ▚▞ ▖▗▘▝ ▀▄ ▌▐ │ ╰──────────────────────────────────────────────╯
Hex dump
╭─ hexdump ────────────────────────────────────╮ │ 00000000 62 75 65 6e 61 20 6d 6f |buena mo|│ │ 00000008 6e 6f 0a 77 72 69 74 65 |no.write|│ │ 00000010 72 2d 66 69 72 73 74 0a |r-first.|│ │ 00000018 6d 6f 6e 6f 73 70 61 63 |monospac|│ │ 00000020 65 20 66 6f 6e 74 0a |e font. |│ ╰──────────────────────────────────────────────╯

Two things a terminal does with those 32 glyphs: a meter whose last cell fills an eighth at a time, so the bar stops on the value instead of the nearest column, and a histogram two rows tall, stacking vertical eighths into sixteen steps of height.

╭─ meters ─────────────────────────────────────╮ │ fetch █████████████▊░░░░░░░░ 62.5% │ │ index ██████▉░░░░░░░░░░░░░░░ 31.2% │ │ verify █████████████████████▊ 99.1% │ ╰──────────────────────────────────────────────╯
╭─ histogram ──────────────────────────────────╮ │ ▁▃▅▆▆▄▂ ▁▃▅▇██▇▆▄▂ │ │ ▁▁▂▂▃▅▇████████▆▄▃▃▃▄▅▇███████████▆▄▃▂▂▂ │ │ 00:00 06:00 12:00 18:00 │ ╰──────────────────────────────────────────────╯

Mermaid

A Mermaid graph is monospace twice over: you write it as text, and every renderer that draws it — GitHub, Obsidian, a hundred docs sites — sets the node labels in whatever mono you give it. Left is the source; right is the same graph drawn on the cell, no renderer involved.

You write
graph LR
  A[spec] --> B{review}
  B -->|ship it| C[main]
  B -->|changes| A
The grid draws
╭──────╮ ╭────────╮ ship it ╭──────╮ │ spec │ ────▶ │ review │ ───────────▶ │ main │ ╰──────╯ ╰────┬───╯ ╰──────╯ ▲ │ changes ╰───────────────╯
You write
sequenceDiagram
  editor->>daemon: save buffer
  daemon->>fontc: compile
  fontc-->>editor: 5406 glyphs
The grid draws
editor daemon fontc │ │ │ ├─ save ───────▶│ │ │ ├─ compile ─────▶│ │ │ │ │◀┄┄┄┄┄┄┄ 5406 glyphs ┄┄┄┄┄┄┄┄┄┄┄┤ │ │ │
You write
gantt
  title       Release
  drawing     :done,   d1, 2026-01-06, 30d
  spacing     :active, d2, after d1,   21d
  hinting     :        d3, after d2,   14d
The grid draws
┌ jan ┌ feb ┌ mar drawing ██████████████░░░░░░░░░░░░░░░░ done spacing ░░░░░░░░░░░░░░██████████░░░░░░ active hinting ░░░░░░░░░░░░░░░░░░░░░░░░██████ queued

Two things to notice in the source panels. The gantt bars are block elements measured from the day counts printed beside them — thirty days of drawing, twenty-one of spacing, fourteen of hinting, on one thirty-cell track. And the edges ligate as you type them: --> closes into a single arrow, -->> into a double one, so the source already points the way the graph does.

Graphs

Everything above this point was typed. Everything below is drawn from data — mdx-graphs components that build a chart out of characters, one per cell, with no image and no canvas. It is a harder test of a monospace than any sentence: a bar only reads as a bar when every cell is exactly as wide as the last, and a year of them has to land on the same grid or the picture comes apart.

The numbers are this site’s own git log. Nothing is filled in — the quiet stretch in the middle is four months with no commits, and the one panel not drawn from this repository says so on its label.

Stat — the specimen’s own figures, set on the grid
[ at a glance ]
  • 5,406

    glyphs

    3 scripts

  • 159

    ligatures

  • 51

    features

  • 971

    languages

The palette

A chart is the one place a reader expects colour to carry the meaning. Here it doesn’t. The glyph carries the data and the colour only points at it — which is what lets these graphs survive being pasted into a terminal, a diff, or a plain-text file. Three ramps follow, for one series, two, or three; what tells the series apart is the character, not the hue.

Mono ·░▒▓█ the default — intensity, with the accent reserved for the top step
Duo █▓ two series, warm against cool
Multi █▓▒ three series — and three glyphs, which is what actually separates them

Turn the colour off and every graph on this page still reads — that is the whole point of drawing them in characters. What colour there is clears the 4.5:1 contrast floor for body text in both themes; the dashed frame is the only thing below it, because it is a rule rather than a character anyone has to read.

Density

Hundreds of values, one character each. You read the texture before you read a number.

Contributions — every day from the first commit to the last, weeks and intensity derived
[ commits ]
MarAprMayJunJulAug
MWF

243 commits

LessMore

243 contributions across 197 days. 243 commits
Uptime — one cell a day, three states (sample data)
[ sample ]

90%

6w agotoday

█ up▒ slow· down

90 percent uptime over 42 days, 6w ago to today
KPI — one number, with the weeks behind it
[ commits ]

243

since the first commit

197 days

243 since the first commit. 197 days

Series

One measure over time, where the shape of the run says more than any single point in it.

Sparkline — commits a week, scaled to the busiest one
[ per week ]

29 weeks

Sparkline with 29 points. 29 weeks
Plot — the same weeks, totalled, where a y-scale earns its keep
[ running total ]
2430
2026-022026-08
area plot, 29 points, min 0, max 243
Heatmap — a punchcard, three-hour blocks against days
[ when ]
0003060912151821
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat

LessMore

Stacked — parts of a whole, palette="multi"
[ by area ]
  • 2026-02
  • 2026-06
  • 2026-07
  • 2026-08
  • copy
  • style
  • machinery

Structure

Relationships rather than amounts — what contains what, what follows what, and what connects to what.

Tree — branch glyphs, one node accented
[ src ]
  • src/
  • components/8
  • ui/4
  • layouts/1
  • lib/19
  • pages/13
  • scripts/1
  • styles/1
Tree with 8 nodes
Timeline — the current row carries the accent
[ ancestry ]
  1. 1955Courier
  2. 1968OCR-B
  3. 2008Nitti
  4. 2014Fira Code
  5. 2026Buena Mono
Flow — nodes on a dashed arrow, one path accented
[ build ]
index.astro
React SSR
characters
global.css
Tailwind
one stylesheet
dist/
Pages
reader
Matrix — a feature table drawn in ✓ and –
[ features ]
JetBrainsiA WriterFira CodeCascadiabuena
  • Ligatures✓–✓✓✓
  • Small caps––––✓
  • Braille set–––✓✓
  • Ligature count1390125—159
  • OT features3716262451

Twelve graphs, no JavaScript — each renders at build time and ships as characters. All thirty are catalogued on their own page, with the code that drew each one.

Statusline

Block-drawing glyphs on a fixed grid make buena mono a natural fit for colored terminal statuslines, prompts, and TUIs.

[Fable 5] │ my-project git:(main*)
Context █████░░░░░ 45% │ Usage ██░░░░░░░░ 25% (1h 30m / 5h)
● Edit: auth.ts | ✓ Read ×3 | ✓ Grep ×2← Tools activity
● explore [haiku]: Finding auth code (2m 15s)← Agent status
▸ Fix authentication bug (2/5)← Todo progress

Full display

.claude | 45k/168k [████████░░] | $32/$140 [█████░░│░░] 23%
daily [██░│░░░░░░] 6/12% $21/$42 | total $324 | 5:45PM/10PM (3h 42m) | 928/min | ×2

Minimal display

.claude | $32/$140 [█████░░░░░] 23% | weekly 18% | 3h 42m

Spinner

Claude Code cycles a verb while it thinks — here are all 200, swapped in via spinnerVerbs. The spinner and text stay locked to one grid in buena mono.

Krahing… (0s · esc to interrupt)
{
  "spinnerVerbs": {
    "mode": "replace",
    "verbs": [
      "Krahing",
      "Hill-climbing",
      "Naming the wind",
      "Kwisatz-haderaching",
      "Caffeinating",
      "Reticulating splines",
      "Grokking",
      "Yak-shaving",
      "Frobnicating",
      "Bikeshedding",
      "Nerd-sniping",
      "Summoning daemons",
      // …and 188 more
    ]
  }
}

ASCII animations

Terminals have animated with nothing but characters since before they had pixels — a torus shaded in four greys, rain down the columns, a plasma field, a needle riding the meters, a build that reports itself, a graph lighting its own path, a sequence drawing itself message by message, and a machine watching itself work. All eight run on the same 618 cell, redrawn about twenty times a second as plain text you can still select.

Torus
Rain
Plasma
Levels
Build
Flow
Sequence
Monitor

Language Support

971 languages shape correctly (marks, joining, small caps), and 613 have full character-set coverage — 509 Latin, 96 Cyrillic, plus Greek, Coptic, and transliteration sets. Verified by hyperglot and shaperglot.

Latin

EnglishThe quick brown fox jumps over the lazy dog.
FrenchPortez ce vieux whisky au juge blond qui fume.
GermanFalsches Üben von Xylophonmusik quält jeden größeren Zwerg.
SpanishEl veloz murciélago hindú comía feliz cardillo y kiwi.
ItalianMa la volpe, col suo balzo, ha raggiunto il quieto Fido.
PortugueseÀ noite, vovô Kowalsky vê o ímã cair no pé do pinguim queixoso.
PolishPchnąć w tę łódź jeża lub ośm skrzyń fig.
CzechPříliš žluťoučký kůň úpěl ďábelské ódy.
HungarianÁrvíztűrő tükörfúrógép.
TurkishPijamalı hasta yağız şoföre çabucak güvendi.
RomanianÎnjurând clanța, rîdea și ștergea.
IcelandicKæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa.
DanishQuizdeltagerne spiste jordbær med fløde.
SwedishFlygande bäckasiner söka hwila på mjuka tuvor.
NorwegianBlåbærsyltetøy på kjøkkenbordet fristet den lille vårharens unge.
VietnameseƠn giời, cậu đây rồi! Tôi yêu Việt Nam.
PinyinMāmā qí mǎ mà? Māma qí mǎ mà.

Cyrillic

RussianСъешь ещё этих мягких французских булок, да выпей же чаю.
UkrainianЖиття надто прожити так, щоб не було боляче соромно.
BulgarianБързата кафява лисица прескача над ленивото куче.
Serbian (Cyrillic)Лијеп је овај свијет и вриједи за њ живјети.
KazakhҚазақ тілі — қазақ халқының ана тілі.

Greek

GreekΤαχίστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός.

Metrics & Coverage

Glyphs
5406
ASCII + Latin + Cyrillic + Greek + Polytonic + Braille + Combining + Box + Powerline + Small Caps + Ligatures
Axes
2
wght 100–800, slnt 0 to −10°
Masters
8
Thin, Regular, Bold, ExtraBold — upright + slanted
Features
51
liga, calt, dlig, smcp, c2sc, ss01–13, cv01–13, subs, sups, sinf, numr, dnom, tnum, frac, ordn, case, zero, onum, locl, aalt, ccmp, mark, mkmk
Languages
971
971 shaped correctly (shaperglot) · 613 with full character coverage (hyperglot)
Output
3
TTF (2.2 MB), WOFF2 (686 KB), OTF/CFF2 (997 KB)

Figures verified by our technical reports — fontspector (Google Fonts QA), shaperglot, hyperglot, and interpolatable.

Metrics

MetricValue
Units per Em1000
Advance Width618
Cap Height699
x-Height524
Ascender — line (hhea/typo)950
Descender — line (hhea/typo)-250
Ascender — em-box (design)729
Descender — em-box (design)-218

Variable Axes

AxisTagRangeDefault
Weightwght100–800400
Slantslnt0 to −100

OpenType Features

FeatureTagCount
Standard Ligaturesliga5
Coding Ligaturescalt159
Discretionary Ligaturesdlig11
Small Capssmcp457
Caps to Small Capsc2sc390
Slashed Zerozero1
Stylistic Setsss01–ss1213
Character Variantscv01–cv1313
Oldstyle Figuresonum10
Tabular Figurestnum10
Subscriptssubs10
Superscriptssups10
Scientific Inferiorssinf10
Numerators / Denominatorsnumr / dnom20
Fractionsfrac9
Ordinal Indicatorsordn2
Case-Sensitive Formscase7
Localized Formslocl3
Composition/Decompositionccmp—
Mark Positioningmark—
Mark-to-Mark Positioningmkmk—
Access All Alternatesaalt—

Technical Reports

Automated quality assurance on the variable font. View all →

How It Compares

How buena mono stacks up against popular open-source monospace families.

MetricJetBrainsiA WriterFragmentFira CodeNoto SansIBM PlexGeistCascadiabuena
Cap Height730698699687714698710693699
x-Height550516524525536516530518524
Advance Width600600600600600600600586618
Coding Ligatures139040+125000Yes159
Small CapsNoNoYesNoYesNoNoNoYes (923)
Weights8426914958 + italics
OpenType Features371618261716232451
ScriptsLat+CyrLat+CyrLatinLat+Cyr+GrLat+Cyr+GrLat+CyrLat+CyrLat+Cyr+ArLat+Cyr+Gr
Languages354391284393619393373507613
Braille patternsNoNoNoNoNoNoNoYes (256)Yes (256)
618
Why a 618-unit advance? Almost every coding monospace sits on a 600-unit cell. buena mono is a touch wider on purpose: the extra room lets box-drawing, block elements, the full Braille set, and Powerline glyphs tile edge-to-edge without subpixel rounding at common screen densities — and gives prose a little more breathing space. The trade is a few fewer columns per line; in return, tables, TUIs, and terminal graphics line up cleanly instead of fraying.

Cap height, x-height, advance, feature counts, small caps, scripts, and language counts are measured directly from each family’s current release (fontTools + hyperglot), normalized to a 1000-unit em. Coding-ligature and weight counts are from published specs. buena mono’s figures are cross-checked by our technical reports.

Grounded in reading science

buena mono's design decisions are informed by peer-reviewed research on legibility, monospace reading, and type for machine readers.

Design informed by these findings — buena mono itself was not a subject of these studies. See the technical reports for evidence pages generated from the font itself.

A monospace timeline

A brief history of fixed-width type — from the typewriter (Sholes & Glidden, 1874) and IBM’s Courier, through the Swiss grotesques, to the modern coding canon. Dimmed rows are proportional sans-serifs, not monospaces.

1955
Courier Mono · typewriter slab
IBM · Howard Kettler
The archetypal monospace — drawn for IBM's typewriters, later the terminal & screenplay default.
1956
Letter Gothic Mono · typewriter grotesque
IBM · Roger Roberson
A cleaner, sans-adjacent typewriter mono for the IBM Selectric (drawn 1956–62).
1957
Univers Sans · neo-grotesque
Deberny & Peignot · Adrian Frutiger
Modeled on Akzidenz-Grotesk; the numbered-superfamily blueprint.
1968
OCR-B Mono · machine-readable
Adrian Frutiger
The human- and machine-readable ISO standard — the same Frutiger who drew Univers.
1987
Nimbus Sans Sans · neo-grotesque
URW
A metric Helvetica clone.
2004
Consolas Mono · humanist grotesque
Microsoft · Lucas de Groot
The ClearType coding mono, first widely-hinted for screens — presented 2004, shipped 2007 with Vista & Office.
2006
Inconsolata Mono · humanist
Raph Levien
One of the first quality open-source code fonts; after Consolas + Letter Gothic.
2008
Nitti Mono · humanist grotesque
Bold Monday · Pieter van Rosmalen
iA Writer's original font — the writer-first mono seed.
2009
Menlo Mono · grotesque
Apple · Jim Lyles
Built on Bitstream Vera / DejaVu; Apple's Terminal font before SF Mono.
2010
PragmataPro Mono · ultra-condensed programming
Fabrizio Schiavi
Narrow programming mono, extending Pragmata (2001) — the lineage Iosevka builds on.
2011
Suisse International Sans · neo-grotesque
Swiss Typefaces · Ian Party
Contemporary Swiss grotesque in the Helvetica / Univers line.
2012
Source Code Pro Mono · grotesque
Adobe · Paul D. Hunt
Mono cut of Source Sans; Adobe's open superfamily.
2012
GT Pressura Mono Mono · ink-trapped grotesque
Grilli Type
Fixed-width Pressura — stamped / packaging lettering.
2012
Pitch Mono · typewriter slab
Klim · Kris Sowersby
A love letter to the typewriter; matches Courier's dimensions.
2012
Ensba Mono Mono · identity
ENSBA Lyon · Alex Chavot
Bespoke art-school identity face (date approximate).
2013
ABC Diatype Sans · neo-grotesque
Dinamo · Breyer & Harb
First shown 2013 as Diatype; the full ABC Diatype family shipped 2020. Swiss neo-grotesque; parent of ABC Diatype Mono.
2013
Courier Prime Mono · typewriter slab
Quote-Unquote · Alan Dague-Greene
A modern Courier revival for screenwriting.
2014
SF Pro Sans · neo-grotesque
Apple
Debuted as San Francisco (renamed SF Pro in 2017) — Apple's first in-house type in ~20 years; parent of SF Mono.
2014
Fira Code Mono · humanist + ligatures
Nikita Prokopov
Fira Mono + programming ligatures — started the ligature wave.
2014
Rubik Sans · rounded geometric
Google Creative Lab
Rounded grotesque (UI reference, not a mono).
2014
Roboto Mono Mono · neo-grotesque
Google · Christian Robertson
Monospaced member of Roboto.
2015
Iosevka Mono · narrow grotesque / slab
be5invis
Generated 'from code'; after PragmataPro.
2015
Hack Mono · humanist
Chris Simpkins
Extends DejaVu Sans Mono.
2016
Space Mono Mono · display
Colophon for Google Fonts
Eurostile / Microgramma sci-fi headline mono.
2016
SF Mono Mono · neo-grotesque
Apple
Monospaced cut of San Francisco; Terminal / Xcode.
2016
GT America Mono Mono · grotesque
Grilli Type · Noël Leu
US-gothic × European neo-grotesque bridge.
2016
Noto Sans Mono Mono · unmodulated sans
Google / Monotype · Steve Matteson
Mono cut of the pan-Unicode Noto superfamily.
2017
IBM Plex Mono Mono · neo-grotesque
IBM w/ Bold Monday · Mike Abbink
Base outlines for iA Writer's monos.
2017
Inter Sans · neo-grotesque (UI)
Rasmus Andersson
Screen-grotesque; the modern UI default.
2018
ABC Diatype Mono Mono · neo-grotesque
Dinamo
The monospaced cut of ABC Diatype.
2018
iA Writer Mono Mono · duospace
iA (Information Architects)
Built on IBM Plex; descends from Nitti. Coined 'duospace'.
2019
Cascadia Code Mono · sans + ligatures
Microsoft · Aaron Bell
Shipped with Windows Terminal; follows Fira Code.
2019
Söhne Mono Mono · neo-grotesque
Klim · Kris Sowersby
Akzidenz-Grotesk 'through the reality of Helvetica'.
2019
Recursive Mono ↔ sans · variable
Arrow Type · Stephen Nixon
5-axis variable — conceptual predecessor of Monaspace.
2019
Victor Mono Mono · grotesque + cursive
rubjo · Rune Bjørnerås
Signature cursive italics + ligatures.
2020
JetBrains Mono Mono · + ligatures
JetBrains · Nurullin & Bulenkov
A fresh design; default JetBrains IDE font.
2020
JuliaMono Mono · grotesque
cormullion
Exhaustive scientific / math Unicode coverage.
2021
Berkeley Mono Mono · retro-computing grotesque
US Graphics · Neil Panchal
'Frutiger visits Bell Labs'; premium dev font.
2022
Fragment Mono Mono · 'Helvetica mono'
URW · Wei Huang
Monospaced Nimbus Sans.
2023
Geist Mono Sans / Mono · neo-grotesque
Vercel · Andrés Briganti
Swiss-influenced dev-brand face.
2023
Monaspace Mono · variable superfamily
GitHub Next · Lettermatic
Five voices + 'texture healing'.
2023
Commit Mono Mono · neutral grotesque
Eigil Nikolajsen
Cites Fira Code + JetBrains; parametric builds.
2023
Intel One Mono Mono · accessibility grotesque
Intel · Frere-Jones Type
Low-vision-focused, strongly disambiguated glyphs.
2024
Departure Mono Mono · pixel / bitmap
Helena Zhang
A lo-fi pixel font — its own branch.
2024
Sharp Earth Mono Mono · geometric grotesque
Sharp Type · Lucas Sharp
Mono cut of Sharp Earth (date approximate).
2026
Buena Mono Mono · writer-first neo-grotesque
Buena
A writer-first neo-grotesque — free, open-source, variable, with coding ligatures.

Frequently
asked questions

[ 01 ] Is buena mono really free?
Yes. It’s released under the SIL Open Font License 1.1 — free for both personal and commercial use.
[ 02 ] Can I use it in a commercial product, app, or website?
Yes. Bundle it, self-host it, or embed it — no fee and no attribution required.
[ 03 ] Do I have to credit Buena?
No, but we’d appreciate it very much if you do.
[ 04 ] Can I modify it or build my own font from it?
Yes, under the OFL: keep derivatives under the OFL and don’t sell the fonts on their own.
[ 05 ] Can I use it in a logo?
Yes.
[ 06 ] How many languages does it support?
971 languages shape correctly — marks, joining, and small caps verified per language (shaperglot); 613 have full character-set coverage (hyperglot: 509 Latin, 96 Cyrillic, plus Greek and Coptic). See the hyperglot and shaperglot reports.
[ 07 ] Is it production-ready and tested?
It runs the full Google Fonts QA profile — 200 checks via fontspector — plus build-consistency, interpolation, and language checks. Every report is published under Technical Reports so you can see exactly what passes.
[ 08 ] Does it work as a variable font?
Yes — two axes (weight 100–800, slant 0 to −10°) across 8 masters. A handful of decorative shade and arrow glyphs are still being reconciled for perfect interpolation; the interpolatable report tracks them.
[ 09 ] Which weight should I use in dark mode?
Light-on-dark text reads optically heavier and measures worse at a glance (Sawyer et al. 2020, Ergonomics). Because weight is a variable axis, compensate with one setting: drop 25–50 weight units in dark themes — e.g. font-variation-settings: "wght" 360 where you’d use 400 on a light background. A dedicated grade (GRAD) axis is on the roadmap.
[ 10 ] Can machines (OCR, screen readers, AI) read it reliably?
We measure it: the machine-readability report scores OCR and vision-model accuracy on rendered text down to 9px. One caveat: coding ligatures (!= rendering as ≠) can confuse OCR — for verbatim/machine-read contexts enable ss13 (machine-readable mode), which decomposes every ligature back to its plain characters: font-feature-settings: "ss13" 1.
[ 11 ] Does it do Braille and terminal graphics?
Yes — the complete Braille Patterns block (U+2800–28FF, 256 glyphs) on the 618 cell. That’s rare in coding fonts: of ~18 we tested, only buena mono and Cascadia Code carry the whole block. Because each cell is a 2×4 dot grid, terminal tools (btop, gnuplot, drawille) use Braille for high-resolution plots and sparklines — and with the full set weight-matched to the family, they line up instead of falling back to a mismatched face.

Buena in the wild

Buena where it earns its keep — a chessboard, chord charts, a countdown, a knowledge graph, a camera readout. Every one is just aligned monospace text and block elements.

Games

Letter and word games live or die by the grid. buena mono's fixed 618-unit advance means every glyph fills the same cell — so cryptograms stack, ladders align, tiles tile, and columns stay honest at any length, with no per-glyph fitting. A few mechanics where the monospace is the mechanic:

Cryptogram cipher_substitution
YB
FU
VE
MN
ZA
NM
LO
MN
LO
Cipher letter locked directly above its solution — only a monospace keeps the two rows in register.
Word ladder word_ladder
COLD
CORD
CARD
WARD
WARM
COLD → WARM, one letter per step. Equal-length words align, so the change pops for free.
Word guess word_guess
CRANEBEGUNBUENA
Uniform letter widths give uniform tiles — no per-glyph fitting. Answer: BUENA.
Word search word_search
BFKPRTWQLUCMNDGHVSEYZJXAOIWNBUKRTQLPAMOECDFGHIJKZMONOVWXABCDEFGH
BUENA on the diagonal, MONO across — every glyph sits on the same square lattice.
Sudoku sudoku
537619598686348317266284195879
Tabular digits line up by construction; ss10 / ss11 add a dotted or slashed zero for 0-vs-O.
Letter tiles anagram · rewordable
AENUB
↓
BUENA
Uniform tiles rearrange cleanly; smcp small caps (923) give a tile face without a second font.
Crossword crossword
1 H
2 E
3 A
4 R
5 T
6 E
M
B
E
R
7 A
B
U
S
E
8 R
E
S
I
N
9 T
R
E
N
D
Every letter shares one cell, so across and down stay locked — here a 5×5 where each row and column is a word.
Word tile word_tile · prose
everywordisatile
Whole-word tiles: each is an exact multiple of the cell, so prose snaps to the grid without ragged seams.
Spelling bee spelling_bee
BU
EAN
RT
Seven letters, one hive — every glyph centres in its cell the same way a monospace tabulates a column.
Word grouping word_grouping · word_connect
THINBOLDBOOKHAIRSERIFSTEMBOWLTAILLIGASMCPFRACZEROSLNTWGHTAXISVARY
Sixteen tiles, four hidden groups. Equal cells keep the grid legible while you regroup — the monospace does the bookkeeping.
Anagram tower anagram_tower
A
AS
SAT
EATS
STEAM
Each row is the one above plus a letter, re-sorted into a new word — uniform widths keep the pyramid centred.
Word chain word_chain
FONT
TYPE
EDIT
TEXT
Each word starts where the last ended; offset by one cell, the shared letters stack into a single column.
Cryptic crossword cryptic_crossword
Church basin turns out type (4)
1F
O
N
T
A clue and its enumeration; the answer drops into equal cells, the count in parentheses matching the grid exactly.
Letter shift letter_shift
TBM
AUO
IER
DNS
OAE
Columns slide until one row spells a word — the mechanic only works because a fixed advance holds every column in vertical register as it moves.
Kriss kross kriss_kross
FACEONT
FACE
FONT
TYPE
No clues — only crossings. A bank word is exactly as wide as the slot it fills, so the fit is something you see rather than count.
Wander words wander_words
ONECEGLYPLYEDHLRPYTFEVERO
ONECELLFOREVERYGLYPHTYPED
A quote spirals in from the top-left, words running on with no gap. The path turns four corners and stays continuous only because every cell is the same size.
Also a natural fit — crosswordlingspiralrows_gardenshuffaloword_associationword_cardtrivianame_drop

Board Games

Solitaire

A 52-card deck — four suits, thirteen ranks. Rank and pip share the same cell, so cards stack and the columns of a tableau stay aligned.

♠ Spades
♥ Hearts
♦ Diams
♣ Clubs
K♠
Q♥
J♣
10♦
A2345678910JQK
Foundations build up by suit; the tableau builds down in alternating colours — K♠ Q♥ J♣ 10♦.

Chess

The Ruy Lopez — and five more classic openings below. Board, pieces, and coordinates align by construction.

8
♜
♝
♛
♚
♝
♞
♜
7
♟
♟
♟
♟
♟
♟
♟
6
♞
5
♝
♟
4
♟
3
♞
2
♟
♟
♟
♟
♟
♟
♟
1
♜
♞
♝
♛
♚
♜
a
b
c
d
e
f
g
h
1.e4e5
2.Nf3Nc6
3.Bb5
Ruy Lopez

Go

A 9×9 goban — stones sit on the line crossings, and the box-drawing grid, the star points and the black and white stones all share one cell.

┌
┬
┬
┬
┬
┬
┬
┬
┐
├
┼
⚫
┼
⚫
┼
⚫
┼
┤
├
⚫
⚫
⚫
┼
⚫
⚫
┼
┤
├
┼
⚫
⚫
┼
⚫
┼
┼
┤
├
┼
┼
⚫
╋
┼
┼
┼
┤
├
┼
⚫
⚫
┼
⚫
⚫
┼
┤
├
⚫
╋
⚫
⚫
┼
⚫
┼
┤
├
┼
⚫
┼
⚫
⚫
┼
┼
┤
└
┴
┴
┴
┴
┴
┴
┴
┘

Draughts

An 8×8 board — men and kings on the dark squares, each disc centred in its cell the same way a chess piece is.

⛂
⛂
⛂
⛃
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛂
⛃
⛂
⛂
⛂
⛂

Music

Not a notation engine — a monospace for writing about music: chord charts, lead sheets, tempo and key marks that stay aligned in plain text. The seven Unicode music symbols render on Buena’s fixed cell.

♩ quarter
♪ eighth
♫ beamed
♬ sixteenths
♭ flat
♮ natural
♯ sharp

Notation marks — clefs, time signatures, rests, and chord-chart navigation marks (SMP Musical Symbols):

𝄞 treble
𝄢 bass
𝄴 common
𝄵 cut
𝄻 whole rest
𝄼 half rest
𝄽 quarter rest
𝄋 segno
𝄌 coda
𝄐 fermata
𝄆 repeat
𝄇 repeat
Tempo ♩ = 120 · key of B♭ major · an F♯ diminished chord · a C♮ — accidentals sit inline with running text.

Numbers

Tabular figures lock every digit to one width — timers, counters and calculators update with zero reflow, no flicker as the numbers change. Each of these runs on Buena’s digits:

Countdown · stage timer
05:00
Stopwatch · laps
00:00.00
Clock
00:00:00
—
Calculator
0
Ledger · balance sheet
Revenue 12,480.00 +4.2%
Licenses 3,905.50 +1.1%
Refunds -214.00 -0.3%
Hosting -88.75 -2.0%
Total 16,082.75
Number bases
DECHEXOCTBIN
80801000001000
161002000010000
422A05200101010
255FF37711111111
Braun clock
12369

Travel

A boarding pass is a monospace document — flight numbers, gates, seats and times land on a fixed grid so a scanner (and a traveller) read them at a glance. Codes align, columns stay honest, and the barcode packs into even cells. Four ways to leave:

FLIGHT BUENA AIR
EZE → JFK
FLIGHTBU 2026
GATEA17
SEAT14C
BOARD08:40
▏▊▎▉▍▏▋▊▎▏▍▉▎▏▊▍▎▏▋▉▎▍▏▊▎▏▉▍▎▏▋▎▏▊▍▎
TRAIN BUENA RAIL
MIL → ROM
TRAINBU 9612
PLATFORM7B
COACH · SEAT04 · 21A
DEPART08:40
▏▊▎▉▍▏▋▊▎▏▍▉▎▏▊▍▎▏▋▉▎▍▏▊▎▏▉▍▎▏▋▎▏▊▍▎

Departures

TIMEFLIGHTDESTINATIONGATESTATUS
08:40 BU 2026 NEW YORK JFK A17 BOARDING
09:05 BU 118 LONDON LHR B02 ON TIME
09:20 BU 447 TOKYO HND C11 DELAYED
09:35 BU 903 SÃO PAULO GRU A04 GATE OPEN
10:10 BU ∞09 MARS · LEO K3 SCHEDULED

Connected notes

Buena reads just as well in a knowledge graph. Hover a note to light up its backlinks — labels stay crisp at any node size, the way they would in a notes app.

Camera display

A camera’s top LCD and viewfinder is a monospace grid — shutter, aperture, ISO and exposure aligned to the cell, with block-element gauges. Pick a body to switch the readout:

M Hi+ AF-C MULTI SONY α α7 IV
1/250SHUTTER
F2.8APERTURE
ISO 400SENSITIVITY
+0.3EXPOSURE
−3▁▁▁▁▁▁▁█▁▁▁▁▁+3
█████████░ 87% WB AWB [ 1024 ]

Human & machine, in color

Borrowed words carry color, your own stay plain — the writer-with-AI workflow buena mono is drawn for. Or turn on Show Syntax to recolor the prose by part of speech.

In the library that contains every possible book, a man searches for the one volume that indexes all the others. Each gallery mirrors the last; each corridor forks into two identical corridors; and the catalog, when at last he finds it, lists only his own name and the hour of his reading. He begins to suspect that the library is infinite, that he is a single sentence written somewhere inside it — and that in a distant hexagon another reader is patiently trying to correct him.
— after J. L. Borges · The Library of Babel
Read the essay — Borrowed Words, Plain Words

There is a particular unease in reading a sentence you did not write, set in a font you chose. The machine's prose arrives fluent and confident and slightly not-yours, and the eye keeps looking for the seam. Most tools solve this by fencing the borrowed text off — a grey box, a different family, a footnote's worth of visual demotion — which quietly says the machine's words are a lesser kind of writing. On the third screen, where your draft and its suggestions share one document, that hierarchy is a lie you have to read past all day.

buena mono takes the opposite bet. Keep everything in one face, at one size, on one width, and let a lighter signal carry the distinction. Borrowed words take a wash of color; your own stay plain. The type stops refereeing which sentence is more legitimate and goes back to its real job, which is being legible and calm while you decide.

The colour, when you turn on Show Syntax, isn't decoration — it is the same idea pointed at grammar. Nouns, verbs, adjectives, each get a hue, so a paragraph reveals its parts of speech the way a code editor reveals a syntax tree. It is a small, honest way of admitting that all of this — the prose and the program — is structured language, and that a machine reading over your shoulder is parsing it too.

A warm, quiet monospace turns out to be the right neutral ground for that meeting. Not because it flatters the human or the model, but because it refuses to rank them — same face, same measure, one of them merely tinted — and leaves the judgement where it belongs, with the person doing the writing.

For Humans & Machines

buena mono is built for both human-authored prose and machine-generated text.

Human writers
Writer-first letterforms tuned for extended prose in markdown — a tall x-height, open counters, markdown-aware punctuation, and restrained ligatures that enhance without distracting.
Machine writers
Optimized for AI code output, terminals, and programmatic text — tabular figures, a full box-drawing and block set, native Powerline, and distinct diff glyphs so logs, tables, and TUIs line up.

Writer-first

We used to have two screens — one for prose, one for code. Now there is a third, where both happen at once: the markdown file with AI suggestions in the margin, the commit message that reads like a sentence, the journal kept in a repo.

Most monospaces are still drawn for the terminal. buena mono is drawn for that third screen. A tall 524-unit x-height keeps long prose comfortable; a true 10° italic gives comments a voice instead of a mechanical lean; and 159 restrained ligatures clean up code without hiding what you typed. Every glyph sits on one fixed 618-unit cell, so a letter to a friend and a regular expression occupy the same measure of space — and columns never drift.

Read the essay — The Third Screen

There were two screens once, and they never met. One was for prose: the typewriter, then the word processor, then the blank page that wanted paragraphs. The other was for code: the terminal, green on black, then the IDE with its gutters and folding. You wrote a letter in one and a loop in the other, and the fonts kept the border honest — a warm serif for the human, a cold fixed-width for the machine.

Anyone who has kept a journal in a repo knows the border is gone. The file open right now is markdown with a model whispering completions in the margin; the commit message underneath it is a sentence you'd be happy to read aloud; the doc is half specification, half diary. This is the third screen, and it isn't a place either old font was drawn for. Set that markdown in a terminal face and the prose feels clenched. Set the code in a book face and the columns fall apart.

buena mono is an argument that one face can hold both. The proportions are tuned for reading — a 524-unit x-height, open counters, punctuation weighted to survive at small sizes — while every glyph still answers to a single 618-unit cell, so a paragraph and a stack trace measure the same width and nothing drifts. Emphasis lives on a drawn slant instead of a fake one; operators resolve into clean ligatures without hiding a keystroke.

The claim is small and stubborn: the writing and the code now happen in the same document, so they deserve the same voice — calm enough for the letter, exact enough for the regex, and one width for both.

// Community

devs love it.
writers, too.

Get Buena Mono

Free and open source under the SIL Open Font License 1.1. Download the variable font, or grab a tagged release from GitHub.

Use on the web

@font-face {
  font-family: "Buena Mono";
  src: url("BuenaMono-VF.woff2") format("woff2");
  font-weight: 100 800;
  font-style: oblique 0deg 10deg;
}
/* slant lives on the slnt axis (0 to -10): */
.slanted { font-variation-settings: "slnt" -10; }

Install

macOS
Open BuenaMono-VF.ttf and click Install Font, or drop it into Font Book.
Windows
Right-click BuenaMono-VF.ttf and choose Install.
Linux
Copy to ~/.local/share/fonts/ and run fc-cache -f.

More ways to install

Install via NPM Recommended

Best for build pipelines — ships the full glyph set with font-feature-settings support.

npm i buena-mono

Then self-host the woff2, or import it in your CSS.

Use from Google Fonts

Quick setup for the web. Does not yet include the full glyph set or font-feature-settings.

@import url("https://fonts.googleapis.com/css2?family=Buena+Mono");

Note — Buena Mono will be available on Google Fonts soon.

Features by installation method
FeatureNPMGoogle FontsDownload
font-feature-settings✓ Yes✗ No✓ Yes
Full glyph set (5406)✓ Full△ Partial✓ Full
Variable axes (wght + slnt)✓ Yes△ Limited✓ Yes
Automatic updates✓ via npm✓ via Google✗ Manual
Self-hosted✓ Yes✗ No✓ Yes
Get the .zip Download ↓

Manually download otf, woff2, and variable font files — the full glyph set with font-feature-settings.

Licensed under OFL. Use it on your sites and projects.

Source & docs: github.com/buenagames/buena-mono  ·  Google Fonts listing coming soon.

Credits

Designed by
Buena
License
SIL OFL 1.1
free for commercial & personal use
Version
v1.235