Alacritty – A fast, cross-platform, OpenGL terminal emulator
github.com
github.com
Last time I tried, Alacritty didn’t support sixel (while even xterm supports it)
Use Wezterm is you want a modern rust based terminal with basic nice stuff like scrollbars.
Excellent documentation, fast and pretty much all the bells and whistles you could want in a modern terminal.
FWIW I use Wezterm with Zellij
https://github.com/alacritty/alacritty/issues/289#issuecomme...
Then being x-platform is also an easy differentiator of the 2
Wasn't for latency or throughput - I didn't notice any difference in latency, and difference in throughput is only visible when cat'ing 3MB of text.
However, for me the selling point was a text config file, which I can edit, backup, or store in git (unlike gnome-terminal, where customization was done either in GUI or in gconf, and while it's also text files somewhere they are difficult to work with).
(BTW: the problematic part was to make it fast enough not to be noticeable. The code that dumps the pane contents and searches for the start of the last output is written in Nim, in effect.)
It was possible in TMUX because it gives you programmatic access to the pane's content. It's probably possible to do the same with some terminals - urxvt uses Perl as an extension language, for example - but TMUX provides a compatibility layer, which means I don't need to rewrite the whole setup if I change the terminal emulator.
However I like the fact that kitty developer(s) actively improved the state of the terminal emulation with their new keyboard and graphic protocols [2].
[0] https://github.com/kovidgoyal/kitty/issues/2481
I use tmux for scrollback, panes, tabs, etc. So I'm happy there is an option for a barebones GPU terminal.
Renders faster than Alacritty or kitty.
iTerm2 has a dropdown window that can be enabled, but it’s surprisingly much more janky than TotalTerminal’s was despite being a first-party feature instead of a hack.
And it somehow managed to become popular and advertise itself without the "written in Rust" tagline. I like that. Ofc its written in Rust.
> Alacritty is a blazing fast, GPU accelerated terminal emulator. It’s written in Rust and uses OpenGL
There were two reasons for my change, the Alacritty devs are really obsessed with speed, which is good, but.. means less features, even _optional_ features like ligatures. I like ligatures, and because they slow down the rendering slightly the alacritty devs do not want to include it[0]
The other reason is that I wanted a way to have my terminal have two different colorschemes, light for the day and dark for the night. It seems that it might be supported now with alacritty[1]? But it does also seem like you need an external script still to do it..
I went with WezTerm because it supports both natively, everything else feels the same TBH, but the fact that WezTerm has more features that are optional, is what I liked.
What I can say is, that I find wezterm configuration quite pleasant. Overall I think they are in the same league but Alacrity gets a lot more attention and that's why I like to remind people that there is wezterm too.
Tmux and screen are pretty notorious for slowing things down.
It is slower, that's true, but so many times I've had to restart my terminal or I've quit it accidentally and tmux has saved my bacon.
Performance is adequate (for me), it's cross platform and gives me multiple cut/copy buffers.
Beta invites are nearly random, though.
All tmux and fish keyboard shortcuts have worked without any alacrity configuration (that I can recall).
My tmux config adds shortcuts to behave like a conventional tabbed window without any issues e.g. ctrl-n (new tab), ctrl-w (close tab), ctrl-page-up/down to navigate tabs.
So my keyboard layout doesn't work with the app at all. I've identified the issues but making a pull request for it and testing it all is a bit of work I haven't gotten round to yet.
If nothing else, just being able to have clickable buttons that I can configure to paste text is IMMENSELY useful. Combine a few good click-to-paste-string buttons with a bash for loop and ssh, and you're a long way to a quick and dirty Ansible replacement for those multi-system tasks.
Although the learning curve was a bit steeper than what I wanted just to have tabs, it works reliably unlike other things I found.
I primarily use it alongside tmux and NeoVim.
The software is just emulating the terminal behavior.
- no ligatures - no sixel support
So I was forced to remove it.
But on the other hand, while I totally understand why https://sw.kovidgoyal.net/kitty/faq/#i-get-errors-about-the-... exists, it's quite annoying to handle that, as we often take this bit for granted.
It makes sense from a tech pov, but not from a product one. It's a choice and I respect that. It didn't prevent me to use Kitty for years.
My other problem was having TERMINFO available on remote servers. I’m not about to start installing alternative terminal emulators in prod, and while there is a workaround to losing control characters, IIRC it’s a pain.
Also ligatures are optional, you aren't affected if you don't like the feature.
I guess I'm surprised that such a crucial feature isn't standard in everything if you can't even properly display a common language like Arabic without it.
Some prefer text to be seen as it was meant to be, so that === ugliness that can't be fixed at the source due to bad unicode support can at least be fixed at the output
Isn't OpenGL deprecated on macOS?
OpenGL ES 2.0 is probably the most portable GPU rendering API there is, it pretty much runs anywhere. That said, using Metal or D3D should definitely bring noticeable improvements, especially when it comes to memory bandwidth (eg. on Metal no need to send pixels to the GPU memory for atlas-based text rendering).
Another case is when you mistakenly invoke a command that produces a lot of output. With Kitty, terminal output is so fast that the output ended before I could reach Ctrl+C.
An example I run into fairly often is untarring a backup in verbose mode. With modern NVMes, printing out the filenames to a slow console can be a bottleneck.
It's very subjective: some folks (me included) will notice the difference and feel frustrated if it's not fast enough, while others are scratching their head about how it actually makes a difference.
It could also be said, that it's of logical to expect certain things to be fast; especially when they've been around for so long. We're drawing text on the screen here, it should be fast.
Saying it matters with anything else than feeling/comfort would be overreaching.
As for throughput, I have lived in the terminal for decades, and as long as the various layers don't have massive buffers I honestly don't care how slow the terminal is: if I am dumping megabytes into my terminal backscroll I probably am going "oh shit" and am frantically hitting Ctrl-C... a slow terminal with a small buffer handles that almost immediately. I get the impression that there are maybe some use cases involving high-rate screen updates for apps that happen to run in consoles but are really GUIs... I don't use many of those and in fact try to avoid them, but I could maybe see an advantage for a high-throughput terminal to improve their simulated frame rate?
Also, by what metric is xterm so fast? I accept the idea that it is fast, even the fastest, but "a lot" seems suspicious to me. From the keyboard to the monitor, there is a lot of hardware and driver latency, I guess tens of milliseconds, so the effect of the terminal, should be relatively minor. I suspect xterm is so fast because the tool used to test it relies on the X server, and because xterm communicates with X directly, the latency will be really low from the point of view of X, but how is it end-to-end? Do we get the same results, with, say, Wayland?
https://chadaustin.me/2024/02/windows-terminal-latency/
The other one where xterm is uber low is https://lwn.net/Articles/751763/ is using this tool with software-based screen capture https://pavelfatin.com/typometer/, not sure how reliable that is as a proxy for end-to-end (at the time of the benchmark Wayland wasn't supported)
GNOME terminal was visibly slow in the days of yore, but given that the libraries powering these are already accelerated, I don't think the difference between these "accelerated" terminals are as big as touted w.r.t. GNOME Terminal or KDE's Konsole.
Love to collaborate and make some tests with you, too.
- cost (this is more relevant to large scale infra perf opt)
- UX (this is what a fast terminal might be achieving)
- energy efficiency (because energy is super cheap these are often overlooked, however battery life might be still relevant)
I care about energy efficiency deeply. But in a terminal? You can't be serious.
Each terminal is in the end tied to a single person so there is no runaway scaling of instances possible. Your win in energy consumption is in the single digit watt-hours per person.
One could probably compare the energy savings coming from the terminal rendering to the extra energy consumed by the developer trying to improve performance and it might turn out to be a wash.
As for the perception of speed by people using the terminal. I too am very puzzled how this is different from audiophile movement where people claim to perceive minuscule differences in THD whatever metric they focus on today.
It might be that I've been working over dial-up sessions and intercontinental ssh sessions and the perception of slow starts to creep in when RTT gets to 100ms range. Which is probably orders of magnitude worse and more limiting than the difference between kitty and alacritty.
After reading Mitchell's writings about terminal development I am not sure.
> Each terminal is in the end tied to a single person
A popular terminal runs on millions of devices. This adds up quickly.
I highly doubt that offloading the rendering to a GPU is more energy efficient. I'm quite sure it's the exact opposite: GPUs are power hungry energy-eaters; commonly.
(The heavy lifting is probably more energy-efficient on the GPU, too, but that's not directly relevant here.)
Also, you may have commands or scripts which print out a lot, like which file in a huge list is currently getting processed, where the entire execution time of the command depends mostly on how fast the terminal is able to print those messages.
Where I have had problems has been on the Mac, where the system default "Terminal.app" or popular alternatives like "iTerm2.app" can each be catastrophically slow if you have a lot of control codes (as in, for example, rapidly paging through a large document in vim with an intensive color scheme active), and it could just take noticeable fractions of a second to redraw a fullscreen terminal window.
Moving to a faster terminal emulator like alacritty or kitty did make a good quality of life improvement for me in that specific use case.
My gripe with (u)rxvt (last I checked) is the atrocious font rendering and character spacing if you chose a full unicode/nerd font.
Right now I have about 20 open (in sway) and half of them are non-local SSH sessions... so pretty pointless. I only notice SSH latency when the VPN wobbles. Or throughput if I mis-cat a log file instead of using tail...
I complain like crazy if there is any latency in gaming so it seems I'm not latency sensitive in terminals :-) or more likely: reality tempers expectations.
Yes, it can be unreliable at first, when your software is new. This is expected, and it changes when people start using your software.
But if you don't implement compatibility with this env variable, then you are the reason it will not be reliable in any point in the future.