Fira Code: free monospaced font with programming ligatures
 
 
 
 
 
 
Go to file
Dave Shaw 0eebda6504 Adding LINQPad as a supported editor (#358) 2017-02-15 21:42:40 +03:00
distr Version 1.204 2016-11-06 02:42:10 +07:00
showcases Add Elixir showcase to README.md (#347) 2017-01-18 14:54:18 +07:00
.gitignore
FiraCode.glyphs Version 1.204 2016-11-06 02:42:10 +07:00
LICENSE
README.md Adding LINQPad as a supported editor (#358) 2017-02-15 21:42:40 +03:00
gen_calt.clj
release.sh Version 1.204 2016-11-06 02:42:10 +07:00

README.md

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 thats not the case yet.

Solution

Download v1.204 · How to install · 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.

Code examples

Ruby:

JavaScript:

Erlang:

Elixir:

Go:

LiveScript:

Clojure:

Terminal support

Works Doesnt work
Black Screen Cmder
Butterfly ConEmu
Hyper.app GNOME Terminal
Konsole iTerm 2 (coming in 3.1)
QTerminal mate-terminal
Terminal.app (OS X default terminal) mintty
Termux (Android terminal emulator) PuTTY
rxvt
gtkterm, guake, LXTerminal, sakura, Terminator, xfce4-terminal, and other libvte-based terminals (bug report)

Editor support

Works Doesnt work
Anjuta (unless at the EOF) Arduino IDE
AppCode (2016.2+, instructions) Adobe Dreamweaver
Atom 1.1 or newer (instructions) Eclipse (Mac and Win, vote here)
BBEdit/TextWrangler (instructions) Standalone Emacs (workaround)
Brackets (with this plugin) gVim
Chocolat IDLE
CLion (2016.2+, instructions) KDevelop 4
Coda 2 Monkey Studio IDE
CodeLite Notepad++
Eclipse (Linux) Spyder IDE
Geany SublimeText (vote here)
gEdit / Pluma
GNOME Builder
IntelliJ IDEA (2016.2+, instructions)
Kate, KWrite
Komodo
Leafpad
LibreOffice
LightTable (instructions)
LINQPad
MacVim 7.4 or newer (instructions)
Mancy
Meld
Mousepad
NetBeans
Notepad (Win)
PhpStorm (2016.2+, instructions)
PyCharm (2016.2+, instructions)
QtCreator
Rider
RStudio (instructions)
RubyMine (2016.2+, instructions)
Scratch
TextAdept (Linux, Mac)
TextEdit
TextMate 2
Visual Studio 2015
Visual Studio Code (instructions)
WebStorm (2016.2+, instructions)
Xamarin Studio/Monodevelop
Xcode (with this plugin)
Probably work: Smultron, Vico Under question: Code::Blocks IDE

Browser support

  • 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;)

Alternatives

Other monospaced fonts with ligatures:

Credits

Changelog

1.204 (November 6, 2016)

  • Added U+25B6 (black right-pointing triangle) and U+25C0 (black left-pointing triangle) (#289)
  • Changed look of Markdown headers ## ### #### to make them easier to tell apart (#287)
  • Fixed BBEdit incorrectly applying ligatures after tab (#274)
  • Returned Nim pragmas {. .} (#279)
  • Added Unicode increment U+2206 (#174, #298)
  • Added fish operators >-> <-< (#297)
  • Added safe navigation operators ?. .? ?: (#215)
  • Added <~> (#179, used in IntelliJ for collapsed methods)
  • Added F# piping operators ||> |||> <|| <||| (#184)
  • Added shebang #! (#169, #193)

1.203 (September 17, 2016)

1.202 (September 17, 2016)

  • Removed {. .} [. .] (. .) (#264)

1.201 (August 30, 2016)

  • Removed [] (#92) {- -} (#248)
  • Removed /** **/ and disabled ligatures for /*/ */* sequences (#219 #238)
  • Added ]# {. .} [. .] (. .) (#214)

1.200 (July 18, 2016)

  • Removed !!! ??? ;;; &&& ||| =~ (#167) ~~~ %%%
  • New safer calt code that doesnt apply ligatures to long sequences of chars, e.g. !!!!, >>>>, etc (#49, #110, #176)
  • Larger + - * and corresponding ligatures (#86)
  • Hexadecimal x (0xFF) is now applied to sequences like 128x128 as well (#161)
  • Added twoTurned (U+218A) and threeTurned (U+218B) (#146)
  • Added whiteFrowningFace (U+2639) (#190)
  • Simplified visual style on markdown headers ## ### #### (#107)
  • Added </> (#147)
  • Provided ttf and webfonts versions (eot, woff, woff2) (#18, #24, #38, #101, #106)
  • Increased spacing in <= >= (#117)

1.102

  • Support for IntelliJ-based IDEs (instructions)
  • Turned on autohinting

1.101

  • Added Light weight
  • Adjusted rules when vertical centering of :, -, * and + occurs

1.100

  • Fixed calt table conflicts (---- would incorrectly render as <!--)
  • Added centered : (between digits, e.g. 10:40)
  • Added lowercase-aligned -, * and + (only between lowercase letters, e.g. kebab case var-name, pointers *ptr etc)

1.000

Added weights:

  • Retina (just slightly heavier than Regular)
  • Medium
  • Bold

Switched to calt instead of liga. You can now “step inside” the ligature in text editors.

Fira Code is now drawn and built in Glyphs 2 app (should improve compatibility).

Added:

<-> <~~ <~ ~~~ ~> ~~>
<$ <+ <* *> +> $>
;;; ::: !!! ??? %% %%% ## ### ####
.- #_( =< **/ 0x www []

Redrawn:

{- -} ~= =~ =<< >>= <$> <=> .=

Removed: ?:

Total ligatures count: 115

0.6

Redrawn from Fira Mono 3.204 (slightly heavier weight)

Added:

** *** +++ -- --- ?:
/= /== .= ^= =~ ?= ||= |=
<<< <=< -<< -< >- >>- >=> >>>
<*> <|> <$> <+>
<!-- {- -} /** \\ \\\ ..< ?? ||| &&& <| |>

Added support for Powerline

0.5

Added: #{ ~- -~ <== ==> /// ;; </

0.4

  • Added ~= ~~ #[
  • Rolled back && and || to more traditional look
  • === and !== are now rendered with 3 horizontal bars

0.3

Added: ~@ #? =:= =<

0.2.1

Fixed width of && and ||

0.2

Added: --> <-- && || =>> =/=

0.1

>>= =<< <<= ->> -> => <<- <-
=== == <=> >= <= >> << !== != <>
:= ++ #( #_
:: ... .. !! // /* */ />