In Windows, cmd.exe is a command line shell, not a terminal/console host application, ConHost.exe is the correct application, and is now officially called Windows Console, and does not support programming ligatures, however, the new Windows Terminal does support programming ligatures, and includes support for it with cmd.exe, as cmd.exe itself does not implement this functionality. |
||
---|---|---|
clojure | ||
distr | ||
googlefonts-qa | ||
showcases | ||
.gitignore | ||
AUTHORS | ||
build.sh | ||
CHANGELOG.md | ||
deps.edn | ||
fira_code_patreon.png | ||
FiraCode.glyphs | ||
LICENSE | ||
package.json | ||
README.md | ||
release.sh |
Fira Code: monospaced font with programming ligatures
Problem
Programmers 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.
Solution
Download v1.206 · How to install · Troubleshooting · News & updates
Fira Code is an extension of the Fira Mono font containing a set of 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.
![](/tonsky/FiraCode/media/commit/f8c99731278da3ba28b037b27d53f9401734bb2e/showcases/all_ligatures.png)
Code examples
Ruby:
![](/tonsky/FiraCode/media/commit/f8c99731278da3ba28b037b27d53f9401734bb2e/showcases/ruby.png)
JavaScript:
![](/tonsky/FiraCode/media/commit/f8c99731278da3ba28b037b27d53f9401734bb2e/showcases/javascript.png)
PHP:
![](/tonsky/FiraCode/media/commit/f8c99731278da3ba28b037b27d53f9401734bb2e/showcases/php.png)
Erlang:
![](/tonsky/FiraCode/media/commit/f8c99731278da3ba28b037b27d53f9401734bb2e/showcases/erlang.png)
Elixir:
![](/showcases/elixir.png)
Go:
![](/tonsky/FiraCode/media/commit/f8c99731278da3ba28b037b27d53f9401734bb2e/showcases/go.png)
LiveScript:
![](/tonsky/FiraCode/media/commit/f8c99731278da3ba28b037b27d53f9401734bb2e/showcases/livescript.png)
Clojure:
![](/tonsky/FiraCode/media/commit/f8c99731278da3ba28b037b27d53f9401734bb2e/showcases/clojure.png)
Swift:
![](/tonsky/FiraCode/media/commit/f8c99731278da3ba28b037b27d53f9401734bb2e/showcases/swift.png)
Terminal support
Works | Doesn’t work |
---|---|
Butterfly | Alacritty |
crosh (ChromeOS, instructions) | Windows Console (conhost.exe) |
Hyper.app | Cmder |
iTerm 2 (3.1+) | ConEmu |
Kitty | GNOME Terminal |
Konsole | mate-terminal |
mintty (partial support 2.8.3+) | PuTTY |
QTerminal | rxvt |
Terminal.app | ZOC (Windows) |
Termux | gtkterm, guake, LXTerminal, sakura, Terminator, xfce4-terminal, and other libvte-based terminals (bug report) |
Token2Shell/MD | |
upterm | |
Windows Terminal | |
ZOC (macOS) |
Editor support
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) | Eclipse (Win, vote here) |
Atom 1.1 or newer (instructions) | Standalone Emacs (workaround) |
BBEdit/TextWrangler (v. 11 only, instructions) | gVim (Windows workaround) |
Brackets (with this plugin) | IDLE |
Chocolat | KDevelop 4 |
CLion (2016.2+, instructions) | Monkey Studio IDE |
Cloud9 (instructions) | |
Coda 2 | |
CodeLite | |
Eclipse (Mac 4.7+, Linux) | |
elementary Code | |
Geany | |
gEdit / Pluma | |
GNOME Builder | |
GoormIDE (instructions) | |
IntelliJ IDEA (2016.2+, instructions) | |
Kate, KWrite | |
Komodo | |
Leafpad | |
LibreOffice | |
LightTable (instructions) | |
LINQPad | |
MacVim 7.4 or newer (instructions) | |
Mancy | |
Meld | |
Mousepad | |
NeoVim-gtk | |
NetBeans | |
Notepad (Win) | |
Notepad++ (with a workaround) | |
PhpStorm (2016.2+, instructions) | |
PyCharm (2016.2+, instructions) | |
QtCreator | |
Rider | |
RStudio (instructions) | |
RubyMine (2016.2+, instructions) | |
Scratch | |
Scribus (1.5.3+) | |
SublimeText (3146+) | |
Spyder IDE (only with Qt5) | |
SuperCollider 3 | |
TextAdept (Linux, Mac) | |
TextEdit | |
TextMate 2 | |
VimR (instructions) | |
Visual Studio 2015 | |
Visual Studio 2017 (instructions) | |
Visual Studio Code (instructions) | |
WebStorm (2016.2+, instructions) | |
Xamarin Studio/Monodevelop | |
Xcode (8.0+, otherwise with plugin) | |
Probably work: Smultron, Vico | Under question: Code::Blocks IDE |
Browser support
<!-- HTML -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tonsky/FiraCode@1.206/distr/fira_code.css">
/* CSS */
@import url(https://cdn.jsdelivr.net/gh/tonsky/FiraCode@1.206/distr/fira_code.css);
/* Specify in CSS */
font-family: 'Fira Code', monospace;
- IE 10+, Edge: enable with
font-feature-settings: "calt" 1;
- Firefox
- Safari
- Chromium-based browsers (Chrome, Opera)
- ACE
- CodeMirror (enable with
font-variant-ligatures: contextual;
)
Projects using Fira Code
- All JetBrains products
- CodePen
- Blink Shell
- Klipse
- IlyaBirman.net
- EvilMartians.com
- Web Maker
- FromScratch
- PEP20.org
Alternatives
Other monospaced fonts with ligatures:
- Hasklig (free)
- PragmataPro (€59)
- Monoid (free)
- Fixedsys Excelsior (free)
- Iosevka (free)
- DejaVu Sans Code (free)
Building
On macOS:
sudo easy_install pip
pip install virtualenv --user
python -m virtualenv venv
source venv/bin/activate
pip install gftools
pip install fontmake
brew install ttfautohint
brew install woff2
brew tap bramstein/webfonttools
brew install sfnt2woff-zopfli
Run ./build.sh
Credits
- Author: Nikita Prokopov @nikitonsky
- Based on: Fira Mono
- Inspired by: Hasklig