All Posts programming Choosing A Terminal for my Ubuntu Linux โ€” Ghostty, Kitty, Alacritty & GNOME Terminal

Choosing A Terminal for my Ubuntu Linux โ€” Ghostty, Kitty, Alacritty & GNOME Terminal

ยท 1204 words ยท 6 minute read

I use and love the stock Terminal app in Ubuntu (GNOME Terminal) but I want to have another efficient/performant alternative. So, I am exploring to find the suitable one and gain more knowledge and experience.

Arabic (RTL) support ๐Ÿ”—

Ghostty currently struggles significantly with Arabic (RTL) text. It renders the characters, but they are often disconnected (no ligatures) or displayed in the wrong direction (Left-to-Right instead of Right-to-Left).

Alacritty does not natively support Right-to-Left (RTL) text or proper Arabic shaping (joining characters). Arabic text appears disconnected and in the wrong direction (left-to-right). It is considered broken for RTL languages, with issues remaining open for years regarding full Bidirectional (BiDi) text support.

Kitty supports RTL Arabic as good as the pre-installed GNOME terminal on Ubuntu 24.04 LTS.

Supporting Arabic language in standard output: the pre-installed GNOME Terminal is the best in supporting RTL languages. It uses the standard Pango/GTK stack, so Arabic text, ligatures, and bidirectional text work perfectly out of the box.

The support for Arabic RTL language is mandatory for me. So, The options are only Kitty and GNOME terminal now.

GPU rendering ๐Ÿ”—

Ghostty, Kitty, and Alacritty with GPU rendering as one of the main architecture decissions. Gnome terminal is not GPU rendered, it relies on the CPU (VTE library) for rendering.

In my opinion, GPU rendering is nice to have because I will not render DOOM in the terminal.

Programming languages ๐Ÿ”—

Ghostty is written in Zig programming language which I see as a low level language with features that let developers optimize code and make efficient choices. I see Ghostty future better because it is written in a very capable modern language.

Kitty is written in multiple programming languages; mainly Go, C, and Python. That’s weirdly good. Programmers of Kitty wrote each part of it in the most suitable language for that part. I have a huge respect for that. I see Kitty as the future cross-platform terminal.

Alacritty is written in Rust language which is famous for its ownership model of memory. It is memory safe language. I respect the memory safety and I hope it will support needed features such as RTL languages in the future.

Gnome terminal is written in g(old) C++ language. I respect low level languages for software tools that need tight integration with other tools and operating system.

In my opinion, no terminal is superior in this category. All terminal emulators are written in a good enough programming languages.

Binary size ๐Ÿ”—

I installed Ghostty v1.2.3 via Snap package manager which means the package contains all its dependencies in a self-contained static binary. The binary/package size is around 506 MB on disk but downloaded via Snap in 140 MB, which is large because it bundles all dependencies.

I installed Ghostty on my Ubuntu machine. I installed it via snap package manager (a.k.a snapcraft):

snap install ghostty --classic

I followed the official recommended ways of installing ghostty mentioned on their website .

I installed Kitty terminal via APT system package manager.

sudo apt install kitty

Later I knew that the repo version is outdated on Ubuntu. But I did not use the official installer script , which is:

curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin

Its size is 19.4MB as reported by apt info kitty. It is dynamically linked to its dependencies, that’s why its size is small.

Kitty is known for being extremely feature-rich, supporting image rendering directly in the terminal and a powerful plugin system.

I installed Alacritty terminal via APT system package manager. Its size is 8.7MB as reported by apt info alacritty. It is dynamically linked to its dependencies, that’s why its size is small.

Gnome terminal is pre-installed and dynamically linked to its dependencies. Its size is ~1MB as reported by apt info gnome-terminal.

Here is the brief comparison:

~GhosttyKittyAlacrittyGNOME Terminal
binary size to download140 M (snap)6 MB (APT)2.5 MB (APT)217 kB (APT)
binary size on disk506 M (snap)19.4 MB (APT)8.7 MB (APT)796 kB (APT)

Feature-richness ๐Ÿ”—

Kitty terminal is the most feature-rich out of all these terminal emulators. Ghostty and Alacritty have some features too. Gnome terminal has basic features that make it capable of running in all basic cases.

I like Kitty for being the full-featured terminal, and I like how minimal and functionally good Gnome terminal is.

Resources usage ๐Ÿ”—

I tried to measure CPU usage and RAM memory usage.

$ ps aux | grep -v grep | grep -i -e VSZ -e gnome-terminal
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu      6157  0.1  0.3 868700 63884 ?        Ssl  05:25   0:15 /usr/libexec/gnome-terminal-server

$ ps aux | grep -v grep | grep -i -e VSZ -e kitty
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu     83674  0.2  0.7 767884 120992 ?       Sl   07:46   0:01 /usr/bin/kitty

I don’t have sufficient objective benchmarks of CPU and RAM usage, so I discarded them from the final decission.

Comparison of Terminal apps in brief ๐Ÿ”—

~GhosttyKittyAlacrittyGNOME Terminal
GPU renderingyesyesyesno
languageZigPython, C, GoRustC++
download size140M (snap)6 MB (APT)2.5 MB (APT)217 kB (APT)
install size506M (snap)19.4 MB (APT)8.7 MB (APT)796 kB (APT)
static binary?yesnonono
feature-richa fewexcellenta fewno

The information in the above comparison table is got from GitHub source code of the each respective terminal emulator app.

Terminal emulators source code ๐Ÿ”—

configurations ๐Ÿ”—

This is my simple Kitty config:

# BEGIN_KITTY_THEME
# Tango Dark
include current-theme.conf
# END_KITTY_THEME

wayland_titlebar_color #000000

font_family JetBrains Mono
font_size 18.0

shell /bin/fish --login --interactive

# Performance Optimizations
repaint_delay 10
input_delay 3
sync_to_monitor yes

# URL and Path Detection
url_style curly
open_url_with default
detect_urls yes

# window splits
map ctrl+d launch --location=vsplit --cwd=current
map ctrl+shift+d launch --location=hsplit --cwd=current
map ctrl+w close_window

# Custom Keyboard Shortcuts
# New tab in current directory (useful for monorepos)
map ctrl+t new_tab_with_cwd
# Quick access to config
map ctrl+shift+, edit_config_file
# Copy/paste (crucial for snippets and debugging)
map ctrl+shift+c copy_to_clipboard
map ctrl+shift+v paste_from_clipboard

Final thoughts ๐Ÿ”—

I tried Ghostty, Kitty, and Alacritty for their promises on performance and efficiency. Ghostty is very promising and fast, but the lack of proper RTL support is a dealbreaker for me. Alacritty is great too, but it lacks proper RTL support. So, no more Alacritty for me. Kitty is a good feature-rich terminal emulator. I’ll keep Kitty as a side terminal for later use. But I will install it using the official script instead of APT.

After 21 days of heavy use, I decided to stick with the pre-installed GNOME Terminal. It integrates perfectly with Ubuntu, supports Arabic natively without configuration, and is “fast enough” for my daily software development tasks.

I removed Ghostty terminal and Alacritty teminal.

I hope you enjoyed reading this post as much as I enjoyed writing it. If you know a person who can benefit from this information, send them a link of this post. If you want to get notified about new posts, follow me on YouTube , Twitter (x) , LinkedIn , and GitHub .