Zum Inhalt springen

Libghostty 1.0 liefert eine stabile C-ABI für Terminal-Apps

Libghostty-vt 1.0 erschien am 6. November mit einer stabilen C-ABI. Ein Build-Test von Tech AI Wire fand 209 versionierte Funktionen und eine Versionsnummer, die gesunken ist.

Von

4 Min. Lesezeit

XLinkedIn

Maschinell übersetzt aus dem englischen Original, das Claire Whitmore auf Fakten geprüft und redigiert hat. Es gilt die englische Fassung. So arbeiten wir

Screenshot of the libghostty-vt documentation's C example, which creates an 80x24 terminal with ghostty_terminal_new and writes colored text into it.
Foto: Ghostty project

Die Zahlen

exportierte Funktionen, alle mit dem Tag GHOSTTY_VT_1.0, in einem Build von Tech AI Wire
209
Build aus den signierten Tarballs in einem Linux-Container-Test von Tech AI Wire
117 s
aktive Terminals auf einem Linux-Rechner mit 4 Kernen und 8 GB im Test eines Nutzers, laut Dokumentation
10.000

Mitchell Hashimoto hat am 6. November 2026 libghostty-vt 1.0 veröffentlicht. Es ist die erste stabile Version der Terminal-Engine, die in seinem Terminal Ghostty steckt. Version 1.0 friert die C-ABI der Bibliothek ein, also die binäre Schnittstelle, gegen die kompilierte Programme gelinkt werden. Eine App, die heute auf 1.0 gebaut wird, sollte weiterlaufen, wenn spätere 1.x-Versionen die Bibliothek darunter ersetzen. Das zählt, weil JetBrains-IDEs ihr eingebautes Terminal bereits darauf betreiben. Neovim wartet auf diese Version, um seinen alten Terminal-Code abzulösen.

Was libghostty-vt 1.0 verspricht

Eine Terminal-Engine liest die Bytes, die ein Programm ausgibt, einschließlich der Escape-Codes für Farben und Cursorbewegungen. Dann verfolgt sie den Bildschirm, den Cursor und den Scrollback. Sie zeichnet nichts. Das Zeichnen bleibt der App überlassen. Deshalb können sich ein KDE-Terminal, eine IDE und eine Webseite dieselbe Engine teilen.

„1.0 bedeutet, dass libghostty-vt der semantischen Versionierung folgt und strikte ABI-Kompatibilität verspricht“, schreibt Hashimoto in seinem Ankündigungsbeitrag. Er beschreibt, wie das Projekt das durchsetzt:

  • Code, der mit neueren Headern gebaut wurde, bekommt von einer älteren Bibliothek den Fehler GHOSTTY_UNSUPPORTED statt eines Absturzes.
  • Jede exportierte Funktion trägt unter Linux und anderen ELF-Systemen ein Versions-Tag. So lehnt das System eine unpassende Bibliothek beim Programmstart anhand des Namens ab.
  • Die Continuous Integration vergleicht die ABI unter Linux mit libabigail gegen eine gespeicherte Referenz. Unter macOS und WebAssembly vergleicht sie gegen feste Typlisten.

Die Bibliothek hat jetzt einen eigenen Release-Zyklus, getrennt von der Ghostty-App. Jede Version liefert einen signierten Quell-Tarball und einen zweiten Tarball mit allen Zig-Abhängigkeiten. So können Linux-Distributionen offline bauen. Die Regeln stehen in PACKAGING-LIBGHOSTTY.md. Der Code steht unter der MIT-Lizenz und braucht zur Laufzeit nur die C-Bibliothek.

Wer sie bereits nutzt

JetBrains betreibt das Terminal in IntelliJ, PyCharm, GoLand und seinen anderen IDEs inzwischen mit der Bibliothek, sagt Hashimoto. Er nennt JetBrains' eigene Zahl von 12,5 Millionen wiederkehrenden Nutzern dieser IDEs. Die Dokumentation des Projekts schätzt, dass zig Millionen Menschen libghostty-vt täglich nutzen, und merkt an, dass es kein Tracking gibt.

Neovim hat laut Hashimoto einen genehmigten Pull Request, #39773, der libvterm durch libghostty-vt ersetzt. Er wartete auf eine getaggte Version und war am 7. November noch offen. Er würde einen zehn Jahre alten Fehler beheben, bei dem Terminaltext nach einer Größenänderung des Fensters abgeschnitten wird. Weitere Nutzer sind Vercels Turborepo, OrbStack, das Terminal Ghostel für Emacs und KDEs experimentelles Terminal Kwi. Bindings aus der Community gibt es für Rust, Go, Python, Swift, .NET und mehr.

Getestet: 1.0 aus den signierten Tarballs gebaut

