Maple Mono is an open source monospace font focused on smoothing your coding flow.
I create it to enhance my working experience, and hope that it can be useful to others.
V7 is a completely remade version, providing variable font format and source files of font project, redesigning more than half of the glyphs and offering smarter ligatures. You can checkout V6 here
✨ Variable - Infinity font weights with fine-grained italic glyphs.
☁️ Smooth - Round corner, brand-new glyph of @ $ % & Q -> and cursive f i j k l x y in italic style.
💪 Useful - Large amount of smart ligatures, see in features/
🎨 Icon - First-Class Nerd-Font support, make your terminal more vivid.
🔨 Customize - Enable or disable font features as you want, just make your own font.
Simpified Chinese, Traditional Chinese and Japanese
CN version based on Resource Han Rounded provides complete character set support for Chinese development environments, including Simplified Chinese, Traditional Chinese, and Japanese. Meanwhile, the characteristic of perfect 2:1 alignment between Chinese and English allows this font to achieve a neat, uniform, beautiful, and comfortable appearance in scenarios such as multilingual display and Markdown tables. However, the spacing of Chinese characters is larger compared to other popular Chinese fonts. See details in release notes and this issue.
Config: font size 16px, line height 1.8, default letter spacing
You can download all the font archives from Releases.
# Add bucket
scoop bucket add nerd-fonts
# Maple Mono (ttf format)
scoop install Maple-Mono
# Maple Mono NF
scoop install Maple-Mono-NF
# Maple Mono NF CN
scoop install Maple-Mono-NF-CN
All packages (Click to expand)
# Add bucket
scoop bucket add nerd-fonts
# Maple Mono (ttf format)
scoop install Maple-Mono
# Maple Mono (hinted ttf format)
scoop install Maple-Mono-autohint
# Maple Mono (otf format)
scoop install Maple-Mono-otf
# Maple Mono NF
scoop install Maple-Mono-NF
# Maple Mono NF CN
scoop install Maple-Mono-NF-CN
# Maple Mono
brew install --cask font-maple-mono
# Maple Mono NF
brew install --cask font-maple-mono-nf
# Maple Mono NF CN
brew install --cask font-maple-mono-nf-cn
All packages (Click to expand)
# Maple Mono
brew install --cask font-maple-mono
# Maple Mono NF
brew install --cask font-maple-mono-nf
# Maple Mono CN
brew install --cask font-maple-mono-cn
# Maple Mono NF CN
brew install --cask font-maple-mono-nf-cn
# Maple Mono Normal
brew install --cask font-maple-mono-normal
# Maple Mono Normal NF
brew install --cask font-maple-mono-normal-nf
# Maple Mono Normal CN
brew install --cask font-maple-mono-normal-cn
# Maple Mono Normal NF CN
brew install --cask font-maple-mono-normal-nf-cn
ArchLinuxCN repository allows downloading a single package zip file without downloading all the package zip files in pkgbase, but AUR does not. (If you have a good solution, please contact Cyberczy([email protected]))
ArchLinuxCN (Recommended)
# Maple Mono (Ligature TTF unhinted)
paru -S ttf-maplemono
# Maple Mono NF (Ligature unhinted)
paru -S ttf-maplemono-nf-unhinted
# Maple Mono NF CN (Ligature unhinted)
paru -S ttf-maplemono-nf-cn-unhinted
All packages (Click to expand)
# Maple Mono (Ligature Variable)
paru -S ttf-maplemono-variable
# Maple Mono (Ligature TTF hinted)
paru -S ttf-maplemono-autohint
# Maple Mono (Ligature TTF unhinted)
paru -S ttf-maplemono
# Maple Mono (Ligature OTF)
paru -S otf-maplemono
# Maple Mono (Ligature WOFF2)
paru -S woff2-maplemono
# Maple Mono NF (Ligature hinted)
paru -S ttf-maplemono-nf
# Maple Mono NF (Ligature unhinted)
paru -S ttf-maplemono-nf-unhinted
# Maple Mono CN (Ligature hinted)
paru -S ttf-maplemono-cn
# Maple Mono CN (Ligature unhinted)
paru -S ttf-maplemono-cn-unhinted
# Maple Mono NF CN (Ligature hinted)
paru -S ttf-maplemono-nf-cn
# Maple Mono NF CN (Ligature unhinted)
paru -S ttf-maplemono-nf-cn-unhinted
# Maple Mono (No-Ligature Variable)
paru -S ttf-maplemononl-variable
# Maple Mono (No-Ligature TTF hinted)
paru -S ttf-maplemononl-autohint
# Maple Mono (No-Ligature TTF unhinted)
paru -S ttf-maplemononl
# Maple Mono (No-Ligature OTF)
paru -S otf-maplemononl
# Maple Mono (No-Ligature WOFF2)
paru -S woff2-maplemononl
# Maple Mono NF (No-Ligature hinted)
paru -S ttf-maplemononl-nf
# Maple Mono NF (No-Ligature unhinted)
paru -S ttf-maplemononl-nf-unhinted
# Maple Mono CN (No-Ligature hinted)
paru -S ttf-maplemononl-cn
# Maple Mono CN (No-Ligature unhinted)
paru -S ttf-maplemononl-cn-unhinted
# Maple Mono NF CN (No-Ligature hinted)
paru -S ttf-maplemononl-nf-cn
# Maple Mono NF CN (No-Ligature unhinted)
paru -S ttf-maplemononl-nf-cn-unhinted
# Maple Mono Normal (Ligature Variable)
paru -S ttf-maplemononormal-variable
# Maple Mono Normal (Ligature TTF hinted)
paru -S ttf-maplemononormal-autohint
# Maple Mono Normal (Ligature TTF unhinted)
paru -S ttf-maplemononormal
# Maple Mono Normal (Ligature OTF)
paru -S otf-maplemononormal
# Maple Mono Normal (Ligature WOFF2)
paru -S woff2-maplemononormal
# Maple Mono Normal NF (Ligature hinted)
paru -S ttf-maplemononormal-nf
# Maple Mono Normal NF (Ligature unhinted)
paru -S ttf-maplemononormal-nf-unhinted
# Maple Mono Normal CN (Ligature hinted)
paru -S ttf-maplemononormal-cn
# Maple Mono Normal CN (Ligature unhinted)
paru -S ttf-maplemononormal-cn-unhinted
# Maple Mono Normal NF CN (Ligature hinted)
paru -S ttf-maplemononormal-nf-cn
# Maple Mono Normal NF CN (Ligature unhinted)
paru -S ttf-maplemononormal-nf-cn-unhinted
# Maple Mono Normal (No-Ligature Variable)
paru -S ttf-maplemononormalnl-variable
# Maple Mono Normal (No-Ligature TTF hinted)
paru -S ttf-maplemononormalnl-autohint
# Maple Mono Normal (No-Ligature TTF unhinted)
paru -S ttf-maplemononormalnl
# Maple Mono Normal (No-Ligature OTF)
paru -S otf-maplemononormalnl
# Maple Mono Normal (No-Ligature WOFF2)
paru -S woff2-maplemononormalnl
# Maple Mono Normal NF (No-Ligature hinted)
paru -S ttf-maplemononormalnl-nf
# Maple Mono Normal NF (No-Ligature unhinted)
paru -S ttf-maplemononormalnl-nf-unhinted
# Maple Mono Normal CN (No-Ligature hinted)
paru -S ttf-maplemononormalnl-cn
# Maple Mono Normal CN (No-Ligature unhinted)
paru -S ttf-maplemononormalnl-cn-unhinted
# Maple Mono Normal NF CN (No-Ligature hinted)
paru -S ttf-maplemononormalnl-nf-cn
# Maple Mono Normal NF CN (No-Ligature unhinted)
paru -S ttf-maplemononormalnl-nf-cn-unhinted
# Maple Mono (Ligature TTF unhinted)
paru -S maplemono-ttf
# Maple Mono NF (Ligature unhinted)
paru -S maplemono-nf-unhinted
# Maple Mono NF CN (Ligature unhinted)
paru -S maplemono-nf-cn-unhinted
All packages (Click to expand)
# Maple Mono (Ligature Variable)
paru -S maplemono-variable
# Maple Mono (Ligature TTF hinted)
paru -S maplemono-ttf-autohint
# Maple Mono (Ligature TTF unhinted)
paru -S maplemono-ttf
# Maple Mono (Ligature OTF)
paru -S maplemono-otf
# Maple Mono (Ligature WOFF2)
paru -S maplemono-woff2
# Maple Mono NF (Ligature hinted)
paru -S maplemono-nf
# Maple Mono NF (Ligature unhinted)
paru -S maplemono-nf-unhinted
# Maple Mono CN (Ligature hinted)
paru -S maplemono-cn
# Maple Mono CN (Ligature unhinted)
paru -S maplemono-cn-unhinted
# Maple Mono NF CN (Ligature hinted)
paru -S maplemono-nf-cn
# Maple Mono NF CN (Ligature unhinted)
paru -S maplemono-nf-cn-unhinted
# Maple Mono (No-Ligature Variable)
paru -S maplemononl-variable
# Maple Mono (No-Ligature TTF hinted)
paru -S maplemononl-ttf-autohint
# Maple Mono (No-Ligature TTF unhinted)
paru -S maplemononl-ttf
# Maple Mono (No-Ligature OTF)
paru -S maplemononl-otf
# Maple Mono (No-Ligature WOFF2)
paru -S maplemononl-woff2
# Maple Mono NF (No-Ligature hinted)
paru -S maplemononl-nf
# Maple Mono NF (No-Ligature unhinted)
paru -S maplemononl-nf-unhinted
# Maple Mono CN (No-Ligature hinted)
paru -S maplemononl-cn
# Maple Mono CN (No-Ligature unhinted)
paru -S maplemononl-cn-unhinted
# Maple Mono NF CN (No-Ligature hinted)
paru -S maplemononl-nf-cn
# Maple Mono NF CN (No-Ligature unhinted)
paru -S maplemononl-nf-cn-unhinted
# Maple Mono Normal (Ligature Variable)
paru -S maplemononormal-variable
# Maple Mono Normal (Ligature TTF hinted)
paru -S maplemononormal-ttf-autohint
# Maple Mono Normal (Ligature TTF unhinted)
paru -S maplemononormal-ttf
# Maple Mono Normal (Ligature OTF)
paru -S maplemononormal-otf
# Maple Mono Normal (Ligature WOFF2)
paru -S maplemononormal-woff2
# Maple Mono Normal NF (Ligature hinted)
paru -S maplemononormal-nf
# Maple Mono Normal NF (Ligature unhinted)
paru -S maplemononormal-nf-unhinted
# Maple Mono Normal CN (Ligature hinted)
paru -S maplemononormal-cn
# Maple Mono Normal CN (Ligature unhinted)
paru -S maplemononormal-cn-unhinted
# Maple Mono Normal NF CN (Ligature hinted)
paru -S maplemononormal-nf-cn
# Maple Mono Normal NF CN (Ligature unhinted)
paru -S maplemononormal-nf-cn-unhinted
# Maple Mono Normal (No-Ligature Variable)
paru -S maplemononormalnl-variable
# Maple Mono Normal (No-Ligature TTF hinted)
paru -S maplemononormalnl-ttf-autohint
# Maple Mono Normal (No-Ligature TTF unhinted)
paru -S maplemononormalnl-ttf
# Maple Mono Normal (No-Ligature OTF)
paru -S maplemononormalnl-otf
# Maple Mono Normal (No-Ligature WOFF2)
paru -S maplemononormalnl-woff2
# Maple Mono Normal NF (No-Ligature hinted)
paru -S maplemononormalnl-nf
# Maple Mono Normal NF (No-Ligature unhinted)
paru -S maplemononormalnl-nf-unhinted
# Maple Mono Normal CN (No-Ligature hinted)
paru -S maplemononormalnl-cn
# Maple Mono Normal CN (No-Ligature unhinted)
paru -S maplemononormalnl-cn-unhinted
# Maple Mono Normal NF CN (No-Ligature hinted)
paru -S maplemononormalnl-nf-cn
# Maple Mono Normal NF CN (No-Ligature unhinted)
paru -S maplemononormalnl-nf-cn-unhinted
Nixpkgs (NixOS, Linux, MacOS)
fonts.packages=withpkgs;[# Maple Mono (Ligature TTF unhinted)maple-mono.truetype# Maple Mono NF (Ligature unhinted)maple-mono.NF-unhinted# Maple Mono NF CN (Ligature unhinted)maple-mono.NF-CN-unhinted];
All packages (Click to expand)
fonts.packages=withpkgs;[# Maple Mono (Ligature Variable)maple-mono.variable# Maple Mono (Ligature TTF hinted)maple-mono.truetype-autohint# Maple Mono (Ligature TTF unhinted)maple-mono.truetype# Maple Mono (Ligature OTF)maple-mono.opentype# Maple Mono (Ligature WOFF2)maple-mono.woff2# Maple Mono NF (Ligature hinted)maple-mono.NF# Maple Mono NF (Ligature unhinted)maple-mono.NF-unhinted# Maple Mono CN (Ligature hinted)maple-mono.CN# Maple Mono CN (Ligature unhinted)maple-mono.CN-unhinted# Maple Mono NF CN (Ligature hinted)maple-mono.NF-CN# Maple Mono NF CN (Ligature unhinted)maple-mono.NF-CN-unhinted# Maple Mono (No-Ligature Variable)maple-mono.NL-Variable# Maple Mono (No-Ligature TTF hinted)maple-mono.NL-TTF-AutoHint# Maple Mono (No-Ligature TTF unhinted)maple-mono.NL-TTF# Maple Mono (No-Ligature OTF)maple-mono.NL-OTF# Maple Mono (No-Ligature WOFF2)maple-mono.NL-Woff2# Maple Mono NF (No-Ligature hinted)maple-mono.NL-NF# Maple Mono NF (No-Ligature unhinted)maple-mono.NL-NF-unhinted# Maple Mono CN (No-Ligature hinted)maple-mono.NL-CN# Maple Mono CN (No-Ligature unhinted)maple-mono.NL-CN-unhinted# Maple Mono NF CN (No-Ligature hinted)maple-mono.NL-NF-CN# Maple Mono NF CN (No-Ligature unhinted)maple-mono.NL-NF-CN-unhinted# Maple Mono Normal (Ligature Variable)maple-mono.Normal-Variable# Maple Mono Normal (Ligature TTF hinted)maple-mono.Normal-TTF-AutoHint# Maple Mono Normal (Ligature TTF unhinted)maple-mono.Normal-TTF# Maple Mono Normal (Ligature OTF)maple-mono.Normal-OTF# Maple Mono Normal (Ligature WOFF2)maple-mono.Normal-Woff2# Maple Mono Normal NF (Ligature hinted)maple-mono.Normal-NF# Maple Mono Normal NF (Ligature unhinted)maple-mono.Normal-NF-unhinted# Maple Mono Normal CN (Ligature hinted)maple-mono.Normal-CN# Maple Mono Normal CN (Ligature unhinted)maple-mono.Normal-CN-unhinted# Maple Mono Normal NF CN (Ligature hinted)maple-mono.Normal-NF-CN# Maple Mono Normal NF CN (Ligature unhinted)maple-mono.Normal-NF-CN-unhinted# Maple Mono Normal (No-Ligature Variable)maple-mono.NormalNL-Variable# Maple Mono Normal (No-Ligature TTF hinted)maple-mono.NormalNL-TTF-AutoHint# Maple Mono Normal (No-Ligature TTF unhinted)maple-mono.NormalNL-TTF# Maple Mono Normal (No-Ligature OTF)maple-mono.NormalNL-OTF# Maple Mono Normal (No-Ligature WOFF2)maple-mono.NormalNL-Woff2# Maple Mono Normal NF (No-Ligature hinted)maple-mono.NormalNL-NF# Maple Mono Normal NF (No-Ligature unhinted)maple-mono.NormalNL-NF-unhinted# Maple Mono Normal CN (No-Ligature hinted)maple-mono.NormalNL-CN# Maple Mono Normal CN (No-Ligature unhinted)maple-mono.NormalNL-CN-unhinted# Maple Mono Normal NF CN (No-Ligature hinted)maple-mono.NormalNL-NF-CN# Maple Mono Normal NF CN (No-Ligature unhinted)maple-mono.NormalNL-NF-CN-unhinted];
CN: Chinese version, embed with Chinese and Japanese glyphs (With -CN suffix)
NF-CN: Full version, embed with icons, Chinese and Japanese glyphs (With -NF-CN suffix)
Hinted font is used for low resolution screen to have better render effect. From my experience, if your screen resolution is lower or equal than 1080P, it is recommended to use "hinted font". Using "unhinted font" will lead to misalignment or uneven thickness on your text.
In this case, you can choose MapleMono-TTF-AutoHint / MapleMono-NF / MapleMono-NF-CN, etc.
Unhinted font is used for high resolution screen (e.g. for MacBook). Using "hinted font" will blur your text or make it looks weird.
In this case, you can choose MapleMono-OTF / MapleMono-TTF / MapleMono-NF-unhinted / MapleMono-NF-CN-unhinted, etc.
Why there exists -AutoHint and -unhinted suffix?
for backward compatibility, I keep the original naming scheme. -AutoHint is only used for TTF format.
The config.json file is used to configure the build process. Checkout the schema or document for more details.
There also have some command line options for customizing the build process. Cli options have higher priority than options in config.json.
Go to Playground, and click "Custom Build" button in the bottom left corner
There are three kinds of options for feature freeze (Why):
enable: Forcely enable the features without setting up cvXX / ssXX / zero in font features config, just as default glyphs / ligatures
disable: Remove the features in cvXX / ssXX / zero, which will no longer effect, even if you enable it manually
ignore: Do nothing
OpenType Feature is used to control the font's built-in variants and ligatures. You can remove some ligatures or features you don't want to, change feature's trigger rule or add some new rules by modifying OpenType Feature.
By default, the Python module in source/py/feature/ will generate feature rule string and load it at build time. You can modify the features or customize tags there.
If you would like to modify the feature file instead, run build.py with --apply-fea-file flag, the feature file from source/features/{regular,italic}.fea will be loaded.
CN version is disabled by default. Run python build.py with --cn flag, the CN base fonts (about 130 MB) will download from GitHub.
If you want to build CN base fonts from variable (about 35 MB), setup "cn.use_static_base_font": false in config.json and BE PATIENT, instantiation will take about 20-30 minutes.
Narrow spacing in CN glyphs
If you think that CN glyphs spacing is TOOOOOO large, there is a build option cn.narrow or cli flag --cn-narrow to narrow spacing in CN glyphs, but this will make the font cannot be recogized as monospaced font.
The build script will auto download required assets from GitHub. If you have trouble downloading, please setup github_mirror in config.json or $GITHUB to your environment variable. (Target URL will be https://<github_mirror>/<user>/<repo>/releases/download/<tag>/<file>), or just download the target .zip file and put it in the same directory as build.py.
Traditional Chinese Punctuation Support
By enabling cv99, all Chinese punctuation marks will be centred. See more details in #150
usage: build.py [-h] [-v] [-d] [--debug] [-n] [--feat FEAT] [--apply-fea-file]
[--hinted | --no-hinted] [--liga | --no-liga] [--nf-mono]
[--cn-narrow] [--cn-scale-factor CN_SCALE_FACTOR] [--nerd-font |
--no-nerd-font] [--cn | --no-cn] [--cn-both] [--ttf-only]
[--least-styles] [--font-patcher] [--cache] [--cn-rebuild]
[--archive]
✨ 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 Add `Debug` suffix to family name and faster build
Feature Options:
-n, --normal Use normal preset, just like `JetBrains Mono` with slashed
zero
--feat FEAT Freeze font features, splited by `,` (e.g. `--feat
zero,cv01,ss07,ss08`). No effect on variable format
--apply-fea-file Load feature file from `source/features/{regular,italic}.fea`
to variable font
--hinted Use hinted font as base font in NF / CN / NF-CN (default)
--no-hinted Use unhinted font as base font in NF / CN / NF-CN
--liga Preserve all the ligatures (default)
--no-liga Remove all the ligatures
--nf-mono Fixed Nerd Font icons' width
--cn-narrow Make CN / JP characters narrow (And the font cannot be
recogized as monospaced font)
--cn-scale-factor CN_SCALE_FACTOR
Scale factor for CN / JP glyphs. Format: <factor> or
<width_factor>,<height_factor> (e.g. 1.1 or 1.2,1.1)
Build Options:
--nerd-font Build Nerd-Font version (default)
--no-nerd-font Do not build Nerd-Font version
--cn Build Chinese version
--no-cn Do not build Chinese version (default)
--cn-both Build both `Maple Mono CN` and `Maple Mono NF CN`. Nerd-Font
version must be enabled
--ttf-only Only build TTF format
--least-styles Only build Regular / Bold / Italic / BoldItalic style
--font-patcher Force the use of Nerd Font Patcher to build NF format
--cache Reuse font cache of TTF, OTF and Woff2 formats
--cn-rebuild Reinstantiate variable CN base font
--archive Build font archives with config and license. If has `--cache`
flag, only archive NF and CN formats
Using FontLab or Glyphs, generate variable TTF into source/ folder.
# Init project
uv sync
# Dev
uv run build.py --ttf-only --cn --debug
# Update nerd font
uv run task.py nerd-font
# Update fea file
uv run task.py fea
# Update landing page info
uv run task.py page
# Release
uv run task.py release 7.0