QSpad — Neurodivergent Friendly Theme
A minimalist, low-contrast VS Code theme built around the reading comfort tweaks that actually helped: a warm ivory background instead of stark white, one flat text color instead of a rainbow of syntax colors, muted sage-green UI chrome, wide letter spacing, generous line height, no italics, no bracket-pair rainbow colors, and semantic highlighting turned off. The same choices that ease dyslexia (low visual clutter, no color-based cognitive load, no flashing bracket colors) tend to help ADHD, autistic, and other sensory-sensitive readers too.
Minimalism is the point, not a side effect — every choice here favors sensory comfort and a feeling of safety over visual interest. Comments, keywords, strings, and variables are all the same color on purpose. If you want some color distinction back, see "Tuning it further" below.

The extension bundles three themes. Switch between them with Cmd/Ctrl+K Cmd/Ctrl+T (or Settings → Color Theme):
| Theme |
For |
| QSpad |
Everyday use: ivory background, soft dark-olive text |
| QSpad High Contrast |
Lower-resolution or lower-quality displays where the default feels faint |
| QSpad Noir |
People who want a dark theme but find common dark themes glaring or shimmery |
What it changes
Installing this extension sets (as defaults you can still override):
- Theme:
QSpad (Neurodivergent Friendly) — #FFFDF5 background, #3B3F36 text, muted sage UI chrome, Pantone Withered Rose (#A26666) for deleted/conflict git markers, and a deliberately darker forest green (#1F5C33) for added/inserted markers
- Sage-green accents everywhere, not just the editor: buttons, badges, links, list/menu selection highlights, checkboxes, and scrollbars are all remapped from VS Code's default blue to the sage-green palette — this covers extension panels (e.g. chat sidebars) that inherit these workbench colors, not just editor UI
- Font: Menlo (Consolas on Windows, DejaVu Sans Mono on Linux), no ligatures
- Size/spacing: 13px, 22px line height, +0.5 letter spacing
- No bracket rainbow colors (
editor.bracketPairColorization.enabled: false)
- No semantic highlighting (
editor.semanticHighlighting.enabled: false) — this is what stops language extensions (e.g. R, Python) from re-coloring functions/keywords on top of the theme
QSpad High Contrast
The same flat, no-syntax-color approach with noticeably darker text, line numbers, and UI chrome. Switching to it changes nothing else.
QSpad Noir

