Ghostty aka. Das beste Terminal wo das es gibt!!!11!

Es gibt einen neuen Stern am Terminalhimmel.. nämlich Ghostty.

Ghostty is a terminal emulator that differentiates itself by being fast, feature-rich, and native. While there are many excellent terminal emulators available, they all force you to choose between speed, features, or native UIs. Ghostty provides all three. https://ghostty.org/docs/about

Es ist also das Beste der Besten, Sir! Gut.. ich bekomme beim Start ein

warning(gtk): setting GDK_DEBUG=gl-no-fractional
warning(gtk): setting GDK_DISABLE=gles-api,color-mgmt,vulkan
warning(gtk): setting GSK_RENDERER=opengl
Unrecognized value "color-mgmt". Try GDK_DISABLE=help
[...]
warning(gtk): unable to get current color scheme: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name is not activatable
[...]
warning(gtk): unimplemented action=apprt.action.Action.Key.cell_size
[...]
(ghostty:1128179): Gtk-CRITICAL **: 21:58:36.953: gtk_widget_unparent: assertion 'GTK_IS_WIDGET (widget)' failed

zu Gesicht, aber Warnungen sind dazu da um ignoriert zu werden. Also weiter im Text.

Feature Highlight

Here is a list highlighting some of the larger or more interesting features that Ghostty supports:

  • Cross-platform: Ghostty runs on macOS and Linux. It uses native UI components on each platform to provide an idiomatic experience. Windows support is planned for the future.
  • Windows, tabs, and splits: Ghostty supports multiple windows, each with its own tabs and splits. These are all rendered using native UI components.
  • GPU-accelerated rendering: Ghostty uses Metal on macOS and OpenGL on Linux to render the terminal screen.
  • Themes: Ghostty ships with hundreds of themes that can be selected with a single line of configuration. Themes can be switched automatically based on system dark/light mode. Users can author their own themes.
  • Ligatures: You can use fonts that have ligatures and Ghostty will render them correctly. You can also specify specific font features to enable or disable.
  • Grapheme clustering: Multi-codepoint emoji such as flags, skin tones, etc. are rendered correctly as a single character. Individual grapheme clusters in certain right-to-left scripts like Arabic and Hebrew are also rendered correctly, although only left-to-right text is supported.
  • Kitty graphics protocol: Ghostty supports the Kitty graphics protocol, which allows terminal applications to render images directly in the terminal.

https://ghostty.org/docs/features

Da ist jetzt nichts enthalten, das mich wirklich von den Socken haut. Das einzige, das Kitty, WezTerm, Alacritty und st(1) nicht können ist Grapheme clustering, aber ich kenne ehrlich gesagt kein Terminal das sowas korrekt darstellen kann. Ansonsten ist es nur ein Terminal, also wirklich nicht den Hype wert, der gerade darum betrieben wird. Gut.. es ist in Zig geschrieben und nutzt die GTK4 C API, aber hey..

