Download | Website | English | 简中 | 繁中 | 日本語 | 한국어
Warning
V8 is still under development and has not been officially released. If you need a stable version, please use the v7 branch.
Maple Mono is an open-source monospace font designed to make coding more comfortable and efficient.
I created it to improve my own productivity, and hope it helps more people enjoy writing code.
- ✨ Variable font support - Adjust the weight continuously, with carefully refined italic glyphs for flexible typography.
- ☁️ Rounded shapes and visual refinement - Rounded throughout, with redesigned
@ $ % & Q ->, refined italic connections (f i j k l x y), and multiple character-width modes. - 🪄 Enhanced smart ligatures - Extensive smart ligatures, character variants, OpenType stylistic sets, and built-in status-label ligatures make code easier to read and more expressive.
- 🔣 Extended Unicode coverage - Includes box-drawing characters, Braille, mathematical operators (U+2200–U+22FF), chess and card symbols, terminal status and progress symbols, and Claude Code loading indicators for scientific and development workflows.
- 🎨 Nerd Font icon support - Integrates Nerd Fonts natively for clear, readable interfaces across development tools and terminals.
- 🔨 Highly customizable builds - Configure OpenType features, custom tag ligatures, line height, character width, and weight mapping, or generate a custom font from source.
Maple Mono supports CJK character sets. Compared with V7, V8 greatly expands and improves its CJK coverage for Simplified Chinese, Traditional Chinese, Japanese, and Korean. CJK glyphs use a 2:1 width ratio with Latin characters to keep multilingual text and Markdown tables aligned; as a trade-off, the default CJK spacing is wider than in many other CJK fonts. See this issue for details.
| Locale | Coverage | CJK font source | Build output |
|---|---|---|---|
| CN | Simplified Chinese, with common Traditional Chinese and Japanese ranges | WenYuan Rounded SC | CN |
| TC | Traditional Chinese | Chiron Go Round TC | TC |
| JP | Japanese | Resource Han Rounded JP | JP |
| KR | Korean | Chiron Go Round TC, filtered to Korean ranges | KR |
CJK builds are disabled by default. Use the CJK build configuration to select one or more locales, static or variable output, and optional compact spacing.
- Generated with CodeImg
- Theme: Maple
- Configuration: 16px font size, 1.8 line height, default letter spacing
Download the font archives from Releases.
You can also install Maple Mono through Scoop, Homebrew, AUR/Paru, NixPkgs, and other package managers. See the installation guide for details.
See the usage guide for usage and configuration instructions.
Maple Mono provides multiple font formats and character-set ranges in its releases based on user feedback. Choose the font file that fits your use case; see font selection for details.
You can preview all highlights on the page#todo.
Maple Mono provides highly customizable builds. Modify config.json or add command-line arguments to generate the font you need; see custom builds for details.
See the full build.py CLI reference.
V8 provides three character-width modes. Change the "width" field in config.json, or pass --width <mode> on the command line.
Available modes:
- default: 600
- narrow: 550
- slim: 500
OpenType features control built-in font variants and ligatures, and are supported by most modern operating systems, browsers, terminals, and editors. Enable or disable them to control ligatures and character styles.
Maple Mono provides many fine-grained OpenType features. To reduce configuration effort, builds support three handling modes (why):
enable: Force these features on without settingcvXX/ssXX/zeroin the font feature configuration, similar to default ligatures.disable: Remove these features fromcvXX/ssXX/zero, so they remain inactive even if enabled manually.ignore: Keep the default behavior unchanged.
Maple Mono's default glyph design is distinctive and personalized, which may not suit every taste or use case. The --normal build preset provides glyphs similar to JetBrains Mono (0 has a slash in the middle instead of a dot).
Most fonts do not support custom OpenType features, while Maple Mono supports defining them programmatically.
By default, the Python modules in scripts/feature/ generate the OpenType feature code loaded during the build. Modify those modules to adjust behavior or customize labels. To edit .fea source files directly, pass --apply-fea-file to build.py; the build script will load source/features/{regular,italic}{_cn,}.fea.
Inspired by Fira Code and Cascadia Code, Maple Mono has supported infinite arrow ligatures since v7.3. Because of rendering issues, arrow ligatures may be misaligned in hinted fonts, so Hinted versions have disabled this feature by default since v7.4.
Set "infinite_arrow": true in config.json, or pass --infinite-arrow on the command line to force-enable it. Discuss issues in #508.
By default, 0 uses the slashed style, and enabling zero displays the dotted form. Use --standard-zero to restore the standard OpenType semantics: the default 0 is dotted, and enabling zero displays the slashed form.
Maple Mono's default line height is 1. Change the "line_height" field in config.json, or pass --line-height <value> on the command line. The final line height is calculated as (ascender - descender) * line_height.
If Maple Mono lacks a Unicode code point, the corresponding character may not render. Customize the mapping through the "codepoint_alias" field in config.json.
For example, map existing characters to other Unicode code points:
{
"codepoint_alias": {
"U+E000": "U+E001",
"U+E002": "U+E003"
}
}Change the weight of static fonts through the "weight_mapping" field in config.json.
For example, make the regular weight slightly thinner by lowering "weight_mapping.regular" from 400 to 350:
{
"weight_mapping": {
"thin": 100,
"extralight": 200,
"light": 300,
"regular": 350,
"semibold": 500,
"medium": 600,
"bold": 700,
"extrabold": 800
}
}Maple Mono includes Nerd Font icons and follows its naming rules. By default, each icon occupies one Latin-character width.
- To make icons occupy two Latin-character widths (Nerd Font Mono), set
"nerd_font.mono": trueinconfig.json, or add--nf-monoto the build arguments. - To use variable-width icons (Nerd Font Propo), set
"nerd_font.propo": trueinconfig.json, or add--nf-propoto the build arguments.
To customize font-patcher arguments, install fontforge (and possibly python3-fontforge). You may also need to change "nerd_font.extra_args" in config.json.
Default arguments: -l --careful --outputdir dir
- When
"nerd_font.propo"istrue, add--variable-width-glyphs. - When
"nerd_font.mono"istrue, add--mono.
CJK fonts are not generated by default. Enable the CJK build configuration to download the required base glyphs from the GitHub Release.
If only the CJK characters have too much spacing while Latin characters look correct, use the cjk.narrow build option or the --cjk-narrow command-line argument. This prevents the font from being recognized as strictly monospace.
See #249 for a preview and discussion.
- To change Latin character width as well, use the
--widthoption.
Maple Mono supports the cpct feature to center full-width punctuation, which is common in Traditional Chinese; you can also enable cv99 to force this behavior. See #150 for details.
The build script automatically downloads required resources from GitHub. If a download fails, set github_mirror in config.json or set $GITHUB as an environment variable. The target URL format is https://<github_mirror>/<user>/<repo>/releases/download/<tag>/<file>; you can also download the target .zip file and place it next to build.py.
usage: build.py [-h] [-v] [-d] [--debug] [-n] [--standard-zero] [--feat FEAT]
[--apply-fea-file] [--hinted | --no-hinted]
[--liga | --no-liga] [--infinite-arrow] [--remove-tag-liga]
[--line-height LINE_HEIGHT] [--width {default,narrow,slim}]
[--format FORMATS] [--least-styles] [--cache] [--archive]
[--nf | --no-nf] [--nf-mono] [--nf-propo] [--nf-variable]
[--font-patcher] [--cjk CJK] [--cjk-variable] [--cjk-narrow]
[--cjk-scale-factor CJK_SCALE_FACTOR] [--cjk-both]
[--cjk-hinted | --no-cjk-hinted] [--cn | --no-cn]
[--cn-narrow] [--cn-scale-factor CN_SCALE_FACTOR] [--cn-both]
Builder and optimizer for Maple Mono
options:
-h, --help show this help message and exit
-v, --version show program's version number and exit
-d, --dry Output config and exit
--debug Use a fast debug build: add `Debug`, enable debug
logging, build Regular/Italic only, and skip
OTF/WOFF2/Nerd Font outputs
Feature Options:
-n, --normal Use normal preset, just like `JetBrains Mono` with
slashed zero
--standard-zero Use standard zero semantics: default dotted zero and
slashed zero when `zero` is enabled
--feat FEAT Enable and freeze the listed features, split by `,`
(e.g. `--feat zero,cv01,ss07,ss08`); contextual rules
are enabled through `calt`
--apply-fea-file Apply matching
`source/features/{regular,italic}{_cn,}.fea` to static
and variable fonts
--hinted Use hinted font as base font in NF / CJK / NF-CJK
(default)
--no-hinted Use unhinted font as base font in NF / CJK / NF-CJK
--liga Preserve all the ligatures (default)
--no-liga Remove all the ligatures
--infinite-arrow Enable infinite arrow ligatures (Disabled in hinted
font by default)
--remove-tag-liga Remove plain text tag ligatures like `[TODO]`
--line-height LINE_HEIGHT
Scale factor for line height (e.g., 1.1)
--width {default,narrow,slim}
Set glyph width: default (600), narrow (550), slim
(500)
Build Options:
--format FORMATS Select requested base output formats as a comma-
separated list: ttf,otf,woff2; the variable base is
always built
--least-styles Only build Regular / Bold / Italic / BoldItalic style
--cache Reuse valid cached pipeline stages under `fonts/` and
preserve existing unrelated outputs
--archive Archive each existing non-JSON output directory with
config and license
Nerd Font Options:
--nf, --nerd-font Build Nerd-Font version (default)
--no-nf, --no-nerd-font
Do not build the Nerd-Font version
--nf-mono Make Nerd Font icons' width fixed
--nf-propo Make Nerd Font icons' width variable, override `--nf-
mono`
--nf-variable Build Nerd Font as a variable font
--font-patcher Force the use of Nerd Font Patcher to build NF format
CJK Options:
--cjk CJK Build Maple Mono + CJK extended fonts for locales: cn,
jp, tc, kr. Repeat or use comma-separated values.
--cjk-variable Persist CJK-extended output as merged variable fonts.
--cjk-narrow Apply narrow CJK spacing to the selected locales.
--cjk-scale-factor CJK_SCALE_FACTOR
Scale factor for selected CJK locales. Format:
<factor> or <width_factor>,<height_factor>.
--cjk-both When Nerd Font is enabled, build both NF CJK and non-
NF CJK outputs.
--cjk-hinted Auto-hint final static CJK fonts.
--no-cjk-hinted Do not auto-hint final static CJK fonts (default).
Deprecated CN Options:
--cn Deprecated alias for `--cjk cn`.
--no-cn Deprecated alias for removing `cn` from the selected
CJK locales.
--cn-narrow Deprecated alias for `--cjk-narrow` when targeting
`cn`.
--cn-scale-factor CN_SCALE_FACTOR
Deprecated alias for `--cjk-scale-factor` when
targeting `cn`.
--cn-both Deprecated alias for `--cjk-both`.
- JetBrains Mono
- Fira Code
- Cascadia Code
- Roboto Mono
- Victor Mono
- Commit Mono
- Code Sample
- Nerd Font
- Font Freeze
- Font Viewer
- Monolisa
- Recursive
If this font is helpful to you, please consider sponsoring me through Afdian.
SIL Open Font License 1.1






