2019-07-09 08:39:17 +02:00
## Fira Code: monospaced font with programming ligatures
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
< img src = "http://s.tonsky.me/imgs/fira_code_logo.svg" >
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
### Problem
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
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.
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
### Solution
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
#### [Download v1.206](https://github.com/tonsky/FiraCode/releases/download/1.206/FiraCode_1.206.zip) · [How to install](https://github.com/tonsky/FiraCode/wiki) · [Troubleshooting](https://github.com/tonsky/FiraCode/wiki#troubleshooting) · [News & updates](https://twitter.com/FiraCode)
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
< a href = "https://patreon.com/tonsky" target = "_blank" > < img src = "./fira_code_patreon.png" > < / a >
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
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.
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
< img src = "./showcases/all_ligatures.png" >
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
### Code examples
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
Ruby:
2017-11-18 23:15:49 +02:00
2019-07-09 08:39:17 +02:00
< img src = "./showcases/ruby.png" >
JavaScript:
< img src = "./showcases/javascript.png" >
PHP:
< img src = "./showcases/php.png" >
Erlang:
< img src = "./showcases/erlang.png" >
Elixir:
< img src = "/showcases/elixir.png" >
Go:
< img src = "./showcases/go.png" >
LiveScript:
< img src = "./showcases/livescript.png" >
Clojure:
< img src = "./showcases/clojure.png" >
Swift:
< img src = "./showcases/swift.png" >
### Terminal support
| Works | Doesn’t work |
| ------------------ | ------------------ |
| **Butterfly** | **Alacritty** |
| **Hyper.app** | **cmd.exe** |
| **iTerm 2** ([3.1+](https://gitlab.com/gnachman/iterm2/issues/3568#note_13118332)) | **Cmder** |
| **Kitty** | **ConEmu** |
| **Konsole** | **GNOME Terminal** |
| **mintty** ([2.8.3+](https://github.com/mintty/mintty/issues/601))| **mate-terminal** |
| **QTerminal** | **PuTTY** |
| **Terminal.app** | **rxvt** |
| **Termux** | **ZOC** (Windows) |
| **Token2Shell/MD** | **gtkterm, guake, LXTerminal, sakura, Terminator, xfce4-terminal,** and other libvte-based terminals ([bug report](https://bugzilla.gnome.org/show_bug.cgi?id=584160)) |
| **upterm** |
| **ZOC** (macOS) |
### Editor support
| Works | Doesn’t work |
| ----- | -------------- |
| **Abricotine** | **Arduino IDE** |
| **Android Studio** (2.3+, [instructions ](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions )) | **Adobe Dreamweaver** |
| **Anjuta** (unless at the EOF) | **Delphi IDE** |
| **AppCode** (2016.2+, [instructions ](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions )) | **Eclipse** (Win, [vote here ](https://bugs.eclipse.org/bugs/show_bug.cgi?id=398656 )) |
| **Atom** 1.1 or newer ([instructions](https://github.com/tonsky/FiraCode/wiki/Atom-instructions)) | Standalone **Emacs** ([workaround](https://github.com/tonsky/FiraCode/wiki/Emacs-instructions)) |
| **BBEdit/TextWrangler** (v. 11 only, [instructions ](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions )) | **gVim** (Windows [workaround ](https://github.com/tonsky/FiraCode/issues/462 )) |
| **Brackets** (with [this plugin ](https://github.com/polo2ro/firacode-in-brackets )) | **IDLE** |
| **Chocolat** | **KDevelop 4** |
| **CLion** (2016.2+, [instructions ](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions )) | **Monkey Studio IDE** |
| **Cloud9** ([instructions](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) | |
| **Coda 2** | |
| **CodeLite** | |
| **Eclipse** (Mac 4.7+, Linux) | |
| **elementary Code** | |
| **Geany** |
| **gEdit / Pluma** |
| **GNOME Builder** |
| **IntelliJ IDEA** (2016.2+, [instructions ](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions )) |
| **Kate, KWrite** |
| **Komodo** |
| **Leafpad** |
| **LibreOffice** |
| **LightTable** ([instructions](https://github.com/tonsky/FiraCode/wiki/LightTable-instructions)) |
| **LINQPad** |
| **MacVim** 7.4 or newer ([instructions](https://github.com/tonsky/FiraCode/wiki/MacVim-instructions)) |
| **Mancy** |
| **Meld** |
| **Mousepad** |
| **NeoVim-gtk** |
| **NetBeans** |
| **Notepad** (Win) |
| **Notepad++** (with a [workaround ](https://github.com/notepad-plus-plus/notepad-plus-plus/issues/2287#issuecomment-256638098 )) |
| **PhpStorm** (2016.2+, [instructions ](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions )) |
| **PyCharm** (2016.2+, [instructions ](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions )) |
| **QtCreator** |
| **Rider** |
| **RStudio** ([instructions](https://github.com/tonsky/FiraCode/wiki/RStudio-instructions)) |
| **RubyMine** (2016.2+, [instructions ](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions )) |
| **Scratch** |
| **SublimeText** (3146+) |
| **Spyder IDE** (only with Qt5) |
| **SuperCollider 3** |
| **TextAdept** (Linux, Mac) |
| **TextEdit** |
| **TextMate 2** |
| **VimR** ([instructions](https://github.com/qvacua/vimr/wiki#ligatures)) |
| **Visual Studio 2015** |
| **Visual Studio 2017** |
| **Visual Studio Code** ([instructions](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) |
| **WebStorm** (2016.2+, [instructions ](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions )) |
| **Xamarin Studio/Monodevelop** |
| **Xcode** (8.0+, otherwise [with plugin ](https://github.com/robertvojta/LigatureXcodePlugin )) |
| Probably work: **Smultron, Vico** | Under question: **Code::Blocks IDE** |
### Browser support
```html
<!-- HTML -->
< link rel = "stylesheet" href = "https://cdn.rawgit.com/tonsky/FiraCode/1.206/distr/fira_code.css" >
```
```css
/* CSS */
@import url(https://cdn.rawgit.com/tonsky/FiraCode/1.206/distr/fira_code.css);
```
- 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 ](https://www.jetbrains.com/ )
- [CodePen ](https://codepen.io/ )
- [Blink Shell ](http://www.blink.sh/ )
- [Klipse ](http://app.klipse.tech/ )
- [IlyaBirman.net ](http://ilyabirman.net/ )
- [EvilMartians.com ](https://evilmartians.com/ )
- [Web Maker ](https://webmakerapp.com/ )
- [FromScratch ](https://fromscratch.rocks/ )
- [PEP20.org ](https://pep20.org/ )
### Alternatives
Other monospaced fonts with ligatures:
- [Hasklig ](https://github.com/i-tu/Hasklig ) (free)
- [PragmataPro ](http://www.fsd.it/fonts/pragmatapro.htm ) (€59)
- [Monoid ](http://larsenwork.com/monoid/ ) (free)
- [Fixedsys Excelsior ](https://github.com/kika/fixedsys ) (free)
- [Iosevka ](https://be5invis.github.io/Iosevka/ ) (free)
- [DejaVu Sans Code ](https://github.com/SSNikolaevich/DejaVuSansCode ) (free)
### Credits
- Author: Nikita Prokopov [@nikitonsky ](https://twitter.com/nikitonsky )
- Based on: [Fira Mono ](https://github.com/mozilla/Fira )
- Inspired by: [Hasklig ](https://github.com/i-tu/Hasklig )
2017-08-05 01:13:06 +02:00
## Why `Fura` and not `Fira`?
What's in a name? The reason for the name change is to comply with the SIL Open Font License (OFL), in partcular the [Reserved Font Name mechanism][SIL-RFN]
Some fonts have parts of their name "reserved" per the [Reserved Font Name mechanism][SIL-RFN]:
> No Modified Version of the Font Software may use the Reserved Font
> Name(s) unless explicit written permission is granted by the corresponding
> Copyright Holder. This restriction only applies to the primary font name as
> presented to the users.
- The main goals seem to be to: `Avoid collisions` , `Protect authors` , `Minimize support` , and `Encourage derivatives`
See the [Reserved Font Name section][SIL-RFN] for additional information
2016-11-01 04:31:23 +02:00
## Which font?
### TL;DR
2017-08-05 01:13:06 +02:00
* Pick your font family and then select from the `'complete'` directory.
* If you are on Windows pick a font with the `'Windows Compatible'` suffix.
* This includes specific tweaks to ensure the font works on Windows, in particular monospace identification and font name length limitations
* If you are limited to monospaced fonts (because of your terminal, etc) then pick a font with the `'Mono'` suffix.
* This denotes that the Nerd Font glyphs will be monospaced not necessarily that the entire font will be monospaced
2016-11-01 04:31:23 +02:00
2019-07-09 08:39:17 +02:00
### Ligatures
By the *Nerd Font* policy, the variant with the `'Mono'` suffix is not supposed to have any ligatures.
Use the non-*Mono* variants to have ligatures.
2016-11-01 04:31:23 +02:00
### Explanation
2017-08-05 01:13:06 +02:00
Once you narrow down your font choice of family (`Droid Sans`, `Inconsolata` , etc) and style (`bold`, `italic` , etc) you have 2 main choices:
#### `Option 1: Download already patched font`
2016-11-01 04:31:23 +02:00
* download an already patched font from the `complete` folder
2017-08-05 01:13:06 +02:00
* This is most likely the one you want. It includes **all** of the glyphs from all of the glyph sets. Only caution here is that some fonts have glyphs in the _same_ code point so to include everything some had to be moved to alternate code points.
#### `Option 2: Patch your own font`
2016-11-01 04:31:23 +02:00
* patch your own variations with the various options provided by the font patcher (see each font's readme for full list of combinations available)
2017-08-05 01:13:06 +02:00
* This is the option you want if the font you use is _not_ already included or you want maximum control of what's included
* This contains a list of _all permutations_ of the various glyphs. E.g. You want the font with only [Octicons][octicons] or you want the font with just [Font Awesome][font-awesome] and [Devicons][vorillaz-devicons]. The goal is to provide every combination possible in this folder.
2016-11-01 04:31:23 +02:00
2017-07-28 22:29:44 +02:00
For more information see: [The FAQ ](https://github.com/ryanoasis/nerd-fonts/wiki/FAQ-and-Troubleshooting#which-font )
2016-11-01 04:31:23 +02:00
[vim-devicons]:https://github.com/ryanoasis/vim-devicons
2017-07-28 22:29:44 +02:00
[vorillaz-devicons]:https://vorillaz.github.io/devicons/
2016-11-01 04:31:23 +02:00
[font-awesome]:https://github.com/FortAwesome/Font-Awesome
2017-07-28 22:29:44 +02:00
[octicons]:https://github.com/primer/octicons
2016-11-01 04:31:23 +02:00
[gabrielelana-pomicons]:https://github.com/gabrielelana/pomicons
[Seti-UI]:https://atom.io/themes/seti-ui
[ryanoasis-powerline-extra-symbols]:https://github.com/ryanoasis/powerline-extra-symbols
2017-08-05 01:13:06 +02:00
[SIL-RFN]:http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web_fonts_and_RFNs#14cbfd4a