← На главную

Libghostty-vt 1.0 получила стабильный C ABI

06.11.2026 23:30 · hackernews

Вышла libghostty-vt 1.0 — переносимая C-библиотека эмуляции терминала, извлечённая из ядра Ghostty. Релиз закрепляет стабильность самой библиотеки и C ABI, semantic versioning и правила совместимости для дистрибутивов и приложений с динамической компоновкой.

За год проект вышел далеко за пределы Ghostty. Терминалы IntelliJ, PyCharm, GoLand и других JetBrains IDE теперь работают на libghostty; по отчёту JetBrains, это более 12,5 млн активных пользователей. Neovim одобрил pull request о замене libvterm, ожидая tagged release для отдельного пакета в дистрибутивах. Библиотеку также используют Turborepo, devenv, OrbStack и другие проекты, а сообщество подготовило bindings для Rust, Go, JavaScript, Swift, Python, .NET, Elixir, Dart и Java.

ABI спроектирован для расширения без поломки старых программ. Объекты представлены opaque handles, значения читаются и изменяются через enum-keyed getters и setters, а немногочисленные открытые структуры содержат размер или зарезервированное место. Новые заголовки со старой библиотекой возвращают GHOSTTY_UNSUPPORTED вместо неопределённого поведения. CI проверяет изменения через libabigail и манифесты типов, а ELF-символы версионируются.

Релизы libghostty отделены от приложения Ghostty. Подписанные tarballs и отдельный архив зависимостей позволяют собирать библиотеку офлайн. Поставляются shared и static libraries, заголовки, pkg-config и CMake config. Лицензия — MIT, дерево зависимостей не содержит copyleft, а машиночитаемый манифест перечисляет версии, SPDX-лицензии и хеши. Во время выполнения требуется только libc, от которой тоже можно отказаться при freestanding-сборке.

Полные тесты запускаются для Linux, macOS, iOS, FreeBSD, Windows, Android и WebAssembly на нескольких архитектурах. Дополнительно собираются WASI, bare metal, illumos и другие варианты. WebAssembly-модуль, оптимизированный по размеру, занимает менее мегабайта со всеми функциями; ненужные подсистемы можно исключить.

Библиотека не создаёт потоков и использует настраиваемый allocator. Автор смог запустить 10 тысяч активных терминалов с живыми shell на сервере с четырьмя ядрами и 8 ГБ памяти. По его оценке, примерно 1500 строк C достаточно, чтобы создать на её основе современный терминал.

Читать оригинал →