Terminal Velocity
I’ve been using Alacritty & tmux as my daily driver for over four years now and wanted to give a shout-out to Joe Wilm and the contributors for driving this project forward. Kudos also go out to the maintainers of alternative terminal emulators - Kitty, iTerm, WezTerm, etc. The desktop app ecosystem has faced a 10-year parasitic flood of XXX MB Electron apps to provide UIs for the simplest of programs, and yet the terminal emulator subculture has held steady in delivering truly native cross-platform projects committed to performance - and in Alacritty’s case, also simplicity1.
Even though Alacritty is arguably the fastest terminal emulator, its simplicity is arguably its best perk. It doesn’t reinvent the wheel. Stripped down to its core, Alacritty is an optimized UI for tmux - a great design decision given all the features tmux provides:
- Persistent sessions and session management: Keep terminal sessions running in the background, recover them after disconnects, and organize your work with multiple sessions
- Split windows and panes, pane synchronization: Divide your terminal into multiple windows and panes, customize layouts, and send commands to all panes simultaneously
- Customizable keybindings: Create your own shortcuts for quick navigation, pane management, etc.
- Customizable status bar: Display whatever info you deem useful in the status bar
- Vim mode: Use tmux’s copy mode for navigating and editing terminal output with vim-like keybindings
- Multiplayer: Share sessions with others for collaborative coding, debugging, teaching, etc.
The only drawback to tmux is that it can be ergonomically frustrating; its keybindings are multi-key sequences that commonly strain pinkies and wrists, similar to Emacs. Thankfully, this can be mitigated by configuring Alacritty keybindings to send strings to the terminal that represent the non-ergonomic tmux keybindings.
What follows is mostly a matter of personal preference, but since I spent 10 years on iTerm and almost 20 years on macOS, my muscle memory seems forever linked to these keybindings:
Keybinding | Action | Where I’m used to this |
---|---|---|
Cmd + t | open a new tab | terminal, web browser, IDEs/editors |
Cmd + w | close a tab | terminal, web browser, IDEs/editors |
Cmd + Shift + [ | switch to the previous tab | terminal, web browser, IDEs/editors |
Cmd + Shift + ] | switch to the next tab | terminal, web browser, IDEs/editors |
Cmd + Shift + d | split pane horizontally | terminal |
Cmd + d | split pane vertically | terminal |
Cmd + k | move to pane above | terminal, IDEs/editors |
Cmd + j | move to pane below | terminal, IDEs/editors |
Cmd + h | move to pane left | terminal, IDEs/editors |
Cmd + l | move to pane right | terminal, IDEs/editors |
Fatih Arslan gives an excellent overview of the nitty-grits that go into mapping Alacritty keybindings to tmux keybindings in his blog post, but here are links to my tmux and Alacritty config files for reference:
Changelog
- 2011: Switched from Terminal to iTerm2 on a black polycarbonate MacBook
- 2014-2017: Continued to use iTerm2 for personal projects but was required to use Windows at Boeing. Thankfully Git for Windows provides a bash emulation.
- 2018-2019: Joined Oden Technologies (no more Windows!), continued using iTerm2 for personal projects and work
- 2020: Wanted to learn Rust, so I started to toy with Alacritty + tmux, which quickly became my daily driver. Alacritty left an excellent first impression - beautiful font rendering, fast and easy to configure, and dotfile-friendly. I also built a new PC dual-booting Windows and Debian. Using the same terminal emulator across all operating systems is a nice bonus.
- 2024: I trialed Kitty for a few weeks on my work MacBook after hearing so many great things from my coworkers, but I switched back to Alacritty. Just a matter of personal preference!
There’s a time and a place for Electron apps. Using it for large, feature-rich projects like VS Code, Slack, Spotify, or Discord is understandable. Using it for simple programs like a weather app or a calculator is not. ↩︎