Skip to content

Maple Mono: Open source monospace font with round corner, ligatures and Nerd-Font for IDE and terminal, fine-grained customization options. 带连字和控制台图标的圆角等宽字体,中英文宽度完美2:1,细粒度的自定义选项

License

Notifications You must be signed in to change notification settings

subframe7536/maple-font

Repository files navigation

Cover

GitHub Repo stars GitHub Downloads (all assets, all releases) GitHub Release X (formerly Twitter) Follow

Download | Website | English | 中文 | 日本語

Maple Mono

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

Features

  • ✨ 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.

2-1.png

ScreenShots

showcase.png

  • Pictured by CodeImg
  • Theme: Maple
  • Config: font size 16px, line height 1.8, default letter spacing

Download

You can download all the font archives from Releases.

Scoop (Windows)

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

Homebrew (MacOS, Linux)

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

AUR (Arch Linux)

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

CDN

Maple Mono

Maple Mono CN

Usage & Feature Configurations

See in document or try it in Playground

Note

The web tool for custom build is under development.

Naming FAQ

Features

  • Ligature: Default version with ligatures (Maple Mono)
  • No-Ligature: Default version without ligatures (Maple Mono NL)
  • Normal-Ligature: --normal preset with ligatures (Maple Mono Normal)
  • Normal-No-Ligature: --normal preset without ligatures (Maple Mono Normal NL)

Format and Glyph Set

  • Variable: Minimal version, smoothly change font weight by variable
  • TTF: Minimal version, ttf format [Recommend!]
  • OTF: Minimal version, otf format
  • WOFF2: Minimal version, woff2 format, for small size on web pages
  • NF: Nerd-Font patched version, add icons for terminal (With -NF suffix)
  • 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)

Font Hint

  • 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.

Custom Build

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.

Use Github Actions

You can use Github Actions to build the font.

  1. Fork the repo
  2. (Optional) Change the content in config.json
  3. Go to Actions tab
  4. Click on Custom Build menu item on the left
  5. Click on Run workflow button with options setup
  6. Wait for the build to finish
  7. Download the font archives from Releases

Use Docker

git clone https://github.com/subframe7536/maple-font --depth 1 -b variable
docker build -t maple-font .
docker run -v "$(pwd)/fonts:/app/fonts" -e BUILD_ARGS="--normal" maple-font

Local Build

Clone the repo and run on your local machine. Make sure you have python3 and pip installed

git clone https://github.com/subframe7536/maple-font --depth 1 -b variable
pip install -r requirements.txt
python build.py
  • For Ubuntu or Debian, maybe python-is-python3 is needed as well

If you have trouble installing the dependencies, just create a new GitHub Codespace and run the commands there

Custom Nerd-Font

For custom font-patcher args, font-forge (and maybe python3-fontforge as well) is required.

Maybe you should also change "nerd_font.extra_args" in config.json

Default args: -l --careful --outputdir dir

  • if "nerd_font.mono" is true, then add --mono

Preset

Run build.py with --normal flag, make the font looks not such "Opinioned" , just like JetBrains Mono (with slashed zero).

Font Feature Freeze

There are three kind of options for feature freeze (Why):

  1. enable: Forcely enable the features without setting up cvXX / ssXX / zero in font features config, just as default glyphs / ligatures
  2. disable: Remove the features in cvXX / ssXX / zero, which will no longer effect, even if you enable it manually
  3. ignore: Do nothing

Load Custom Feature File

Run build.py with --apply-fea-file flag, the feature file from source/features/{regular,italic}.fea will be applied into variable font. You can modify it to change all features, e.g. remove some ligatures in calt.

Chinese version

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 tooooo large, there is a EXPERIMENTAL build option cn.narrow or flag --cn-narrow to narrow spacing in CN glyphs. You can see effect and track issues in #249

GitHub Mirror

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.

Build Script Usage

usage: build.py [-h] [-v] [-d] [--debug] [-n] [--feat FEAT] [--apply-fea-file]
                [--hinted | --no-hinted] [--liga | --no-liga] [--cn-narrow]
                [--nerd-font | --no-nerd-font] [--cn | --no-cn] [--cn-both]
                [--ttf-only] [--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, skip optimization

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
  --cn-narrow       Make CN characters narrow (experimental)

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
  --cache           Reuse font cache of TTF, OTF and Woff2 formats
  --cn-rebuild      Reinstantiate CN base font
  --archive         Build font archives with config and license. If has `--cache`
                    flag, only archive Nerd-Font and CN formats

Credit

Sponser

If this font is helpful to you, please feel free to buy me a coffee

or sponser me through Afdian

Star History

Star History Chart

License

SIL Open Font License 1.1

About

Maple Mono: Open source monospace font with round corner, ligatures and Nerd-Font for IDE and terminal, fine-grained customization options. 带连字和控制台图标的圆角等宽字体,中英文宽度完美2:1,细粒度的自定义选项

Topics

Resources

License

Stars

Watchers

Forks