1## Fira Code: monospaced font with programming ligatures 2 3<img src="./showcases/fira_code_logo.svg"> 4 5### Problem 6 7Programmers 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. 8 9### Solution 10 11#### [Download v.2](https://github.com/tonsky/FiraCode/releases/download/2/FiraCode_2.zip) · [How to install](https://github.com/tonsky/FiraCode/wiki) · [Troubleshooting](https://github.com/tonsky/FiraCode/wiki#troubleshooting) · [News & updates](https://twitter.com/FiraCode) 12 13<a href="https://patreon.com/tonsky" target="_blank"><img src="./fira_code_patreon.png"></a> 14 15Fira 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. 16 17<img src="./showcases/all_ligatures.png"> 18 19### Code examples 20 21Ruby: 22 23<img src="./showcases/ruby.png"> 24 25JavaScript: 26 27<img src="./showcases/javascript.png"> 28 29PHP: 30 31<img src="./showcases/php.png"> 32 33Erlang: 34 35<img src="./showcases/erlang.png"> 36 37Elixir: 38 39<img src="/showcases/elixir.png"> 40 41Go: 42 43<img src="./showcases/go.png"> 44 45LiveScript: 46 47<img src="./showcases/livescript.png"> 48 49Clojure: 50 51<img src="./showcases/clojure.png"> 52 53Swift: 54 55<img src="./showcases/swift.png"> 56 57Stylistic sets: 58 59See [How to enable](https://github.com/tonsky/FiraCode/wiki/How-to-enable-stylistic-sets) 60 61<img src="./showcases/stylistic_sets.png"> 62 63 64### Terminal support 65 66| Works | Doesn’t work | 67| ------------------ | ------------------ | 68| **Butterfly** | **Alacritty** | 69| **crosh** (ChromeOS, [instructions](https://github.com/tonsky/FiraCode/wiki/ChromeOS-Terminal)) | **Windows Console (conhost.exe)** | 70| **Hyper.app** | **Cmder** | 71| **iTerm 2** ([3.1+](https://gitlab.com/gnachman/iterm2/issues/3568#note_13118332)) | **ConEmu** | 72| **Kitty** | **GNOME Terminal** | 73| **Konsole** | **mate-terminal** | 74| **mintty** (partial support [2.8.3+](https://github.com/mintty/mintty/issues/601))| **PuTTY** | 75| **QTerminal** | **rxvt** | 76| **Terminal.app** | **xterm** | 77| **Termux** | **ZOC** (Windows) | 78| **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)) | 79| **upterm** | 80| **Windows Terminal** | 81| **ZOC** (macOS) | 82 83### Editor support 84 85| Works | Doesn’t work | 86| ----- | -------------- | 87| **Abricotine** | **Arduino IDE** | 88| **Android Studio** (2.3+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Adobe Dreamweaver** | 89| **Anjuta** (unless at the EOF) | **Delphi IDE** | 90| **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)) | 91| **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)) | 92| **BBEdit/TextWrangler** (v. 11 only, [instructions](https://github.com/tonsky/FiraCode/wiki/BBEdit-instructions)) | **gVim** (Windows [workaround](https://github.com/tonsky/FiraCode/issues/462)) | 93| **Brackets** (with [this plugin](https://github.com/polo2ro/firacode-in-brackets)) | **IDLE** | 94| **Chocolat** | **KDevelop 4** | 95| **CLion** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | **Monkey Studio IDE** | 96| **Cloud9** ([instructions](https://github.com/tonsky/FiraCode/wiki/Cloud9-Instructions)) | | 97| **Coda 2** | | 98| **CodeLite** | | 99| **Eclipse** (Mac 4.7+, Linux) | | 100| **elementary Code** | | 101| **Geany** | 102| **gEdit / Pluma** | 103| **GNOME Builder** | 104| **GoormIDE** ([instructions](https://github.com/tonsky/FiraCode/wiki/GoormIDE-Instructions)) | 105| **IntelliJ IDEA** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | 106| **Kate, KWrite** | 107| **KDevelop 5+** | 108| **Komodo** | 109| **Leafpad** | 110| **LibreOffice** | 111| **LightTable** ([instructions](https://github.com/tonsky/FiraCode/wiki/LightTable-instructions)) | 112| **LINQPad** | 113| **MacVim** 7.4 or newer ([instructions](https://github.com/tonsky/FiraCode/wiki/MacVim-instructions)) | 114| **Mancy** | 115| **Meld** | 116| **Mousepad** | 117| **NeoVim-gtk** | 118| **NetBeans** | 119| **Notepad** (Win) | 120| **Notepad++** (with a [workaround](https://github.com/notepad-plus-plus/notepad-plus-plus/issues/2287#issuecomment-256638098)) | 121| **PhpStorm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | 122| **PyCharm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | 123| **QtCreator** | 124| **Rider** | 125| **RStudio** ([instructions](https://github.com/tonsky/FiraCode/wiki/RStudio-instructions)) | 126| **RubyMine** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | 127| **Scratch** | 128| **Scribus** (1.5.3+) | 129| **SublimeText** (3146+) | 130| **Spyder IDE** (only with Qt5) | 131| **SuperCollider 3** | 132| **TextAdept** (Linux, Mac) | 133| **TextEdit** | 134| **TextMate 2** | 135| **VimR** ([instructions](https://github.com/qvacua/vimr/wiki#ligatures)) | 136| **Visual Studio** (2015+, [instructions](https://github.com/tonsky/FiraCode/wiki/Visual-Studio-Instructions)) | 137| **Visual Studio Code** ([instructions](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions)) | 138| **WebStorm** (2016.2+, [instructions](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions)) | 139| **Xamarin Studio/Monodevelop** | 140| **Xcode** (8.0+, otherwise [with plugin](https://github.com/robertvojta/LigatureXcodePlugin)) | 141| Probably work: **Smultron, Vico** | Under question: **Code::Blocks IDE** | 142 143### Browser support 144 145```html 146<!-- HTML --> 147<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tonsky/FiraCode@1.207/distr/fira_code.css"> 148``` 149 150```css 151/* CSS */ 152@import url(https://cdn.jsdelivr.net/gh/tonsky/FiraCode@1.207/distr/fira_code.css); 153``` 154 155```css 156/* Specify in CSS */ 157font-family: 'Fira Code', monospace; 158``` 159 160 161- IE 10+, Edge: enable with `font-feature-settings: "calt" 1;` 162- Firefox 163- Safari 164- Chromium-based browsers (Chrome, Opera) 165- ACE 166- CodeMirror (enable with `font-variant-ligatures: contextual;`) 167 168### Projects using Fira Code 169 170- All [JetBrains products](https://www.jetbrains.com/) 171- [CodePen](https://codepen.io/) 172- [Blink Shell](http://www.blink.sh/) 173- [Klipse](http://app.klipse.tech/) 174- [IlyaBirman.net](http://ilyabirman.net/) 175- [EvilMartians.com](https://evilmartians.com/) 176- [Web Maker](https://webmakerapp.com/) 177- [FromScratch](https://fromscratch.rocks/) 178- [PEP20.org](https://pep20.org/) 179 180### Alternatives 181 182Other monospaced fonts with ligatures: 183 184- [Hasklig](https://github.com/i-tu/Hasklig) (free) 185- [PragmataPro](http://www.fsd.it/fonts/pragmatapro.htm) (€59) 186- [Monoid](http://larsenwork.com/monoid/) (free) 187- [Fixedsys Excelsior](https://github.com/kika/fixedsys) (free) 188- [Iosevka](https://be5invis.github.io/Iosevka/) (free) 189- [DejaVu Sans Code](https://github.com/SSNikolaevich/DejaVuSansCode) (free) 190- [Victor Mono](https://rubjo.github.io/victor-mono/) (free) 191 192### Building Fira Code locally 193 194In case you want to alter FiraCode.glyphs and build OTF/TTF/WOFF files yourself, this is setup I use on macOS: 195 196```bash 197# install all required build tools 198./script/bootstrap 199 200# build the font files 201./script/build 202 203# install OTFs to ~/Library/Fonts 204./script/install 205``` 206 207### Credits 208 209- Author: Nikita Prokopov [@nikitonsky](https://twitter.com/nikitonsky) 210- Based on: [Fira Mono](https://github.com/mozilla/Fira) 211- Inspired by: [Hasklig](https://github.com/i-tu/Hasklig) 212 213## Why `Terminess` and not `Terminus`? 214 215What'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] 216 217Some fonts have parts of their name "reserved" per the [Reserved Font Name mechanism][SIL-RFN]: 218> No Modified Version of the Font Software may use the Reserved Font 219> Name(s) unless explicit written permission is granted by the corresponding 220> Copyright Holder. This restriction only applies to the primary font name as 221> presented to the users. 222 223- The main goals seem to be to: `Avoid collisions`, `Protect authors`, `Minimize support`, and `Encourage derivatives` 224 225See the [Reserved Font Name section][SIL-RFN] for additional information 226 227## Which font? 228 229### TL;DR 230 231* Pick your font family and then select from the `'complete'` directory. 232 * If you are on Windows pick a font with the `'Windows Compatible'` suffix. 233 * This includes specific tweaks to ensure the font works on Windows, in particular monospace identification and font name length limitations 234 * If you are limited to monospaced fonts (because of your terminal, etc) then pick a font with the `'Mono'` suffix. 235 * This denotes that the Nerd Font glyphs will be monospaced not necessarily that the entire font will be monospaced 236 237### Ligatures 238 239By the *Nerd Font* policy, the variant with the `'Mono'` suffix is not supposed to have any ligatures. 240Use the non-*Mono* variants to have ligatures. 241 242### Explanation 243 244Once you narrow down your font choice of family (`Droid Sans`, `Inconsolata`, etc) and style (`bold`, `italic`, etc) you have 2 main choices: 245 246#### `Option 1: Download already patched font` 247 248 * download an already patched font from the `complete` folder 249 * 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. 250 251#### `Option 2: Patch your own font` 252 253 * patch your own variations with the various options provided by the font patcher (see each font's readme for full list of combinations available) 254 * This is the option you want if the font you use is _not_ already included or you want maximum control of what's included 255 * 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. 256 257 258For more information see: [The FAQ](https://github.com/ryanoasis/nerd-fonts/wiki/FAQ-and-Troubleshooting#which-font) 259 260 261[vim-devicons]:https://github.com/ryanoasis/vim-devicons 262[vorillaz-devicons]:https://vorillaz.github.io/devicons/ 263[font-awesome]:https://github.com/FortAwesome/Font-Awesome 264[octicons]:https://github.com/primer/octicons 265[gabrielelana-pomicons]:https://github.com/gabrielelana/pomicons 266[Seti-UI]:https://atom.io/themes/seti-ui 267[ryanoasis-powerline-extra-symbols]:https://github.com/ryanoasis/powerline-extra-symbols 268[SIL-RFN]:http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web_fonts_and_RFNs#14cbfd4a 269 270