A cross-platform, OpenGL terminal emulator.

Overview

Alacritty Logo

Alacritty - A fast, cross-platform, OpenGL terminal emulator

Alacritty - A fast, cross-platform, OpenGL terminal emulator

About

Alacritty is a modern terminal emulator that comes with sensible defaults, but allows for extensive configuration. By integrating with other applications, rather than reimplementing their functionality, it manages to provide a flexible set of features with high performance. The supported platforms currently consist of BSD, Linux, macOS and Windows.

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.

Features

You can find an overview over the features available in Alacritty here.

Further information

Installation

Alacritty can be installed by using various package managers on Linux, BSD, macOS and Windows.

Prebuilt binaries for macOS and Windows can also be downloaded from the GitHub releases page.

For everyone else, the detailed instructions to install Alacritty can be found here.

Requirements

  • OpenGL 3.3 or higher
  • [Windows] ConPTY support (Windows 10 version 1809 or higher)

Configuration

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

Alacritty doesn't create the config file for you, but it looks for one in the following locations:

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

Windows

On Windows, the config file should be located at:

%APPDATA%\alacritty\alacritty.yml

Contributing

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

FAQ

Is it really the fastest terminal emulator?

Benchmarking terminal emulators is complicated. Alacritty uses vtebench to quantify terminal emulator throughput and manages to consistently score better than the competition using it. If you have found an example where this is not the case, please report a bug.

Other aspects like latency or framerate and frame consistency are more difficult to quantify. Some terminal emulators also intentionally slow down to save resources, which might be preferred by some users.

If you have doubts about Alacritty's performance or usability, the best way to quantify terminal emulators is always to test them with your specific usecases.

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.

IRC

Alacritty discussions can be found in #alacritty on freenode.

License

Alacritty is released under the Apache License, Version 2.0.

