Convert Figma logo to code with AI

tonsky logoFiraCode

Free monospaced font with programming ligatures

76,660
3,086
76,660
394

Top Related Projects

This is a fun, new monospaced font that includes programming ligatures and is designed to enhance the modern look and feel of the Windows Terminal.

JetBrains Mono – the free and open-source typeface for developers

Monospaced font family for user interface and coding environments

18,991

Versatile typeface for code, from code.

A free programming font with cursive italics and ligatures. Donations welcome ❤️

16,391

A typeface designed for source code

Quick Overview

Fira Code is a free monospaced font with programming ligatures. It's designed to enhance code readability by combining multiple characters into single logical glyphs, making code more visually appealing and easier to scan.

Pros

  • Improves code readability with ligatures for common programming symbols
  • Supports a wide range of programming languages and IDEs
  • Regularly updated with new ligatures and improvements
  • Available in multiple weights (Light, Regular, Medium, Bold)

Cons

  • May take some time for users to get accustomed to ligatures
  • Not all text editors or IDEs support ligatures out of the box
  • Some developers prefer traditional monospaced fonts without ligatures
  • Ligatures might occasionally cause confusion in certain programming contexts

Getting Started

To use Fira Code in your development environment:

  1. Download the font from the GitHub releases page.
  2. Install the font on your system.
  3. Configure your text editor or IDE to use Fira Code as the default font.
  4. Enable ligatures in your editor settings (if necessary).

For example, in Visual Studio Code, add the following to your settings.json:

{
  "editor.fontFamily": "Fira Code",
  "editor.fontLigatures": true
}

For other editors and IDEs, refer to their documentation for specific instructions on enabling custom fonts and ligatures.

Competitor Comparisons

This is a fun, new monospaced font that includes programming ligatures and is designed to enhance the modern look and feel of the Windows Terminal.

Pros of Cascadia Code

  • Designed specifically for Windows Terminal and VS Code, offering optimal readability in these environments
  • Includes programming ligatures and a powerline version for enhanced terminal experiences
  • Actively maintained by Microsoft with frequent updates and improvements

Cons of Cascadia Code

  • Limited language support compared to FiraCode's extensive coverage
  • Newer font with less widespread adoption and community contributions
  • May not render as well on non-Windows systems or in certain applications

Code Comparison

FiraCode:

<= >= != === !== -> <-

Cascadia Code:

<= >= != === !== -> <-

Both fonts support similar programming ligatures, enhancing code readability. However, FiraCode offers a wider range of ligatures and language-specific symbols.

Key Differences

  • FiraCode is more established and widely adopted across various platforms and editors
  • Cascadia Code is tailored for Microsoft environments but may lack some features in other contexts
  • FiraCode offers broader language support and more extensive ligature options
  • Cascadia Code provides a cohesive experience within the Microsoft ecosystem

Choose FiraCode for a versatile, widely-supported programming font with extensive ligatures. Opt for Cascadia Code if you primarily work in Windows environments and want a font optimized for Microsoft tools.

JetBrains Mono – the free and open-source typeface for developers

Pros of JetBrainsMono

  • Designed specifically for coding environments, with a focus on readability in IDEs
  • Includes a wider range of programming-specific ligatures and symbols
  • Offers variable fonts for more flexibility in weight and style

Cons of JetBrainsMono

  • Less widespread adoption compared to FiraCode
  • May have fewer stylistic variants and weights available
  • Some users report that it feels less "polished" in certain rendering environments

Code Comparison

FiraCode:

if (x => 0 && x <= 100) {
  console.log("x is between 0 and 100");
}

JetBrainsMono:

if (x >= 0 && x <= 100) {
  console.log("x is between 0 and 100");
}

The main difference in this example is the rendering of the >= operator. JetBrainsMono typically offers a more distinct ligature for this operator, which some developers find easier to read at a glance. However, both fonts provide clear and readable code presentation, with the choice often coming down to personal preference and the specific coding environment being used.

Monospaced font family for user interface and coding environments

Pros of Source Code Pro

  • Wider range of weights and styles, offering more flexibility in design
  • Developed by Adobe, ensuring professional-grade quality and support
  • Extensive language support, including Cyrillic and Greek characters

Cons of Source Code Pro

  • Lacks ligatures, which can enhance readability for certain programming constructs
  • Less focus on programming-specific glyphs compared to FiraCode
  • May not be as visually distinctive in coding environments

Code Comparison

Source Code Pro:

def example_function(x, y):
    return x != y and x <= y

FiraCode:

def example_function(x, y):
    return x != y and x <= y

In this comparison, FiraCode would display ligatures for != and <=, while Source Code Pro would not. FiraCode's ligatures can make these operators more visually distinct and easier to read at a glance.

Both fonts are excellent choices for coding, with Source Code Pro offering a more traditional and versatile typeface, while FiraCode provides enhanced readability through programming-specific ligatures and glyphs. The choice between them often comes down to personal preference and specific use cases.

18,991

Versatile typeface for code, from code.

