Alacritty Version 0.3.0 Release
April 07, 2019
Table of Contents
- About
- Notable Changes
- Getting Alacritty 0.3.0
- Config Migration
- Performance
- Upcoming Features
- Contributors
About
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.
With this release, Alacritty has officially entered the beta stage – there are still a few missing features and bugs to be fixed, but it is already used by many as a daily driver.
Notable Changes
This has been a big release, so a full history of the changes can be found in the change log.
Windows support
Support for Windows has been added, including the new ConPTY API which will fix
a lot of issues for users running Windows 10 1809 and above (you can enable it
with the enable_experimental_conpty_backend
in the config).
There are still some issues both in Alacritty and in the WinPTY/ConPTY backends which need to be smoothed out to make the experience on par with the other platforms, but it should already be usable as a daily driver for many.
Text reflow
One of the most requested features has been text reflow and it’s finally made its appearence in 0.3.0.
All text should now properly reflow both when shrinking and growing the terminal so no more content will be lost!
Zero width characters
Zero width characters are not an uncommon occurrence in the terminal and with improper support this can lead to severe rendering issues and characters lingering around when they should have been cleared.
While this was challenging to fit into Alacritty’s storage model, we were able to implement this without taking any performance hits.
Error/Warning message bar
Since a terminal emulator is only rarely started from another terminal emulator, config errors and warnings would often stay hidden without giving anyone a chance to actually fix them.
As a solution, a message bar has been added to the bottom of the terminal which will log all warnings and errors and allow you to adjust your config file until everything’s working again.
Once all warnings and errors are resolved, the message bar should disappear automatically.
Clickable URLs
If you’ve been annoyed by having to copy URLs from Alacritty, it is now possible to pass URLs to a program whenever clicking on them. This should automatically open with your browser in the default config, but can be adjusted to use whichever program you like.
Figuring out how a terminal’s URL parser might understand text can be tough sometimes, so to make things a little easier, URLs will also get underlined when hovering above them.
Real underline support
Alacritty has previously missused the _ character to get temporary Underline support for the 0.1 release. After a long wait, Alacritty now properly reads the font metrics and draws a continuous line instead of rendering several independent characters.
An official icon
Thanks to @net Alacritty now has a set of official icons which are distributed on all platforms.
Alternate keyboard layouts on macOS
Support for alternative keyboard layouts on macOS has been improved, fixing an issue where key bindings wouldn’t get triggered unless you’re using the qwerty layout.
Signal handling
Alacritty’s signal handling has improved, fixing a long standing bug which prevented Alacritty from closing after exiting the terminal.
Windows MSI installer
All releases now come with an .msi installer for Windows, next to the portable version. This installer will also automatically add a context menu allowing you to open Alacritty in a specific directory from the explorer.
Getting Alacritty 0.3.0
If these changes have gotten you excited to try out Alacritty (again?), you can find precompiled binaries for various systems on the github releases page.
Various package managers also distribute Alacritty, these are expected to be updated by their maintainers in the near future.
For everyone else, there are detailed instructions for compiling Alacritty from source in the installation guide.
Config Migration
Version 0.3.0 includes a few new configuration options which you can add to your own configuration file. The values listed here are the defaults which will be used when these options are not specified.
The changes here are only from 0.2.9 to 0.3.0, if you’re looking to migrate from older versions, it’s recommended to start with the default config and add your changes back to it.
It is now possible to set the starting position of a window using the
window.position
field:
window:
# Window position (changes require restart)
#
# Specified in number of pixels.
# If the position is not set, the window manager will handle the placement.
#position:
# x: 0
# y: 0
If you have troubles with the inverted selection colors, you can set a custom text or background color to override it:
colors:
# Selection colors
#
# Colors which should be used to draw the selection area. If selection
# background is unset, selection color will be the inverse of the cell colors.
# If only text is unset the cell text color will remain the same.
#selection:
# text: '0xeaeaea'
# background: '0x404040'
The keybindings section has also gotten a few new defaults. If you already have
these set, you might want to consider using these new bindings instead.
To unset a default keybinding, you can override it with the None
action.
These are the new bindings specific to Linux/BSD/Windows:
key_bindings:
- { key: Add, mods: Control, action: IncreaseFontSize }
- { key: Minus, mods: Control, action: DecreaseFontSize }
These are the new bindings specific to macos:
key_bindings:
- { key: Add, mods: Command, action: IncreaseFontSize }
All targets have gotten some new default keybindings to help with navigating the scrollback history:
key_bindings:
- { key: Home, mods: Alt, chars: "\x1b[1;3H" }
- { key: End, mods: Alt, chars: "\x1b[1;3F" }
- { key: PageUp, mods: Alt, chars: "\x1b[5;3~" }
- { key: PageDown, mods: Alt, chars: "\x1b[6;3~" }
Performance
Of course it’s not possible to announce a new version of Alacritty without at least mentioning performance. There have not been any major changes to performance and all benchmarks of the vtebench suite are within margin of error compared to the 0.2.0 release (the results of the 0.2.0 benchmarks can be found here).
On X11 a bug with querying monitor information at startup has been fixed, this should significantly improve startup time on some systems.
Upcoming Features
Of course Alacritty isn’t finished yet and there are a lot more things left to do. So I’d like to point out some interesting things that are right around the corner and some bigger features which we might be able to look forward to in the future:
- There’s a lot of demand for native clipboard support on Linux (especially with Wayland) and thanks to some great contributions it’s expected to land soon
- There has been a lot of work done on automated benchmarking, which is a difficult task for a program relying on the GPU for rendering. Hopefully once this lands, Alacritty should be safe from accidental performance regressions
- Reduction of input latency is one thing a lot of people have shown interest in and it seems like a great match for Alacritty
- Some of our dependencies have recently caused some build failures on BSD. By adding FreeBSD to our CI process we’re hoping to make it a primary platform like Linux/macOS and Windows already are
- Adopting fontkit will hopefully improve Alacritty’s font support while contributing to a standardized Rust font ecosystem at the same time
- A lot more features, bug fixes and performance improvements
To my own surprise, we’ve actually managed to complete all the upcoming features from the 0.2.0 announcement. So let’s hope we can achieve that once again.
Contributors
Fortunately Alacritty is blessed with a variety of contributors willing to take matters into their own hands and improve the project.
One outstanding contributor is @nixpulvis who I’m happy to announce has officially joined the team of collaborators after helping with Alacritty for years.
There have been many contributors helping with testing and troubleshooting issues and unfortunately it’s not possible to list all these essential people. However, I do want to give some special thanks to everyone who was involved since the 0.2.0 release:
- Aaron Goodfellow
- Aidan Epstein
- Alexander Bulimov
- Alexander Schlarb
- Alex Purdy
- Alex Touchet
- Andrei-Marius Radu
- Barret Rennie
- Bastien Orivel
- Bjorn Neergaard
- Carlos Tuñón
- Chris MacNaughton
- Christian Duerr
- Christian Rebischke
- Cole Helbling
- Daniel Eklöf
- DarkDefender
- David Hewitt
- David Peter
- Desuwa
- dm1try
- Do Duy
- Dominic Evans
- Elaina Martineau
- Erik Berkun-Drevnig
- F. Eugene Aumson
- Fintan
- Georgy Yakovlev
- Gris Ge
- Hellsenberg
- Hirokazu Hata
- Ilya Epifanov
- Jason Shirk
- Jeff Muizelaar
- Joe Moon
- Joe Wilm
- Johannes
- John Naylor
- Jonathan Dahan
- Jon Gjengset
- kekePower
- Kirill Chibisov
- Kyle Rooker
- Lado Tonia
- Martin Sucha
- Matthias Bussonnier
- Matthias Krüger
- Matt Keeler
- Matt T. Proud
- Micha Gorelick
- Mihyaeru
- Morton Fox
- M. Stoeckl
- Muhammad Talal Anwar
- Nathan Lilienthal
- Nathan West
- Niclas Zeising
- Niklas Claesson
- nolanl
- OJ Kwon
- Philipp
- praetorg
- Rachel K
- ray851107
- Robert Günzler
- Robert Martin Winterstein
- Ross Smith II
- RunningDroid
- Ryan Morey
- Sander van Harmelen
- Simon Dahlberg
- skliew
- Starz0r
- Steve Blundy
- stfn
- Tanuj
- Tezkerek
- Tim McNamara
- Tobias Kortkamp
- Tobias Sette
- trimental
- Vineeth Sagar
- VoidNoire
- Zac Pullar-Strecker
Since you’ve made it this far, it’s also time to thank you for reading through this announcement. If you have any issues, or questions, feel free to create a new issue on github or join us in our #alacritty IRC channel on freenode.
Discussions about this announcement can also be found on r/rust, r/linux, r/programming and Hacker News.