
Команда проекта Ghostty (разрабатывает эмулятор терминала с GPU-ускорением для отрисовки контента) представила открытый демо-проект Ghostling — минималистичный терминал на основе libghostty.
«Ghostling — это демонстрационный проект, призванный показать минимальный функциональный терминал, построенный на основе C API libghostty в одном файле C». — пояснили разработчики решения.
В проекте используется Raylib для работы с окнами и рендеринга. Проект однопоточный (хотя libghostty-vt поддерживает многопоточность) и использует 2D-графический рендерер вместо прямого рендерера GPU, как основной графический интерфейс Ghostty. Это сделано для демонстрации гибкости libghostty и того, как его можно использовать в различных контекстах.
«Предупреждение: терминал Ghostling не предназначен для повседневного использования в качестве полноценного терминала. Это минимальный жизнеспособный терминал, основанный на libghostty. Кроме того, поскольку это, по сути, демонстрация, я не проверял тщательно каждое место на корректность, и это C, так что вы предупреждены», — уточнил один из разработчиков Ghostling.

Libghostty — это встраиваемая библиотека, извлечённая из ядра Ghostty, предоставляющая API на C и Zig, благодаря чему любое приложение может встраивать корректную и быструю эмуляцию терминала.
Проект Ghostling использует libghostty-vt, библиотеку без зависимостей (даже без libc), которая обрабатывает парсинг последовательности VT, управление состоянием терминала (положение курсора, стили, переформатирование текста, прокрутка и управление состоянием рендерера. Эта библиотека не содержит кода отрисовки или оконного отображения; потребитель (в данном случае Ghostling) предоставляет свой собственный код для этих действий. Основная логика в проекте извлечена непосредственно из Ghostty и наследует всё его преимущества: полная поддержка эмуляции терминала, SIMD-оптимизированный парсинг, поддержка Unicode, высокооптимизированное использование памяти.
Особенности проекта:
изменение размера с переформатированием текста;
полная поддержка 24-битного цвета и 256-цветной палитры;
разные стили текста;
обработка Unicode и multi-codepoint grapheme (без изменения формы или слоёв);
ввод с клавиатуры с поддержкой модификаторов (Shift, Ctrl, Alt, Super);
поддержка протокола клавиатуры Kitty;
отслеживание мыши (режимы X10, обычный, кнопка и любое событие);
форматы отчётов мыши (SGR, URxvt, UTF8, X10);
поддержка колёсика мыши (прокрутка назад или переадресация в приложения);
полоса прокрутки с перетаскиванием мыши для прокрутки.
В будущем разработчики проекта планируют добавить поддержку протокола графики Kitty, поддержку буфера обмена OSC и настройки заголовков OSC.