Pros of Iosevka

  • Highly customizable with numerous build options
  • Supports a wider range of Unicode characters
  • Offers multiple stylistic sets and width variants

Cons of Iosevka

  • Requires building from source for custom configurations
  • Less widespread adoption compared to FiraCode
  • May have inconsistent rendering on some systems

Code Comparison

FiraCode:

def example_function():
    return [x for x in range(10) if x % 2 == 0]

Iosevka:

def example_function():
    return [x for x in range(10) if x % 2 == 0]

Both fonts provide excellent readability for code, with clear distinctions between similar characters. FiraCode offers ligatures by default, which can enhance readability for some programmers. Iosevka's customizability allows users to choose whether to include ligatures or not.

Iosevka's flexibility in width and style makes it suitable for various coding environments and personal preferences. FiraCode, on the other hand, offers a more consistent out-of-the-box experience across different platforms and editors.

Ultimately, the choice between these two fonts depends on individual preferences, desired customization level, and specific use cases in programming environments.

A free programming font with cursive italics and ligatures. Donations welcome ❤️

Pros of Victor Mono

  • Includes both serif and sans-serif variants, offering more style options
  • Features a cursive italic style, which can enhance code readability
  • Provides a wider range of font weights, from extra-light to extra-bold

Cons of Victor Mono

  • Less extensive ligature support compared to FiraCode
  • Newer and less widely adopted in development environments
  • May have fewer specialized programming-specific character designs

Code Comparison

FiraCode:

if (x !== null && typeof x !== 'undefined') {
  console.log('x is defined');
}

Victor Mono:

if (x !== null && typeof x !== 'undefined') {
  console.log('x is defined');
}

While both fonts render code clearly, FiraCode's ligatures combine !== into a single glyph, potentially improving readability. Victor Mono maintains separate characters but offers a distinct cursive style for italics, which can be beneficial for comments or emphasized code.

Both fonts are excellent choices for coding, with FiraCode being more established and Victor Mono offering unique stylistic options. The choice between them often comes down to personal preference and specific use cases.

16,391

A typeface designed for source code

Pros of Hack

  • Designed specifically for source code and terminal use
  • Offers four styles: Regular, Bold, Italic, and Bold Italic
  • Extensive Unicode coverage, including many programming-specific symbols

Cons of Hack

  • Fewer ligatures compared to FiraCode
  • Less frequent updates and maintenance
  • Limited community-driven development and contributions

Code Comparison

Hack:

if (condition) {
    doSomething();
} else {
    doSomethingElse();
}

FiraCode:

if (condition) {
    doSomething();
} else {
    doSomethingElse();
}

The main difference in appearance would be the ligatures in FiraCode, such as the arrow-like => and -> symbols, which are not present in Hack. FiraCode also features a more stylized appearance for certain characters like {} and ().

Both fonts offer excellent readability and are well-suited for programming, but FiraCode's ligatures can enhance code aesthetics and symbol recognition for some developers. Hack, on the other hand, maintains a more traditional monospace appearance while still being optimized for source code display.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Fira Code: free monospaced font with programming ligatures

Fira Code

Read in Español | 简体中文 | 日本語

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

Fira Code is a free monospaced font containing 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.

Download & Install

Fira_Code_v6.2.zip - December 6, 2021 - 2.5 MB

Then:

Sponsors

Fira Code is a personal, free-time project with no funding and a huge feature request backlog. If you love it, consider supporting its development via GitHub Sponsors or Patreon. Any help counts!

Huge thanks to:

WorkOS
Your app, enterprise-ready.
Start selling to enterprise customers with just a few lines of code. Add Single Sign-On (and more) in minutes instead of months.

What’s in the box?

Left: ligatures as rendered in Fira Code. Right: same character sequences without ligatures.

Fira Code comes with a huge variety of arrows. Even better: you can make them as long as you like and combine start/middle/end fragments however you want!

Fira Code is not only about ligatures. Some fine-tuning is done for punctuation and frequent letter pairs.

Fira Code comes with a few different character variants (cv01, cv02, etc), stylistic sets (ss01, ss02 , etc) and other font features (zero, onum, calt, etc), so that everyone can choose what’s best for them. How to enable

Some ligatures can be altered or enabled using stylistic sets/character variants:

Being a programming font, Fira Code has fantastic support for ASCII/box drawing, powerline and other forms of console UIs:

Fira Code is the first programming font to offer dedicated glyphs to render progress bars:

In action:

We hope more programming fonts will adopt this convention and ship their own versions.

Unicode coverage makes Fira Code a great choice for mathematical writing:

How does it look?

Editor compatibility list

