Fira Code: monospaced font with programming ligatures
npm install firacodeProgrammers use a lot of symbols, often encoded with several characters. For the human brain, sequences like ->, <= or := are single logical tokens, even if they take two or three characters on the screen. Your eye spends a non-zero amount of energy to scan, parse and join multiple characters into a single logical one. Ideally, all programming languages should be designed with full-fledged Unicode symbols for operators, but that’s not the case yet.
Fira Code is a free monospaced font containing ligatures for common programming multi-character combinations. This is just a font rendering feature: underlying code remains ASCII-compatible. This helps to read and understand code faster. For some frequent sequences like .. or //, ligatures allow us to correct spacing.
Then:
- How to Install
- Troubleshooting
- News & Updates
Fira Code is a personal, free-time project with no funding and a huge feature request backlog. If you love it, consider supporting its development via GitHub Sponsors or Patreon. Any help counts!
Left: ligatures as rendered in Fira Code. Right: same character sequences without ligatures.

Fira Code comes with a huge variety of arrows. Even better: you can make them as long as you like and combine start/middle/end fragments however you want!

Fira Code is not only about ligatures. Some fine-tuning is done for punctuation and frequent letter pairs.

Fira Code comes with a few different character variants, so that everyone can choose what’s best for them. How to enable

Some ligatures can be altered or enabled using stylistic sets/character variants:

Being a programming font, Fira Code has fantastic support for ASCII/box drawing, powerline and other forms of console UIs:

Fira Code is the first programming font to offer dedicated glyphs to render progress bars:

In action:

We hope more programming fonts will adopt this convention and ship their own versions.
Unicode coverage makes Fira Code a great choice for mathematical writing:



| Works | Doesn’t work |
|-------|----------------|
| Abricotine | Arduino IDE |
| Android Studio (2.3+, instructions) | Adobe Dreamweaver |
| Anjuta (unless at the EOF) | Delphi IDE |
| AppCode (2016.2+, instructions) | Standalone Emacs (workaround) |
| Atom 1.1 or newer (instructions) | Godot (issue) |
| BBEdit/TextWrangler (v. 11 only, instructions) | IDLE |
| Brackets (with this plugin) | KDevelop 4 |
| Chocolat | Monkey Studio IDE |
| CLion (2016.2+, instructions) | UltraEdit |
| Cloud9 (instructions) |
| Coda 2 |
| CodeLite |
| CodeRunner |
| CotEditor |
| Eclipse |
| elementary Code |
| Geany (1.37+) |
| gEdit / Pluma |
| GNOME Builder |
| GoormIDE (instructions) |
| gVim (Windows, GTK) |
| IntelliJ IDEA (2016.2+, instructions) |
| Kate, KWrite |
| KDevelop 5+ |
| Komodo |
| Leafpad |
| LibreOffice |
| LightTable (instructions) |
| LINQPad |
| MacVim 7.4 or newer (instructions) |
| Mancy |
| MATLAB (instructions) |
| Meld |
| Mousepad |
| NeoVim-gtk |
| NetBeans |
| Notepad (Windows) |
| Notepad++ (with a workaround) |
| Notepad3 (instructions)|
| Nova |
| PhpStorm (2016.2+, instructions) |
| PyCharm (2016.2+, instructions) |
| QOwnNotes (21.16.6+) |
| QtCreator |
| Rider |
| RStudio (instructions) |
| RubyMine (2016.2+, instructions) |
| Scratch |
| Scribus (1.5.3+) |
| SublimeText (3146+) |
| Spyder IDE (only with Qt5) |
| SuperCollider 3 |
| TextAdept (Linux, macOS) |
| TextEdit |
| TextMate 2 |
| VimR (instructions) |
| Visual Studio (2015+, instructions) |
| Visual Studio Code (instructions) |
| WebStorm (2016.2+, instructions) |
| Xamarin Studio/Monodevelop |
| Xcode (8.0+, otherwise with plugin) |
| Xi |
| Probably work: Smultron, Vico | Under question: Code::Blocks IDE |
| Platform | Works | Doesn’t work |
|----------------|-------|--------------|
| macOS | Hyper (see #3607)
iTerm 2
Kitty
Terminal.app
ZOC | Alacritty |
| Windows | Hyper (see #3607)
Mintty
Token2Shell
Windows Terminal | Alacritty
Cmder
ConEmu
PuTTY
Windows Console
ZOC |
| Linux | Hyper (see #3607)
Kitty
Konsole
QTerminal
Termux
st (patch) | Alacritty
GNOME Terminal
libvte-based terminals (bug report):
``html`
`css`
/ CSS /
@import url(https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css);
`css
/ Specify in CSS /
code { font-family: 'Fira Code', monospace; }
@supports (font-variation-settings: normal) {
code { font-family: 'Fira Code VF', monospace; }
}
`
- IE 10+, Edge Legacy: enable with font-feature-settings: "calt";font-variant-ligatures: contextual;
- Firefox
- Safari
- Chromium-based browsers (Chrome, Opera)
- ACE
- CodeMirror (enable with )
- CodePen
- Blink Shell
- Klipse
- IlyaBirman.net
- EvilMartians.com
- Web Maker
- FromScratch
- PEP20.org
Free monospaced fonts with ligatures:
- Hasklig
- Monoid
- Fixedsys Excelsior
- Iosevka
- DejaVu Sans Code
- Victor Mono
- Cascadia Code
- JetBrains Mono
Paid monospaced fonts with ligatures:
In case you want to alter FiraCode.glyphs and build OTF/TTF/WOFF files yourself, this is the setup I use on macOS:
`bashinstall all required build tools
./script/bootstrap_macos.sh
Alternatively, you can build Fira Code using Docker:
`bash
install dependencies in a container and build the font files
makepackage the font files from dist/ into a zip
make package
``- Author: Nikita Prokopov @nikitonsky
- Based on: Fira Mono
- Inspired by: Hasklig