Libghostty 1.0、ターミナルアプリ向けの安定したC ABIを提供
Ghostty(ゴーストティ)のターミナルエンジンlibghostty-vt 1.0が11月6日に公開され、C ABIが安定しました。Tech AI Wireのビルド検証では、バージョン付きの関数209個と、下がったバージョン番号を確認しました。
4 分で読めます
英語の原文から機械翻訳したものです。原文はClaire Whitmoreが事実確認と編集を行いました。内容に相違がある場合は英語版が優先されます。 編集方針

数字で見る
- Tech AI Wireのビルドでエクスポートされた関数。すべてGHOSTTY_VT_1.0のタグ付き
- 209
- Tech AI WireのLinuxコンテナ検証で、署名付きtarballからのビルドにかかった時間
- 117秒
- ドキュメントによると、ある利用者の検証で4コア・8GBのLinuxマシンが動かしたターミナルの数
- 10,000
Mitchell Hashimoto氏は2026年11月6日、libghostty-vt 1.0を公開しました。同氏のターミナルGhosttyの中にあるターミナルエンジンの、初の安定版です。バージョン1.0では、ライブラリーのC ABIが固定されます。C ABIとは、コンパイル済みのプログラムがリンクするバイナリーのインターフェースです。今日1.0でビルドしたアプリは、後の1.xリリースでライブラリーが置き換わっても動き続けるはずです。これが重要なのは、すでに利用者がいるためです。JetBrainsのIDEは内蔵ターミナルをこのライブラリーで動かしています。Neovimも、古いターミナルコードを外すためにこのリリースを待っています。
libghostty-vt 1.0が約束すること
ターミナルエンジンは、プログラムが出力するバイト列を読み取ります。そこには、色やカーソル移動のためのエスケープコードも含まれます。そのうえで、画面、カーソル、スクロールバックの状態を管理します。描画は一切行いません。描画はアプリ側に任されます。だからこそ、KDEのターミナルもIDEもWebページも、同じエンジンを共有できます。
「1.0は、libghostty-vtがセマンティックバージョニングに従い、厳格なABI互換性を約束するという意味です」と、Hashimoto氏は発表記事に書いています。プロジェクトがそれをどう守るのか、同氏は次のように説明しています。
- 新しいヘッダーでビルドしたコードが古いライブラリーに当たると、クラッシュではなく
GHOSTTY_UNSUPPORTEDエラーが返ります。 - LinuxなどのELFシステムでは、エクスポートされるすべての関数にバージョンタグが付きます。そのため、合わないライブラリーはプログラムの起動時に名前で拒否されます。
- 継続的インテグレーション(CI)では、Linuxでlibabigailを使い、ABIを保存済みの基準と比べます。macOSとWebAssemblyでは、固定した型の一覧と比べます。
ライブラリーには、Ghosttyアプリとは別の独自のリリースサイクルができました。各リリースには、署名付きのソースtarballと、Zigの依存パッケージをすべて収めた2つ目のtarballが付きます。これにより、Linuxディストリビューションはオフラインでビルドできます。手順はPACKAGING-LIBGHOSTTY.mdにあります。コードはMITライセンスで、実行時に必要なのはCライブラリーだけです。
すでに使っているところ
Hashimoto氏によると、JetBrainsはIntelliJ、PyCharm、GoLandなど自社IDEのターミナルを、このライブラリーで動かしています。同氏は、これらのIDEの継続利用者が1250万人というJetBrains自身の数字を挙げています。プロジェクトのドキュメントは、libghostty-vtを毎日使う人を数千万人と見積もっています。ただし、利用状況の追跡はしていないとも記しています。
Hashimoto氏によると、Neovimには承認済みのプルリクエスト#39773があり、libvtermをlibghostty-vtに置き換えます。このプルリクエストはタグ付きリリースを待っており、11月7日の時点ではまだオープンでした。マージされれば、ウィンドウのリサイズ後にターミナルの文字が切れる、10年来のバグが解消されます。ほかの利用例には、VercelのTurborepo、OrbStack、Emacs向けのターミナルGhostel、KDEの実験的なターミナルKwiがあります。コミュニティによるバインディングは、Rust、Go、Python、Swift、.NETなど向けにあります。
検証:署名付きtarballから1.0をビルド
Tech AI Wireは11月7日、macOS 26.6.2とDocker 28.4.0の環境で検証しました。Alpine Linux 3.22のコンテナ(arm64)で、このリリースをビルドしました。手順は、パッケージングガイドがディストリビューション向けに示すものに従いました。
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
| 確認項目 | 結果 |
|---|---|
| ソース、依存パッケージ、SHA256SUMSの署名 | 3つともminisignで検証済み |
| Zigコンパイラー | 0.17.0(このリリースには0.17.xが必要) |
| ビルド時間(ReleaseFast) | 117秒 |
| 共有ライブラリー | libghostty-vt.so.1.0.0、11.5MB、sonameはlibghostty-vt.so.1 |
| 実行時の依存 | Cライブラリー(musl)のみ |
| エクスポートされた関数 | 209個、すべてGHOSTTY_VT_1.0のタグ付き |
| pkg-configのバージョン | 1.0.0 |
| ドキュメントのCのサンプル | gccでコンパイルでき、「Hello, world!」と出力 |
最初の試行は失敗しました。Zigに同梱されたC++ランタイムがlinux/futex.hというヘッダーを必要としましたが、素のAlpineイメージにはありません。Alpineのlinux-headersパッケージを入れると解決しました。
バージョン番号が下がった
1.0より前、libghostty-vtのバージョンはGhosttyアプリから取られていました。Ghostty 1.4.0のビルドファイルでは、ライブラリーのバージョンはアプリと同じ1.4.0です。安定版は1.0.0を名乗ります。Tech AI Wireのビルドでは、pkg-config --atleast-version=1.4.0 libghostty-vtの答えは「いいえ」でした。
KDEのKwiは対応を迫られました。11月7日、開発者Eike Hein氏のコミット「Deps: Bump to libghostty-vt 1.0」が、READMEの「libghostty-vt 1.4.0+」を「libghostty-vt 1.0+」に変えました。同じコミットからは、固定の前にC APIそのものが変わったこともわかります。ghostty_formatter_terminal_new()はオプション引数を失い、オプションはghostty_formatter_set()で設定するようになりました。カーソルスタイルの型は、2つからGhosttyCursorStyleの1つに統合されました。
開発者にとっての意味
- 古いバージョンチェックは1.0に下げる。 CMakeやpkg-configで1.4以降を求めるチェックは、安定版を拒否します。Kwiは現在、
find_package(Ghostty 1.0 REQUIRED)を求めています。 - 1.0より前のビルド向けに書いたコードは再コンパイルする。 ABIの約束は1.0から始まります。Kwiの移行のように、型の名前変更や関数シグネチャーの変更を想定してください。
- パッケージャーはGitのチェックアウトではなくリリースのtarballを使う。 ガイドによると、チェックアウトやGitHubのアーカイブでは、
-Demit-lib-vtを付けない限りGhosttyアプリがビルドされます。新しい空のZIG_GLOBAL_CACHE_DIRと、Zig 0.17.xを使ってください。 - soname、libghostty-vt.so.1にリンクする。 後の1.xリリースもこの名前を保つため、今ビルドしたプログラムは再ビルドなしで修正を受け取れます。
- 自分のプラットフォームを確認する。 Hashimoto氏は、Windows on Arm、illumos、32ビットx86、WASI、ベアメタルについて、CIでビルドはするがテストはしていないとしています。また、すべてのターミナルプロトコルに対応したとは主張していません。
- Neovimのユーザーは待ってかまわない。 プルリクエスト#39773がマージされ、リリースに入るまでは何も変わりません。
出典
- Libghostty 1.0 - Mitchell Hashimoto
- Packaging libghostty-vt for Distribution - GitHub
- libghostty-vt documentation - Ghostty
- feat(terminal): replace libvterm with libghostty-vt - GitHub
- Deps: Bump to libghostty-vt 1.0 - KDE on GitHub
- Libghostty 1.0 gives developers a stable terminal engine to embed - RuntimeWire
関連記事

OpenSSH 10.6p2、Alpine Linuxのパスワード回避の脆弱性を修正
OpenSSH 10.6p2とAlpine Linux(アルパイン・リナックス)は11月5日、パスワードなしでSSHログインできる不具合を修正しました。Tech AI Wireが5つのAlpineイメージで、影響を受ける条件を確かめました。

KDEの新ターミナルKwi、Konsole比3倍〜35倍の高速化をうたう
KDE開発者のEike Hein氏が11月1日、GPU描画のターミナルKwi(クウィ)を発表しました。Ghosttyのlibghostty-vtを基盤とし、Konsole比で3倍〜35倍速いと説明しています。

GitLabのCVE-2026-97229:Alpineが悪用の試みを報告
Alpine Linuxは、10月20日から21日にかけて、同プロジェクトのGitLab(ギットラボ)サーバーでCVE-2026-97229の悪用が試みられたと発表しました。GitLabのアップグレードだけでは直りませんでした。修正パッチはRuby(ルビー)の側にあります。