Rework Fontconfig fallback to use cached list from font_sort

Previous implementation was querying Fontconfig using `charset` in a pattern,
which was leading to unpredictable fallbacks in some cases, since Fontconfig
was picking the font with the most coverage for a given charset, regardless of
user configuration. Moreover all fallback was based on font_match which is
extremely slow for such performance sensitive task as a fallback, so alacritty
had a hard times on vtebench's unicode-random-write.

The new approach is to use some internal fallback list from font_sort
and iterate over it to get a proper fallback font, since it matches the
following example query from `fc-match`:

`fc-match -s "monospace:pixelsize=X:style=Y"

That being said it's more intuitive for users to setup their system Fontconfig
fallback, and also most applications are doing similar things. Moreover the new
implementation uses internal caches over Fontconfig API when possible and
performs font matches only once during load of requested font with font_sort,
which leads to dramatically improved performance on already mentioned
vtebench's unicode-random-write.

Fixes #3176.
Fixes #3134.
Fixes #2657.
Fixes #1560.
Fixes #965.
Fixes #511.
5 files changed
tree: b42a7002902be622cd853b87f48508f8bdd89e9b
  1. .copr/
  2. .github/
  3. alacritty/
  4. alacritty_terminal/
  5. ci/
  6. docs/
  7. extra/
  8. font/
  9. res/
  10. scripts/
  11. servo-freetype-proxy/
  12. winpty/
  13. .agignore
  14. .gitignore
  15. .travis.yml
  16. alacritty.yml
  17. Cargo.lock
  18. Cargo.toml
  23. Makefile
  25. rustfmt.toml

Alacritty is the fastest terminal emulator in existence. Using the GPU for rendering enables optimizations that simply aren't possible without it. Alacritty currently supports macOS, Linux, BSD, and Windows.


Alacritty is a terminal emulator with a strong focus on simplicity and performance. With such a strong focus on performance, included features are carefully considered and you can always expect Alacritty to be blazingly fast. By making sane choices for defaults, Alacritty requires no additional setup. However, it does allow configuration of many aspects of the terminal.

The software is considered to be at a beta level of readiness -- there are a few missing features and bugs to be fixed, but it is already used by many as a daily driver.

Precompiled binaries are available from the GitHub releases page.

Further information


Some operating systems already provide binaries for Alacritty, for everyone else the instructions to build Alacritty from source can be found here.

Arch Linux

pacman -S alacritty


Unofficial builds of stable tags can be found in Fedora Copr: pschyska/alacritty.

dnf copr enable pschyska/alacritty
dnf install alacritty

If you want to help test pre-releases, you can additionally enable pschyska/alacritty-testing.

Gentoo Linux

emerge x11-terms/alacritty


urpmi alacritty


nix-env -iA nixos.alacritty

openSUSE Tumbleweed

zypper in alacritty

Pop!_OS / Ubuntu

If you‘re not running Pop!_OS, you’ll have to add a third party repository first:

add-apt-repository ppa:mmstick76/alacritty
apt install alacritty


eopkg install alacritty

Void Linux

xbps-install alacritty


pkg install alacritty


brew cask install alacritty

Once the cask is installed, it is recommended to setup the manual page, shell completions, and terminfo definitions.


Via Chocolatey

choco install alacritty

Via Scoop

scoop bucket add extras
scoop install alacritty


Prebuilt binaries for Linux, macOS, and Windows can be downloaded from the GitHub releases page. If your desktop environment has trouble rendering the default SVG icons, you can find a prerendered SVG as well as simplified versions of the SVG in the extra/logo/compat directory.

On Windows, Alacritty also requires Microsoft's VC++ redistributable.

For Windows versions older than Windows 10 (October 2018 Update), Alacritty requires winpty to emulate UNIX's PTY API. The agent is a single binary (winpty-agent.exe) which must be in the same directory as the Alacritty executable and is available through the GitHub releases page.


You can find the default configuration file with documentation for all available fields on the GitHub releases page for each release.

Alacritty looks for the configuration file at the following paths:

  1. $XDG_CONFIG_HOME/alacritty/alacritty.yml
  2. $XDG_CONFIG_HOME/alacritty.yml
  3. $HOME/.config/alacritty/alacritty.yml
  4. $HOME/.alacritty.yml


On Windows the config file is located at:



A full guideline about contributing to Alacritty can be found in the file.

Issues (known, unknown, feature requests, etc.)

If you run into a problem with Alacritty, please file an issue. If you've got a feature request, feel free to ask about it. Please just keep in mind Alacritty is focused on simplicity and performance, and not all features are in line with that goal.

Before opening a new issue, please check if it has already been reported. There's a chance someone else has already reported it, and you can subscribe to that issue to keep up on the latest developments.


Is it really the fastest terminal emulator?

In the terminals we‘ve benchmarked, Alacritty is either faster or way faster than the others. If you’ve found a case where this isn't true, please report a bug.

Why isn't feature X implemented?

Alacritty has many great features, but not every feature from every other terminal. This could be for a number of reasons, but sometimes it‘s just not a good fit for Alacritty. This means you won’t find things like tabs or splits (which are best left to a window manager or terminal multiplexer) nor niceties like a GUI config editor.

macOS + tmux + vim is slow! I thought this was supposed to be fast!

This appears to be an issue outside of terminal emulators; either macOS has an IPC performance issue, or either tmux or vim (or both) have a bug. This same issue can be seen in iTerm2 and I've found that if tmux is running on another machine which is connected to Alacritty via SSH, this issue disappears. Actual throughput and rendering performance are still better in Alacritty.


Alacritty discussion can be found in #alacritty on freenode.


Wayland is used by default on systems that support it. Using XWayland may circumvent Wayland specific issues and can be enabled through:

env WINIT_UNIX_BACKEND=x11 alacritty


Alacritty is released under the Apache License, Version 2.0.