Blog · Dyslexia & code
Reading code with dyslexia
Almost every guide to dyslexia-friendly typography quietly assumes you're reading prose. Code is a different problem. A function name is not a word you can skim; a misread l for a 1 can cost an hour of debugging. The fonts and tweaks that help with a news article don't always help with a pull request — and some of them actively hurt. This is a practical guide to what works.
Why code is harder than prose
Fluent reading of prose is pattern-matching at the word level. Your eye lands on a fixation point a few characters into a word and your brain fills in the rest from context. Dyslexia-friendly prose typography leans into that: wide spacing, clear word shapes, and fonts like Lexend that are tuned for reading speed at the paragraph scale.
Code breaks that model in three ways. First, there is no predictable context — a variable could be any identifier, and mis-guessing it doesn't produce an awkward sentence, it produces a bug. Second, the characters that look alike in regular fonts (0 and O, 1 and l and I, ; and :, { and () appear constantly, and they change meaning. Third, code uses symbols and operators (=>, !=, <=, ::) where individual glyphs matter more than word shape.
That's why a general-purpose dyslexia font like OpenDyslexic, excellent for a Wikipedia article, can feel unusable in an IDE. The heavy, bouncy glyphs that help with b/d confusion in prose produce an uneven rhythm in code, where vertical alignment and column grids carry meaning.
What a good code font does for a dyslexic reader
The criteria are narrower than for prose fonts, and partly the same as for any developer font — the difference is how much each criterion weighs:
- Disambiguates look-alike glyphs. A slashed or dotted zero, a serif on the lowercase
l, a distinctIvs1vsl. For a dyslexic reader this goes from "nice to have" to "the whole point". - Asymmetric letterforms for rotation-prone pairs. The
b/d/p/qandn/upairs should not be mirror images of each other. A slight terminal difference on thed, a visible descender on thep, a curved foot on then— small things, big effect. - Generous x-height and counter space. Open counters (the holes inside
a,e,o,g) keep the letter from collapsing at small sizes or low contrast. - Readable at 14–16px with 1.5–1.7 line-height. Most developer-font defaults are too tight vertically. The line-spacing numbers that help dyslexic readers apply here too.
- Monospace, not proportional. Non-negotiable for code. Vertical alignment is a readability tool in its own right, especially when you're scanning a long argument list.
"Ligatures that turn != into a single ≠ glyph" is on a lot of developer-font feature lists but is a double-edged sword for dyslexic readers — we'll get to it.
The three fonts worth trying
Fira Code — the safe, popular default
Fira Code is a free, open-source programming font by Nikita Prokopov, built on Mozilla's Fira Mono. It's the most widely installed "modern" programming font, shipped as a default option in VS Code and available in almost every IDE. For a dyslexic reader it's a solid starting point because it gets the basic disambiguation right without being visually noisy:
function loadUser(id) {
// 0 O 1 l I ; :
const count = 0;
const path = "/users/" + id;
if (count != 0 && id !== null) {
return fetch(path).then(r => r.json());
}
}
Fira Code uses a slashed zero, a distinct dotted i, a tailed lowercase l, and a capital I with serifs — so 0 vs O and 1 vs l vs I are unambiguous. Its b and d are mirror images, which is a weakness, but the ascenders are long enough that you rarely confuse them in practice.
Its headline feature is programming ligatures: =>, !=, >=, -> render as single composite glyphs. For most developers this is lovely. For a dyslexic reader it's mixed. On the one hand, each operator gets a distinctive shape, so you're matching on outline rather than parsing characters. On the other, the shapes are unfamiliar — you're learning a private visual vocabulary, and the occasional stray ligature (www rendering as a stylised www, for instance) can feel like a typo that isn't there. My pragmatic suggestion: turn ligatures off for your first week, and only re-enable them once plain Fira Code feels comfortable. In VS Code: set "editor.fontLigatures": false.
JetBrains Mono — designed with reading in mind
JetBrains Mono is a free, open-source programming font released by JetBrains in 2020. It was designed specifically around developer reading fatigue, and it shows:
function loadUser(id) {
// 0 O 1 l I ; :
const count = 0;
const path = "/users/" + id;
if (count != 0 && id !== null) {
return fetch(path).then(r => r.json());
}
}
Two things set it apart. Its x-height is noticeably taller than Fira Code's, which means letter bodies fill more of the line — closer to the "fill the vertical space" principle that helps dyslexic readers in prose fonts like Lexend. And it's engineered so that individual characters are taller than they are wide, which JetBrains claims reduces eye travel per line. Whether that claim holds for dyslexic readers specifically I can't promise, but the subjective experience of reading the same file in JetBrains Mono versus a tighter font like Menlo is usually noticeable.
Its disambiguation is at least as good as Fira Code's — dotted zero, distinct 1/l/I, clearly different 0 and O — and its ligatures are available as an opt-in, so plain JetBrains Mono is a realistic default. If you want one font to try first, try this one.
OpenDyslexic Mono — the specialist option
OpenDyslexic Mono is the monospace variant of OpenDyslexic, ported to a fixed-width grid. It keeps the weighted-bottom letterforms that make the original font distinctive — so b, d, p, q have strong "down" anchors that resist mental rotation — and squeezes them into an even character width suitable for code.
function loadUser(id) {
// 0 O 1 l I ; :
const count = 0;
const path = "/users/" + id;
if (count != 0 && id !== null) {
return fetch(path).then(r => r.json());
}
}
It is, to be honest, an acquired taste for code. The weighted bottoms that help you distinguish b from d in prose also make long columns of code feel visually "heavy" — the eye is pulled toward the baseline of every line, which can fatigue over a long session. The fixed-width grid stretches some glyphs (notably m and w) in ways that look slightly awkward.
But if you're in the specific subset of dyslexic developers where letter-rotation is your primary issue, it's the only font on this list that directly addresses that. The practical pattern I've seen work: keep JetBrains Mono or Fira Code as your daily-driver, and switch to OpenDyslexic Mono for the specific sessions — usually late in the day — where your reading is starting to slip. Some developers rebind a keyboard shortcut to toggle between the two.
Side-by-side
| Fira Code | JetBrains Mono | OpenDyslexic Mono | |
|---|---|---|---|
| 0 / O | Slashed zero | Dotted zero | Slashed zero |
| 1 / l / I | Clearly distinct | Clearly distinct | Distinct; heavy bottoms |
| b / d / p / q | Mirror pairs | Mirror pairs | Asymmetric, weighted |
| Ligatures | On by default | Opt-in | None |
| Feel | Clean, neutral | Tall, open, calm | Heavy, "anchored" |
| Best for | General disambiguation | Long reading sessions | Letter-rotation issues |
| Licence | SIL OFL — free | Apache 2.0 — free | Bitstream Vera — free |
Editor settings that matter more than font choice
On a dyslexic reader's code, the settings below usually move the needle as much as the font does. If you only have ten minutes, do these first.
Line height 1.5–1.7
Most IDEs default to 1.2 or 1.3, which is prose-tight. Bump it to 1.5 as a starting point, 1.7 if you're still reaching for it. In VS Code: "editor.lineHeight": 1.6. In JetBrains IDEs: Settings → Editor → Font → Line height.
Letter spacing 0–0.5px
Most developer fonts are already generous — you don't want extra letter spacing in code, which breaks the monospace rhythm. But a tiny positive value ("editor.letterSpacing": 0.3 in VS Code) can help if your font feels cramped. Don't go above 0.5.
Font size 14–16px
The developer reflex is 12px because it fits more on screen. For a dyslexic reader that's false economy: you spend the "extra lines" re-reading. 14px is a sane floor; 15–16px for long sessions.
Cream or off-white background, not pure white
This is the single biggest quick win. Pure white (#FFFFFF) produces the highest possible contrast with black text, which is actively unhelpful for many dyslexic readers — the letters can appear to vibrate or "buzz". A warm off-white (#FBF7EF or similar) flattens the contrast just enough to settle the page. Most popular editor themes have a warm-light variant: Solarized Light is the obvious one, but "GitHub Light Default" in 2024+ versions, "One Light" and "Atom One Light Warm" all work. If you prefer dark mode, see our post on dyslexia-friendly dark mode for the settings that work — and the ones that don't.
Semantic highlighting, not syntax highlighting
Most modern editors offer semantic highlighting (same variable = same colour across the file). For a reader whose working memory is already stretched, this reduces re-parsing substantially. In VS Code: "editor.semanticHighlighting.enabled": true. In Jet Brains IDEs it's on by default under Settings → Editor → Color Scheme.
What about reading code in the browser?
A large fraction of a developer's day is reading code on GitHub, in pull request reviews, in documentation sites, or in Stack Overflow answers. None of the editor settings above carry over to the browser automatically — and GitHub defaults, in particular, ignore your OS monospace font.
Two practical moves:
- Set GitHub's font explicitly. GitHub Settings → Appearance → Monospace font lets you pick from a short list including JetBrains Mono and Fira Code. Do this once.
- Use a browser-level font override for code blocks everywhere else. LexiFont applies your chosen font to all text on a page, including
<pre>and<code>blocks — so Stack Overflow, MDN, and any documentation site you visit will match your IDE. Our Pro tier includes OpenDyslexic, Lexend, Atkinson Hyperlegible and Comic Neue for prose, and respects monospace blocks when you want them untouched. If you prefer a different tool, see our rundown of ways to change the font on any website in Chrome.
Ligatures: on or off?
If I had to give one default: off for the first month, then experiment. Ligatures are a personal optimisation, not a dyslexia feature. They can help by giving each operator a distinctive outline; they can hurt by introducing unfamiliar shapes that your brain needs to learn. The readers I know who love them are the ones who spent a month reading plain code in the same font before turning them on. The readers who've bounced off them tried to do both at once and felt the cognitive load compound.
The five-minute experiment. Pick one file you know well — a test suite, a utility module, something you've read dozens of times. Open it in your current font, time yourself reading a function top-to-bottom without scrolling. Change to JetBrains Mono at 14px with line-height 1.6. Read the same function. Then switch the background to a warm off-white and read it once more.
If the third read was calmer than the first, you've found your stack for the week. Live in it.
A note on honesty
There is, as far as I know, no peer-reviewed study that directly compares Fira Code, JetBrains Mono and OpenDyslexic Mono in dyslexic populations reading code. Most of the claims above are extrapolations from prose-font research (where OpenDyslexic's subjective-preference effect is documented) and from developer-ergonomics testing (where JetBrains Mono's reading-fatigue claims are internally reported but not independently replicated). Treat this as a structured starting point for your own A/B testing, not a settled science. The honest metric is the one your own eyes report after an hour of reading.
Further reading
- OpenDyslexic in Chrome — what it does and how to use it well
- Line spacing and letter spacing for dyslexia — what actually matters
- Dyslexia-friendly dark mode — does inverted contrast help?
- Best fonts for dyslexia in 2026 — a research-first guide
- How to change the font on any website in Chrome
Get LexiFont Pro — OpenDyslexic, Lexend, Atkinson Hyperlegible and Comic Neue for $14.99 one-time