In einem Test von Tech AI Wire am 7. November baute ein Alpine-Linux-3.22-Container (arm64) unter macOS 26.6.2 mit Docker 28.4.0 die Version. Er folgte den Schritten, die der Packaging-Leitfaden Distributionen vorgibt:

minisign -V -P RWQlAjJC23149WL2sEpT/l0QKy7hMIFhYdQOFy0Z7z7PbneUgvlsnYcV -m libghostty-vt-1.0.0.tar.gz
ZIG_GLOBAL_CACHE_DIR=/tmp/build-cache zig build --prefix /usr \
  --system ../libghostty-vt-1.0.0-deps -Doptimize=ReleaseFast -Dcpu=baseline
objdump -T /usr/lib/libghostty-vt.so | grep -c GHOSTTY_VT_1.0
PrüfungErgebnis
Signaturen von Quellen, Abhängigkeiten und SHA256SUMSAlle drei mit minisign verifiziert
Zig-Compiler0.17.0 (die Version verlangt 0.17.x)
Build-Zeit, ReleaseFast117 Sekunden
Gemeinsame Bibliotheklibghostty-vt.so.1.0.0, 11,5 MB, soname libghostty-vt.so.1
LaufzeitabhängigkeitenNur die C-Bibliothek (musl)
Exportierte Funktionen209, jede mit dem Tag GHOSTTY_VT_1.0
pkg-config-Version1.0.0
Das C-Beispiel der DokumentationMit gcc kompiliert, gab „Hello, world!“ aus

Der erste Versuch scheiterte. Die mitgelieferte C++-Laufzeit von Zig brauchte den Header linux/futex.h, der in einem nackten Alpine-Image fehlt. Die Installation von Alpines Paket linux-headers behob das.

Die Versionsnummer ist gesunken

Vor 1.0 übernahm libghostty-vt seine Version von der Ghostty-App. In den Build-Dateien von Ghostty 1.4.0 ist die Version der Bibliothek die der App, also 1.4.0. Die stabile Version meldet 1.0.0. Im Build von Tech AI Wire antwortete pkg-config --atleast-version=1.4.0 libghostty-vt mit Nein.

KDEs Kwi musste sich anpassen. Am 7. November änderte der Commit „Deps: Bump to libghostty-vt 1.0“ von Entwickler Eike Hein die README von „libghostty-vt 1.4.0+“ auf „libghostty-vt 1.0+“. Derselbe Commit zeigt, dass sich die C-API selbst vor dem Einfrieren geändert hat. ghostty_formatter_terminal_new() verlor sein Optionsargument, das jetzt mit ghostty_formatter_set() gesetzt wird. Zwei Typen für den Cursorstil wurden durch einen ersetzt, GhosttyCursorStyle.

Was das für Entwickler bedeutet

  • Alte Versionsprüfungen auf 1.0 senken. Eine CMake- oder pkg-config-Prüfung auf 1.4 oder neuer lehnt die stabile Bibliothek ab. Kwi verlangt jetzt find_package(Ghostty 1.0 REQUIRED).
  • Code neu kompilieren, der gegen einen Build vor 1.0 geschrieben wurde. Das ABI-Versprechen beginnt mit 1.0. Rechnen Sie mit umbenannten Typen und geänderten Funktionssignaturen, wie bei Kwis Portierung.
  • Paketbetreuer sollten die Release-Tarballs nutzen, keinen Git-Checkout. Laut Leitfaden baut ein Checkout oder GitHub-Archiv stattdessen die Ghostty-App, außer man ergänzt -Demit-lib-vt. Verwenden Sie ein frisches, leeres ZIG_GLOBAL_CACHE_DIR und Zig 0.17.x.
  • Gegen den soname libghostty-vt.so.1 linken. Spätere 1.x-Versionen behalten diesen Namen. So erhalten heute gebaute Programme Korrekturen ohne neuen Build.
  • Die eigene Plattform prüfen. Hashimoto nennt Windows on Arm, illumos, 32-Bit-x86, WASI und Bare Metal als in der CI gebaut, aber nicht getestet. Er beansprucht auch keine vollständige Abdeckung aller Terminalprotokolle.
  • Neovim-Nutzer können abwarten. Nichts ändert sich, bis Pull Request #39773 gemergt ist und in einer Version erscheint.

Quellen

  1. Libghostty 1.0 - Mitchell Hashimoto
  2. Packaging libghostty-vt for Distribution - GitHub
  3. libghostty-vt documentation - Ghostty
  4. feat(terminal): replace libvterm with libghostty-vt - GitHub
  5. Deps: Bump to libghostty-vt 1.0 - KDE on GitHub
  6. Libghostty 1.0 gives developers a stable terminal engine to embed - RuntimeWire
open-sourcelinuxterminalneovimzig

Ähnliche Artikel