Issues
  • Glutin 0.18 upgrade

    Glutin 0.18 upgrade

    Fixes #1756 Fixes #1525 Fixes #1509 Fixes #1428 Fixes #1414 Fixes #1382 Fixes #1358 Fixes #1345 Fixes #1257 Fixes #1146 Fixes #964 Fixes #952 Fixes #210 Fixes #71

    This compiles and after reviewing looks sane enough. However I am running into an issue where the text output of the terminal only shows up on the lower left quadrant of the whole window.

    I figured I could go ahead and open this up as a work in progress to get some feedback and suggestions for what could have gone wrong.

    opened by mkeeler 226
  • Update to winit/glutin EventLoop 2.0

    Update to winit/glutin EventLoop 2.0

    This takes the latest glutin master to port Alacritty to the EventLoop 2.0 rework.

    This changes a big part of the event loop handling by pushing the event loop in a separate thread from the renderer and running both in parallel.

    TODO:

    • [x] Resize issues (https://github.com/jwilm/alacritty/pull/2438#issuecomment-505518232)
    • [x] run_return support for macOS (https://github.com/rust-windowing/winit/issues/1005)
    • [x] Resizing extremely slow
    • [x] Font size change not updating pty size
    • [x] Message bar does not update PTY size properly
    • [x] Incorrect window dimensions when moving Alacritty between different DPI monitors
    • [x] Font size not updating when moving Alacritty between different DPI monitors
    • [x] Clean up code / resolve remaining TODOs
    • [x] Incorrect startup DPI on X11 (https://github.com/rust-windowing/winit/issues/998) -> ~~:zap: Still broken when spawning a floating window in i3~~ -> Workaround implemented
    • [x] Make sure before merging all the linked issues have change log entries
    • [x] Clear errors on message bar reload

    Fixes #2796. Fixes #2694. Fixes #2643. Fixes #2625. Fixes #2618. Fixes #2601. Fixes #2564. Fixes #2456. Fixes #2438. Fixes #2334. Fixes #2254. Fixes #2217. Fixes #1789. Fixes #1750. Fixes #1125.

    C - waiting on author 
    opened by chrisduerr 200
  • Implementation of scrollback

    Implementation of scrollback

    The Grid<T> is now a view into a region (I called it the 'active region') of a VecDeque. When new lines are added, they are pushed onto the back of the queue, and once the scrollback buffer is considered 'full', then old lines are popped off the front of the queue. This seems to work rather well since, unlike a Vec, elements don't need to be reshuffled around very often.

    Of course, as discussed in #124 there are a few things that need to be fixed before I'd consider this 'ready':

    • [x] configurable max scrollback length
    • [ ] write new tests
    • [x] fix existing ref tests
    • [ ] measure performance impact (it seems fine but some numbers would be more reassuring)
    • [x] fix out of bounds errors on resize
    opened by neon64 124
  • Windows Support

    Windows Support

    Support Windows via the Linux subsystem

    enhancement S - render S - font D - hard S - I/O and PTY H - windows 
    opened by jwilm 105
  • no method named `set_urgent` found for type `window::Window` in the current scope

    no method named `set_urgent` found for type `window::Window` in the current scope

    Which operating system does the issue occur on?

    • NetBSD 8.99.48 NetBSD 8.99.48 (GENERIC) amd64
    • Using X11 from base

    While running cargo build in the checkout at commit 84aca672964e29b5b4503b7da7bc34fc395f08ab, I get this error:

       Compiling copypasta v0.6.0 (/home/ng0/code/re-src/rust_crates/alacritty/copypasta)
    error[E0599]: no method named `set_urgent` found for type `window::Window` in the current scope
       --> alacritty_terminal/src/display.rs:493:29
        |
    493 |                 self.window.set_urgent(is_urgent);
        |                             ^^^^^^^^^^
        | 
       ::: alacritty_terminal/src/window.rs:59:1
        |
    59  | pub struct Window {
        | ----------------- method `set_urgent` not found for this
        |
        = help: items from traits can only be used if the trait is implemented and in scope
        = note: the following trait defines an item `set_urgent`, perhaps you need to implement it:
                candidate #1: `winit::os::unix::WindowExt`
    
    error: aborting due to previous error
    
    For more information about this error, try `rustc --explain E0599`.
    error: Could not compile `alacritty_terminal`.
    
    To learn more, run the command again with --verbose.
    
    C - waiting on author B - build failure H - bsd 
    opened by ghost 84
  • Implement scrollback

    Implement scrollback

    Since you got so much pushback on the scrollback support, and mentioned possibly implementing it, I'm opening this as a tracking issue.

    (ps: I also really want scrollback w/o tmux).

    enhancement S - terminal 
    opened by theduke 69
  • Add proper underline and strikethrough support

    Add proper underline and strikethrough support

    Support for strikethrough has been added by inserting and removing a STRIKE_THROUGH flag on the cell.

    Now all strikethrough and underline drawing is also done through the rectangle renderer. So no glyphs are used to render underlines and strikethrough. The position is taken from the font metrics and should be accurate for linux, however is not yet tested on macos.

    It works by checking the underline state for each cell and then drawing from the start until the last position whenever an underline ended. This adds a few checks even if no underline is rendered but I was not able to measure any significant performance impact.

    Fixes jwilm/alacritty#806. Fixes jwilm/alacritty#31.

    Demo:

    TODO:

    • [x] Account for font and glyph offsets
    • [x] Account for window padding
    • [x] Test (and potentially fix) DPI
    • [x] Refactor code and extract it into separate files
    • [x] Add Windows support
    opened by chrisduerr 67
  • Alacritty doesn't display emoji

    Alacritty doesn't display emoji

    I know, I know.

    Anyway, iTerm 2 and Terminal.app are both able to display emoji:

    example

    but alacritty isn't:

    example

    B - bug S - font 
    opened by pikajude 63
  • Tabs support in the terminal

    Tabs support in the terminal

    For bug reports, the following information can help speed up the process. Please describe the bug that you have found and what you would expect to happen instead.

    System

    OS: Linux/BSD/macOS/Windows Version: alacritty --version output Linux/BSD: X11/Wayland, DE or Compositor and WM Windows: WinPTY/ConPTY (see alacritty -v output)

    Logs

    Crashes: STDERR, STDOUT Font/Terminal size: alacritty -vv Keyboard and bindings: alacritty --print-events

    F - wontfix 
    opened by narain1 62
  • Add windows font fallbacks

    Add windows font fallbacks

    This is the first step for #3082

    At the moment Alacritty on windows does not use any font fallbacks, so glyphs for emoji cannot be found. I suspect there are many other cases where lack of font fallbacks causes glyphs to be missing.

    By adding font fallbacks, we now can rasterize (downsampled) greyscale emoji. They don't look amazing, but hey, something is better than nothing!

    The remaining step to add full emoji support is to implement color font rasterizing, which will be a much bigger change and might need upstream support in the dwrote crate.

    Perhaps others may have ideas how to improve the render quality of these greyscale emojis too.

    If this PR looks like the right direction to be heading, there's a couple of things for me to finish off:

    • [x] Remove hard-coding of "en-us" locale
    • [x] Try to find fallback font in loaded fonts rather than always creating fresh

    Possible bugs from testing:

    • [x] ~~Figure out how to size emoji correctly - downsample?~~
    • [x] ~~Investigate emoji paste issues?~~ (Upstream bug https://github.com/microsoft/terminal/issues/1503)
    • [x] ~~Investigate occasional missing glyph~~ (Sounds a lot like upstream bug https://github.com/microsoft/terminal/issues/386)

    Before:

    image

    After:

    image

    Fixes #3215.

    opened by davidhewitt 62
  • Vi mode line indicator not hidden when hovering it with display offset

    Vi mode line indicator not hidden when hovering it with display offset

    If vi mode is active and the cursor is in the top-right position, the vi mode line indicator is only hidden when the display offset is 0. If the display offset is 1 or higher, the cursor is hidden by the line number indicator.

    The indicator should be hidden regardless of the display offset when the vi mode cursor is below it.

    B - bug B - regression S - vi mode 
    opened by chrisduerr 0
  • Try running in 30bpp (10-bit color) if default fails

    Try running in 30bpp (10-bit color) if default fails

    Related to #4703. Tries setting the color bits to 30 before failing in case 10-bit color is set.

    Not the biggest fan of that chain of or_else, but it's not that bad. If you have any idea for improvement, let me know.

    opened by abdelq 2
  • Clean up and abstract shader creation code

    Clean up and abstract shader creation code

    Shader creation related codes are moved to a separated file as a lifetime-managed ShaderProgram in order to reduce complexity and redundancy in both rectangle and text renderer.

    This also makes creating new shaders much easier if needed in the future.

    opened by oxalica 1
  • Hint post processing crash

    Hint post processing crash

    Alacritty with the following config crashes when hovering over the ) character.

    hints:
      enabled:
       - regex: "[^/ ]"
         action: Paste
         post_processing: true
         mouse:
           enabled: true
           mods: None
    

    It only crashes with post processing enabled and I get no relevant output with -vvv or --print-events.

    alacritty 0.9.0 (fed349aa) on Linux + Wayland (sway)

    B - bug D - easy P - high B - crash 
    opened by johannesneyer 0
  • [Feature request] Special handling of Block Elements (U+2580 - U+259F)

    [Feature request] Special handling of Block Elements (U+2580 - U+259F)

    Intro

    Block element characters are used for terminal fill and shading. https://unicode-table.com/en/blocks/block-elements/

    The most common characters are:

    • (U+2588) Full Block
    • (U+2584) Lower Half Block
    • (U+2580) Upper Half Block
    • ▗▘▙▚▛▜▝▞▟ (U+2596 - U+259F) Terminal graphic characters

    Currently, they simply use the font's glygh for rendering, which cannot accurately fill a whole cell (or some borders) and instead leave a thin 0.5-1px border. The following code should print a 2x2 full block, but currently it doesn't. There's a thin gap between adjacent cell (both between columns and rows) printf '██\n██\n'

    blocks

    I tried all installed FreeType fonts including Noto Sans Mono, Free Mono and Sarasa Mono but none of them work. So I think it's not an issue of individual fonts, but some limitations of FreeType itself.

    Proposal

    Specially handle these block-like characters to make them accurately fully fill cell (or borders). There are also many terminals did so, including:

    • GNOME vte: https://github.com/GNOME/vte/commit/154abade902850afb44115cccf8fcac51fc082f0
    • Kitty: https://github.com/kovidgoyal/kitty/commit/e95c789d4bf6e52587b39ff10f419dd4442e92dd
    • Konsole: Enabled special treatment by default. Can be disabled by a setting Use line characters contained in font in Appearance (then it behaves the same as current alacritty).

    Affected programs

    Programs using these characters to print ASCII art, graphics, or indicators. Some users also use them in shell prompts.

    neofetch: nixos

    System

    OS: Linux Version: Current master cf35a2019162c6055e4a4c152976a424ba10869d Linux: X11, KDE

    enhancement help wanted S - font 
    opened by oxalica 2
  • Implement hyperlink terminal escapes

    Implement hyperlink terminal escapes

    Fix #922

    The definition of this escape sequence follows https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda

    What are done in this PR:

    • Hyperlink escape handling
    • Customizable inactive and active styles.
      • Default: Underline for inactive links, DoubleUnderline for active (hovered) links.
    • Mouse hover icon and click to open, with customizable launcher commands (just like hints.enabled.command).
    • Optional modifier keys required for activate and click action (just like hints.enabled.mouse.mods)
      • Default: None.
    • Preview for link target URI at the bottom, with customizable fg/bg color.

    Test commands:

    # Simple
    printf '\e]8;;http://example.com\aThis is a link\e]8;;\a\n'
    # Complex (with hyperlink id)
    printf '\e]8;id=ddg;https://ddg.gg\e\\[Go du]\e]8;;\e\\\e]8;;https://example.com\e\\Go example\e]8;;\e\\\e]8;;https://github.com\e\\Go github\e]8;;\e\\\n\e]8;id=ddg;https://ddg.gg\e\\[cking]\e]8;;\e\\\n'
    

    Screenshot: (outdated) alacritty-hyperlink3

    opened by oxalica 15
  • Occasional state where most-recent keypress is repeated indefinitely

    Occasional state where most-recent keypress is repeated indefinitely

    System

    OS: Arch Linux Version: 0.9.0 (fed349aa) Sway window manager (Wayland)

    Logs

    Here's a log of "alacritty --print-events" from a short session exhibiting the behavior below.

    https://ericabrahamsen.net/alacritty.log

    The error: Every few days, alacritty gets "stuck" in a mode where the most recent keypress repeats indefinitely, as though I were holding the key down. If I type a command like "echo", there's a short pause, and then the "o" is repeated as though I were holding it down. If I type "echo" and hit return quickly, the command is run, and then the return is repeated. If my most-recent keypress is a Command modified key like C-k, the C-k is run correctly (killing the rest of the line), then the "k" is repeated.

    Quitting alacritty doesn't fix it: the behavior continues when I start it again. I usually use tmux, but quitting tmux doesn't help, it keeps happening. Only rebooting the machine fixes the problem, until it happens again a few days later.

    Hope this is helpful! Happy to help with further debugging.

    opened by girzel 5
  • Vi mode search does not start at cursor

    Vi mode search does not start at cursor

    When a vi mode search is started while the bottommost line on the buffer is filled, a search will move the vi cursor causing the search to start one line below the original vi cursor position. This can cause the search to wrap around the buffer, confusing the user (me in this case).

    B - bug B - regression S - search S - vi mode 
    opened by chrisduerr 0
  • Some Key Bindings Not Working on Linux

    Some Key Bindings Not Working on Linux

    The following keybindings work for me on macOS, but do not work on Linux (popOS):

    key_bindings:
      - { key: LBracket, mods: Command|Shift, chars: "\x02\x70" }
      - { key: RBracket, mods: Command|Shift, chars: "\x02\x6e" }
    

    The { symbol is typed into my prompt but the given chars are not triggered.

    Does anyone know why only some of the key bindings aren't working?

    System

    OS: Linux (popOS) Version: 0.9.0 Linux/BSD: not sure

    opened by joshmedeski 3
  • Font size selected at random

    Font size selected at random

    System

    OS: Ubuntu 20.04 Version: alacritty 0.10.0-dev Linux/BSD: i3

    Behaviour

    I have the alacritty config file in ~/.config/alacritty/alacritty.yml with the following font set-up:

    # Font configuration
    font:
      
      [...]
    
      # Point size
      size: 10.0
    

    All other font configuration options are commented out. I verified that alacritty is indeed reading this config file using the -vvv flag.

    However, whenever I open a new terminal window the font seems to be selected at random. Below a picture of two terminals opened one right after the other.

    [Alacritty termnials]1

    Logs

    $ alacritty -vv
    Created log file at "/tmp/Alacritty-163659.log"
    [2021-08-24 14:25:11.379650896] [INFO ] [alacritty] Welcome to Alacritty
    [2021-08-24 14:25:11.386809772] [INFO ] [alacritty] Configuration files loaded from:
                                                          "/home/user/.config/alacritty/alacritty.yml"
    [2021-08-24 14:25:12.053874012] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Book, load_flags: TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
    [2021-08-24 14:25:12.058454840] [DEBUG] [alacritty] Estimated DPR: 1.6666666666666667
    [2021-08-24 14:25:12.058530275] [DEBUG] [alacritty] Estimated window size: None
    [2021-08-24 14:25:12.058547559] [DEBUG] [alacritty] Estimated cell size: 13 x 27
    [2021-08-24 14:25:13.831872156] [INFO ] [alacritty] Device pixel ratio: 1.6666666666666667
    [2021-08-24 14:25:13.994206811] [INFO ] [alacritty] Initializing glyph cache...
    [2021-08-24 14:25:14.006006725] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Book, load_flags: TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
    [2021-08-24 14:25:14.026958466] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Bold, load_flags: TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
    [2021-08-24 14:25:14.037135272] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Book, load_flags: NO_BITMAP | TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
    [2021-08-24 14:25:14.050159534] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Bold, load_flags: NO_BITMAP | TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
    [2021-08-24 14:25:14.183013146] [INFO ] [alacritty] ... finished initializing glyph cache in 0.188707227s
    [2021-08-24 14:25:14.183202861] [INFO ] [alacritty] Cell size: 13 x 27
    [2021-08-24 14:25:14.183257611] [INFO ] [alacritty] Padding: 0 x 0
    [2021-08-24 14:25:14.183294042] [INFO ] [alacritty] Width: 800, Height: 600
    [2021-08-24 14:25:14.188775376] [INFO ] [alacritty] PTY dimensions: 22 x 61
    [2021-08-24 14:25:14.205643966] [INFO ] [alacritty] Initialisation complete
    [2021-08-24 14:25:14.223490927] [DEBUG] [alacritty_terminal] New num_cols is 73 and num_lines is 18
    [2021-08-24 14:25:14.223650326] [INFO ] [alacritty] Padding: 0 x 0
    [2021-08-24 14:25:14.223677142] [INFO ] [alacritty] Width: 956, Height: 507
    
    opened by ldesousa 6
Releases(v0.9.0)
Owner
Alacritty
Alacritty
✨ Finder Toolbar app for macOS to open the current directory in Terminal, iTerm, Hyper or Alacritty.

English | OpenInTerminal 中文说明 OpenInTerminal-Lite English | OpenInTerminal-Lite 中文说明 How to use ?? Core Features OpenInTerminal Open X (e.g., folders

Jianing Wang 3.9k Sep 24, 2021
🌈 burning rainbow bridge between your terminal and serial ports

?? bifrost Bifrost is a tiny terminal emulator for serial port communication. Supports USB type-C out of the box (2016+ Macbook friendly). Note: Only

Ishuah Kariuki 56 Sep 12, 2021
This is a app for macOS that to open a new Finder window and change the current directory to the folder this app launched.

OpenTerminal for macOS This is a app for opening a Terminal window from Finder window. You can use iTerm2 window instead of Terminal window too. How t

Tomohiro Kumagai 87 Jul 14, 2021
🐢 Open terminal quickly from Finder

???????????? ???? ❤️ Support my app ❤️ Push Hero - pure Swift native macOS application to test push notifications PastePal - Pastboard, note and short

Khoa 895 Sep 9, 2021
Finder Toolbar app to open the current directory in the Terminal

cd to... Finder Toolbar app to open the current directory in the Terminal. It's written in objective-c, and uses the scripting bridge so it's fast. It

Jay Tuley 1.9k Sep 12, 2021
A terminal built on web technologies

For more details, head to: https://hyper.is Project goals The goal of the project is to create a beautiful and extensible experience for command-line

Vercel 36.8k Sep 17, 2021
:computer: Console application for creating dynamic wallpapers for macOS Mojave and newer

?? wallpapper / wallpapper-exif This is simple console application for macOS to create dynamic wallpapers introduced in macOS Mojave. Here you can wat

Marcin Czachurski 2.4k Sep 22, 2021
Simple macOS GateKeeper script.

macOS GateKeeper Helper Simple macOS GateKeeper script. ?? Table of Contents About Usage Tips ?? About This is a simple useful tool for users which al

Bahadır A. Güder 136 Sep 15, 2021