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