A mild dark theme for readers who find common dark themes uncomfortable. Typical dark themes put bright white text on near-black at 12–15:1 contrast, which makes letters glow (halation) and seem to shimmer, especially with dyslexia, astigmatism, or visual stress. Noir keeps the same calm, flat design as QSpad, at about half that contrast:
| Element |
Color |
Contrast |
| Background (editor and panels) |
warm charcoal #282723 |
— |
| Text |
soft yellow-beige #B8AF86 |
6.8:1 |
| Text selection |
deep sage #2E4A26 |
4.5:1 for the text on it |
| Inline code (chat panels, Markdown preview) |
burnt orange #CD7C51 on #33312D |
4.1:1 |
| Git added / deleted |
sage #83A686 / Withered Rose #C48D8D |
5.5:1 / 5.4:1 |
A few choices worth knowing about:
- The background has no green tint, so sage selections, search matches, and buttons stand apart from it by hue as well as brightness.
- Selections get their prominence from color, not brightness. A brighter selection would make the text on it harder to read.
- Inline code is burnt orange rather than red. It echoes the red inline code of VS Code's light themes, but saturated red seems to vibrate on dark backgrounds, and shifting it toward orange calms it.
Noir-only reading settings
VS Code has no per-theme font settings, so QSpad applies these only while Noir is active and restores your own values when you switch to any other theme:
- Editor (code, Markdown, and plain text): the system UI font — SF Pro on macOS, Segoe UI on Windows — the same proportional font VS Code uses in chat panels, with no extra letter spacing and a 24px line height. Monospace text forms an evenly spaced grid of vertical strokes, and on a dark background that pattern can seem to shimmer; a proportional font breaks it up.
- Terminal: SF Mono (the monospace sibling of SF Pro), falling back to Monaspace Neon, Cascadia Mono / Consolas on Windows, and DejaVu Sans Mono on Linux — sans-serif throughout, because serifs add small high-contrast edges that shimmer too.
- Cursor: solid, with no blinking or animation, and smooth scrolling off.
No font installs are needed on macOS or Windows. To use Monaspace Neon as the terminal fallback, install it with brew install --cask font-monaspace (macOS) or from monaspace.githubnext.com.
To change these, edit qspad.noir.fontSettings in your settings (a map of setting ID → value; prefix an ID with [languageId] to scope it to one file type, e.g. "[markdown]editor.fontFamily"). To turn the switching off entirely, set qspad.noir.enableFontSettings to false.
Install
From the Marketplace (once published): search "QSpad" in the Extensions panel, or
ext install qingshanneuro.qspad
From source:
git clone https://github.com/QingshanNeuro/qspad.git
cd qspad
npx @vscode/vsce package
code --install-extension qspad-*.vsix
Tuning it further
- Want some syntax color back? Edit
themes/qspad-color-theme.json and split the one big tokenColors rule into a few groups (e.g. keep comments/strings distinct, leave functions/variables flat) — this is exactly what we did interactively before flattening it all the way.
- Different font? Override
editor.fontFamily in your own settings.json — extension defaults never lock you out of changing them. For Noir, change qspad.noir.fontSettings instead, since Noir applies its own font while active.
- Different accent? The sage-green UI accents live in
themes/qspad-color-theme.json under colors (focusBorder, editor.selectionBackground, editorBracketMatch.border).
- On Windows, or a lower-quality display? Consolas at regular weight can read a bit thin — try
"editor.fontFamily": "'Cascadia Mono', Consolas, monospace" (bundled with Windows Terminal, or grab it from github.com/microsoft/cascadia-code) paired with "editor.letterSpacing": 0.8. Avoid editor.fontWeight: "bold" to fix thinness — it overshoots into feeling heavy; a font change plus a bit more letter spacing reads more "solid" without that.
- Noir still shimmers? Heavier font weights and serif or slab-serif fonts made shimmer worse in testing, not better. A slightly brighter screen also helps: a very dim screen showing a dark theme widens the pupils, which increases halation.
Colorblind accessibility
The "added" git indicator (gutter bars, Source Control decorations, inserted-line highlighting) uses a deliberately darker forest green (#1F5C33) rather than a pale sage, so it holds real luminance separation from the Withered Rose used for "deleted" under color-blindness simulation (1.94:1 contrast under deuteranopia, 1.51:1 under protanopia). These figures are for the light themes. In every theme, VS Code's letter badges (A/M/D/U in the Source Control and Explorer views) are a more reliable, color-independent signal if you rely on git status colors.
Known limitations
- Text selection inside the Claude Code chat panel stays VS Code's default blue. This isn't something a theme can fix: the extension's own webview never defines a
::selection rule or reads the theme's selection.background value for its plain response text, only for code blocks. (On macOS this can look "fixed" if your System Settings → Appearance → Highlight Color happens to already be green — that's an OS-level fallback, not the extension respecting the theme, and it won't help on Windows/Linux.) Filed upstream at anthropics/claude-code#issues; everything else in that panel (buttons, badges, lists, code blocks) does follow the theme correctly.
- Noir's reading settings are written to your user settings. Because VS Code can't tie settings to a theme, QSpad changes your global font settings while Noir is active and reverts them when you leave. If your
settings.json is open with unsaved changes, VS Code blocks the write; QSpad shows a warning and retries as soon as you save the file. If you change one of these settings yourself while Noir is active, QSpad keeps your change when you leave.
- In Noir, code blocks in the Claude Code panel use the proportional editor font. That panel draws code in whatever font the editor uses, so command output with aligned columns won't line up while Noir is active.
Author
Qingshan
License
MIT
| |