WorksDoesn’t work
Arduino IDE (2.0+,same instructions as vscode)Adobe Dreamweaver
AbricotineDelphi IDE
Android Studio (2.3+, instructions)Standalone Emacs (workaround)
Anjuta (unless at the EOF)IDLE
AppCode (2016.2+, instructions)KDevelop 4
Atom 1.1 or newer (instructions)Monkey Studio IDE
BBEdit (14.6+ instructions)UltraEdit (Windows)
Brackets (with this plugin)
Chocolat
CLion (2016.2+, instructions)
Cloud9 (instructions)
Coda 2
CodeLite
CodeRunner
Comma (Under: Preferences > Editor > Font)
CotEditor
Eclipse
elementary Code
Geany (1.37+)
gEdit / Pluma
GNOME Builder
Godot
GoormIDE (instructions)
gVim (Windows, GTK)
IntelliJ IDEA (2016.2+, instructions)
Kate, KWrite
KDevelop 5+
Komodo
Leafpad
LibreOffice
LightTable (instructions)
LINQPad
MacVim 7.4 or newer (instructions)
Mancy
MATLAB (instructions)
Meld
Mousepad
NeoVim-gtk
NetBeans
Notepad (Windows)
Notepad++ (instructions)
Notepad3 (instructions)
Nova
PhpStorm (2016.2+, instructions)
PyCharm (2016.2+, instructions)
QOwnNotes (21.16.6+)
QtCreator
Rider
RStudio (instructions)
RubyMine (2016.2+, instructions)
Scratch
Scribus (1.5.3+)
SublimeText (3146+)
Spyder IDE (only with Qt5)
SuperCollider 3
TeXShop
TextAdept (Linux, macOS)
TextEdit
TextMate 2
UltraEdit (UEX) (Linux)
VimR (instructions)
Visual Studio (2015+, instructions)
Visual Studio Code (instructions)
WebStorm (2016.2+, instructions)
Xamarin Studio/Monodevelop
Xcode (8.0+, otherwise with plugin)
Xi
Probably work: Smultron, VicoUnder question: Code::Blocks IDE

Terminal compatibility list

WorksDoesn’t work
crosh (instructions)Alacritty
Hyper (see #3607)Asbru Connection Manager
iTerm 2Cmder
KittyConEmu
KonsoleGNOME Terminal (ticket)
Minttygtkterm (ticket)
QTerminalguake (ticket)
st (patch)LXTerminal (ticket)
Tabbymate-terminal
Terminal.appPuTTY
Termuxrxvt
Token2Shellsakura (ticket)
Wez’s terminalSecureCRT
Windows TerminalTerminator (ticket)
ZOC (macOS)terminology
Tilix
Windows Console
xfce4-terminal (ticket)
xterm
ZOC (Windows)

Browser support

<!-- HTML -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css">
/* CSS */
@import url(https://cdn.jsdelivr.net/npm/firacode@6.2.0/distr/fira_code.css);
/* Specify in CSS */
code { font-family: 'Fira Code', monospace; }

@supports (font-variation-settings: normal) {
  code { font-family: 'Fira Code VF', monospace; }
}
  • IE 10+, Edge Legacy: enable with font-feature-settings: "calt";
  • Firefox
  • Safari
  • Chromium-based browsers (Chrome, Opera)
  • ACE
  • CodeMirror (enable with font-variant-ligatures: contextual;)

Projects using Fira Code

Alternatives

Free monospaced fonts with ligatures:

Paid monospaced fonts with ligatures:

Building Fira Code locally

In case you want to alter FiraCode.glyphs and build OTF/TTF/WOFF files yourself, this is the setup I use on macOS:

# install all required build tools
./script/bootstrap_macos.sh

# build the font files
./script/build.sh

# install OTFs to ~/Library/Fonts
cp distr/otf/*.otf ~/Library/Fonts

Alternatively, you can build Fira Code using Docker:

# install dependencies in a container and build the font files
make

# package the font files from dist/ into a zip
make package

If you want to permanently enable certain style sets or character variations, maybe because your editor of choice does not allow you to toggle these individually, you can provide the desired features as a comma separated list to the build script via the -f / --features flag.
Default: none.

To separate different versions of your font you can specify the desired font family name with the -n / --family-name flag. The special value 'features' will append a sorted, space separated list of enabled features to the default family name.
Default: "Fira Code"

You can also limit the font weights that will be created with the -w / --weights option.
Default: "Light,Regular,Retina,Medium,SemiBold,Bold"

# locally in your shell
./script/build.sh --features "ss02,ss08,ss10,cv03,cv07,cv14" --family-name "Fira Code straight" --weights "Regular,Bold"

# or via a docker container (creates the family name 'Fira Code cv01 cv02 cv06 cv31 onum ss01 ss03 ss04 zero')
docker run --rm -v "${PWD}":/opt tonsky/firacode:latest ./script/build.sh -f "cv01,cv02,cv06,ss01,zero,onum,ss03,ss04,cv31" -n "features"

# in Git Bash from Git for Windows, or any other MSYS2 based shell, you might need to disable path conversion
MSYS2_ARG_CONV_EXCL="*" docker run --rm -v "${PWD}":/opt tonsky/firacode:latest ./script/build.sh -f "ss02,ss03,ss04,ss05,ss06,ss07"

Credits

NPM DownloadsLast 30 Days