$ du -shx =ghostty
30M	/bin/ghostty
$ ldd =ghostty
	linux-vdso.so.1 (0x00000d50f14de000)
	libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00000d50f13e1000)
	libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00000d50ef4de000)
	libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00000d50f1391000)
	libonig.so.5 => /usr/lib/libonig.so.5 (0x00000d50ef448000)
	libgtk-4.so.1 => /usr/lib/libgtk-4.so.1 (0x00000d50eea00000)
	libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0x00000d50ee831000)
	libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00000d50ee7d1000)
	libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00000d50ee681000)
	libadwaita-1.so.0 => /usr/lib/libadwaita-1.so.0 (0x00000d50ee49d000)
	libX11.so.6 => /usr/lib/libX11.so.6 (0x00000d50ee35c000)
	libwayland-client.so.0 => /usr/lib/libwayland-client.so.0 (0x00000d50f1380000)
	libm.so.6 => /usr/lib/libm.so.6 (0x00000d50ee264000)
	libc.so.6 => /usr/lib/libc.so.6 (0x00000d50ee072000)
	/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00000d50f14e0000)
	libz.so.1 => /usr/lib/libz.so.1 (0x00000d50f1365000)
	libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00000d50f1352000)
	libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00000d50ef40c000)
	libbrotlidec.so.1 => /usr/lib/libbrotlidec.so.1 (0x00000d50ef3fd000)
	libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x00000d50ee050000)
	libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00000d50ee026000)
	libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00000d50ef3f6000)
	libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x00000d50ee016000)
	libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x00000d50edfab000)
	libcairo.so.2 => /usr/lib/libcairo.so.2 (0x00000d50ede74000)
	libharfbuzz-subset.so.0 => /usr/lib/libharfbuzz-subset.so.0 (0x00000d50edd44000)
	libfribidi.so.0 => /usr/lib/libfribidi.so.0 (0x00000d50edd24000)
	libcairo-gobject.so.2 => /usr/lib/libcairo-gobject.so.2 (0x00000d50edd1b000)
	libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x00000d50edcd6000)
	libepoxy.so.0 => /usr/lib/libepoxy.so.0 (0x00000d50edbc9000)
	libgraphene-1.0.so.0 => /usr/lib/libgraphene-1.0.so.0 (0x00000d50edbab000)
	libXi.so.6 => /usr/lib/libXi.so.6 (0x00000d50edb98000)
	libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x00000d50edb7b000)
	libcloudproviders.so.0 => /usr/lib/libcloudproviders.so.0 (0x00000d50edb62000)
	libtinysparql-3.0.so.0 => /usr/lib/libtinysparql-3.0.so.0 (0x00000d50eda91000)
	libvulkan.so.1 => /usr/lib/libvulkan.so.1 (0x00000d50eda07000)
	libtiff.so.6 => /usr/lib/libtiff.so.6 (0x00000d50ed97a000)
	libjpeg.so.8 => /usr/lib/libjpeg.so.8 (0x00000d50ed8dc000)
	libxkbcommon.so.0 => /usr/lib/libxkbcommon.so.0 (0x00000d50ed885000)
	libwayland-egl.so.1 => /usr/lib/libwayland-egl.so.1 (0x00000d50ed880000)
	libXext.so.6 => /usr/lib/libXext.so.6 (0x00000d50ed86b000)
	libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x00000d50ed85e000)
	libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x00000d50ed859000)
	libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00000d50ed851000)
	libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x00000d50ed844000)
	libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x00000d50ed83f000)
	libcairo-script-interpreter.so.2 => /usr/lib/libcairo-script-interpreter.so.2 (0x00000d50ed81d000)
	libmount.so.1 => /usr/lib/libmount.so.1 (0x00000d50ed7cd000)
	libffi.so.8 => /usr/lib/libffi.so.8 (0x00000d50ed7c2000)
	libpcre2-8.so.0 => /usr/lib/libpcre2-8.so.0 (0x00000d50ed721000)
	libappstream.so.5 => /usr/lib/libappstream.so.5 (0x00000d50ed66e000)
	libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00000d50ed643000)
	libbrotlicommon.so.1 => /usr/lib/libbrotlicommon.so.1 (0x00000d50ed620000)
	libthai.so.0 => /usr/lib/libthai.so.0 (0x00000d50ed615000)
	libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00000d50ed607000)
	libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0x00000d50ed5f8000)
	libxcb-shm.so.0 => /usr/lib/libxcb-shm.so.0 (0x00000d50ed5f3000)
	libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x00000d50ed54d000)
	libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00000d50ed51f000)
	libjson-glib-1.0.so.0 => /usr/lib/libjson-glib-1.0.so.0 (0x00000d50ed4f3000)
	libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00000d50ed3a6000)
	libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0x00000d50ed235000)
	libzstd.so.1 => /usr/lib/libzstd.so.1 (0x00000d50ed156000)
	liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00000d50ed123000)
	libjbig.so.2.1 => /usr/lib/libjbig.so.2.1 (0x00000d50ed115000)
	liblzo2.so.2 => /usr/lib/liblzo2.so.2 (0x00000d50ed0f2000)
	libblkid.so.1 => /usr/lib/libblkid.so.1 (0x00000d50ed0b9000)
	libcurl.so.4 => /usr/lib/libcurl.so.4 (0x00000d50ecfe5000)
	libxmlb.so.2 => /usr/lib/libxmlb.so.2 (0x00000d50ecfb5000)
	libyaml-0.so.2 => /usr/lib/libyaml-0.so.2 (0x00000d50ecf93000)
	libsystemd.so.0 => /usr/lib/libsystemd.so.0 (0x00000d50ece6e000)
	libstemmer.so.0 => /usr/lib/libstemmer.so.0 (0x00000d50ecda3000)
	libXau.so.6 => /usr/lib/libXau.so.6 (0x00000d50ecd9e000)
	libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00000d50ecd96000)
	libdatrie.so.1 => /usr/lib/libdatrie.so.1 (0x00000d50ecd8d000)
	libicuuc.so.75 => /usr/lib/libicuuc.so.75 (0x00000d50ecb8f000)
	libnghttp3.so.9 => /usr/lib/libnghttp3.so.9 (0x00000d50ecb6c000)
	libnghttp2.so.14 => /usr/lib/libnghttp2.so.14 (0x00000d50ecb42000)
	libidn2.so.0 => /usr/lib/libidn2.so.0 (0x00000d50ecb20000)
	libssh2.so.1 => /usr/lib/libssh2.so.1 (0x00000d50ecad5000)
	libpsl.so.5 => /usr/lib/libpsl.so.5 (0x00000d50ecabf000)
	libssl.so.3 => /usr/lib/libssl.so.3 (0x00000d50ec9e3000)
	libcrypto.so.3 => /usr/lib/libcrypto.so.3 (0x00000d50ec400000)
	libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00000d50ec990000)
	libcap.so.2 => /usr/lib/libcap.so.2 (0x00000d50ec984000)
	libicudata.so.75 => /usr/lib/libicudata.so.75 (0x00000d50ea600000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00000d50ea200000)
	libunistring.so.5 => /usr/lib/libunistring.so.5 (0x00000d50ea01d000)
	libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00000d50ea53b000)
	libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00000d50ec955000)
	libcom_err.so.2 => /usr/lib/libcom_err.so.2 (0x00000d50ec94d000)
	libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00000d50ec93f000)
	libkeyutils.so.1 => /usr/lib/libkeyutils.so.1 (0x00000d50ec938000)
	libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00000d50ec926000)

Die Dateigröße und die paar Abhängigkeiten sind bei der Vielzahl an Features doch allenfalls Nebensächlichkeiten. Und außerdem wird Ghostty so Terminal Multiplexer wie Tmux und Zellij eh verdrängen.. also wenn er erfolgreich ist. Wir reden dann mal in 20 Jahren weiter Mitchell; also wenn Tmux 37 Jahre und GNU Screen 58 Jahre alt sind und noch immer genutzt werden.

For comments, please send me an email