Ghostty 1.4: терминал ускоряется, экономит память и учится быть осторожнее


27 октября 2026 года Митчелл Хашимото выпустил эмулятор терминала с GPU-ускорением — Ghostty 1.4.0. За релизом стоят семь месяцев работы, 172 контрибьютера и 2889 коммитов. В тестах команды на macOS пропускная способность ввода-вывода выросла на 25–55%, а сжатие текстовой истории сократило занимаемую ею физическую память на 70–90%.
Откуда взялось такое ускорение, что изменилось в работе с графикой и SSH и на что обратить внимание перед обновлением? Разберём все главные изменения и их нюансы в нашем обзоре.
Коротко: основные изменения в текущей версии
История вывода: сжатие неактивных страниц, увеличение стандартного лимита с 10 до 50 МБ и ограничение по числу строк.
Увеличение производительности на MacOS: параллельное чтение и обработка вывода, ускорение разбора текста.
Linux получает другую организацию рендеринга: переход с GtkGLArea на EGL и исправление размытия при дробном масштабировании.
Картинки становятся полноценной частью терминала: поддержка анимаций и относительного размещения изображений из Kitty.
Буфер обмена выходит за пределы текста: работа с изображениями, HTML и другими форматами через Kitty Clipboard.
SSH остаётся SSH, но подготовка сессии упрощается: новая обёртка ghostty +ssh для подготовки удалённого окружения.
Безопасность: исправления обработки графики, вставки текста и открытия ссылок.
Обновление и настройки: новые требования к GTK и libadwaita, изменения copy-on-select.
Далее рассмотрим каждый пункт подробнее.
История вывода: переработка scrollback
Самое практичное изменение касается scrollback — истории вывода за пределами видимого экрана. Ghostty теперь сжимает неактивные страницы истории. По оценке разработчиков, для обычной текстовой истории экономия физической памяти — от 70 до 90%. Сжатие запускается, когда терминал простаивает; при прокрутке назад данные распаковываются по мере необходимости. Благодаря этому стандартный лимит истории увеличили с 10 до 50 МБ: заполненный новый буфер на поддерживаемых платформах обычно занимает меньше физической памяти, чем прежний.
Здесь есть существенная оговорка для любителей проверять обновления через системный монитор. Реализация освобождает физическую память, сохраняя виртуальные отображения. Поэтому оценивать результат нужно по резидентной памяти процесса, а не по размеру его виртуального адресного пространства. Механизм работает на macOS и 64-битном Linux. Авторы также объясняют, что сжатие выполняется небольшими проходами в простое, чтобы не мешать обработке активного вывода.
Теперь историю вывода стало удобнее ограничивать. Параметр scrollback-limit переименовали в более точный scrollback-limit-bytes, а рядом появился scrollback-limit-lines. Старое имя пока сохраняет совместимость с параметром. Можно задать оба ограничения: сработает то, которое будет достигнуто первым. Это полезное различие, поскольку одинаковое количество строк может занимать разный объём памяти в зависимости от текста и оформления.
Увеличение производительности на MacOS
История оптимизации ввода-вывода получилась неожиданной. Разработчики обнаружили, что на macOS ядро ограничивает отдельное чтение из псевдотерминала примерно одним килобайтом, даже если приложение предоставило большой буфер. Старый цикл обрабатывал каждую такую порцию отдельно. Накладные расходы повторялись слишком часто, а программа, печатающая данные, могла ждать, пока Ghostty разбирает предыдущую порцию.
В новой схеме один поток собирает данные из PTY в буферы, а другой параллельно разбирает уже полученный вывод. В тестах автора изменения на M4 Max прирост сквозной пропускной способности составил от 25 до 55% в зависимости от содержимого.
После разделения чтения и разбора ограничителем стал сам обработчик терминальных последовательностей. Его тоже переработали: обычные символы теперь можно записывать сериями, не повторяя для каждого одни и те же проверки, а некоторые управляющие последовательности проходят более коротким путём. В отдельных тестах обработка ASCII выросла со 128 до 725 МБ/с. Но это показатель стадии обработки, а не скорость приложения целиком. Для вывода файла объёмом 150 МБ автор приводит более приземлённое сравнение: 1,5 секунды до серии изменений против 566 миллисекунд после неё.
Интересна и роль ИИ в этой работе. По рассказу автора, перспективное направление подсказала модель Fable 5, но предложенный ею код потребовал серьёзной переработки. Итоговую реализацию Хашимото написал и проверил сам.
Linux получает другую организацию рендеринга
В GTK-версии Ghostty отказались от GtkGLArea. Раньше особенности этого виджета вынуждали выполнять вызовы OpenGL в основном потоке и поддерживать обходные решения вокруг инициализации и графического контекста. Теперь Ghostty создаёт контекст через EGL в потоке рендеринга и передаёт GTK готовые кадры через DMABUF. Интерфейс получает изображение, а не управляет всей графической работой.
Для пользователя заметный результат связан с дробным масштабированием. В релизе исправили размытый текст и псевдографику при масштабах вроде 125% и 150%: отрисовка теперь учитывает фактический дробный масштаб окна.
У архитектурной перемены есть и более дальнее следствие. Новый GTK-виджет принимает готовые буферы и больше не привязан непосредственно к OpenGL. Это облегчает добавление других графических бэкендов в будущем, однако это лишь возможность, поддержка условного Vulkan лишь в планах.
Картинки становятся полноценной частью терминала
Ghostty 1.4 завершает поддержку опубликованной спецификации Kitty Graphics, включая анимацию и относительное размещение изображений. По утверждению проекта, это первый терминал вне самого Kitty, который достиг такого покрытия.
Анимационная часть терминала включает передачу кадров, композицию и управление воспроизведением. В описании реализации автор честно обозначает компромисс: кадры предварительно собираются и хранятся в памяти в формате RGBA — разработчики сосредоточились на корректности и понятной архитектуре, оставив более сложную оптимизацию на будущее. При этом состояние анимации выделяется только там, где оно действительно требуется, поэтому статические изображения не должны оплачивать всю стоимость этой функциональности.
Относительное размещение позволяет привязать одну картинку к другой. Дочернее изображение получает положение относительно родительского, а не существует как независимый объект с отдельно рассчитанными координатами. Это расширяет возможности программ, которые собирают графический интерфейс внутри терминала из нескольких элементов.
На фоне нового расцвета терминальных инструментов, когда привычные IDE и редакторы всё чаще уступают место TUI-приложениям, внимание к таким деталям уже не кажется избыточным. Терминал давно перестал быть просто местом для ввода команд — современные приложения превращают его в полноценную интерактивную среду, где важны не только функциональность, но и визуальная составляющая. И чем богаче становятся эти интерфейсы, тем выше требования к возможностям самого терминала. В этом смысле Ghostty помогает раздвинуть границы возможностей внутри терминального окна.
Буфер обмена выходит за пределы текста
Ещё один шаг в этом направлении связан с Kitty Clipboard. Реализация чтения на macOS поддерживает нетекстовые данные, включая изображения, и показывает их предварительный просмотр в диалоге разрешения. Программа может обозначить себя, а пользователь получает более понятный запрос, чем безымянное обращение к содержимому буфера. Предусмотрено и запоминание разрешения для программы в рамках соответствующего механизма протокола.
Запись работает с произвольными представлениями данных, например изображениями и HTML. Она подчиняется настройке clipboard-write: доступ можно разрешить, запретить или выдавать после подтверждения.
Практический сценарий легко представить: консольное приложение принимает вставленную картинку без предварительного сохранения файла и ручного ввода пути. Но поддержка со стороны терминала сама по себе не добавляет такую функцию всем редакторам и утилитам. Использовать протокол должно и приложение.
SSH остаётся SSH, но подготовка сессии упрощается
Для удалённой работы появился вызов ghostty +ssh user@host. Это обёртка над настоящим SSH-клиентом: она подготавливает окружение, а затем передаёт ему остальные аргументы. Среди её задач установка описания возможностей терминала, terminfo, на удалённой машине и передача переменных, сообщающих о поддержке цвета и программе терминала. Поведение установки и использование кэша можно контролировать отдельными флагами.
Обёртка также заменяет часть повторявшейся логики в интеграциях разных оболочек. Вместо нескольких реализаций подготовки соединения используется общий механизм, который можно вызвать напрямую или через alias.
Безопасность: опасным бывает и обычный вывод
Самая веская причина обновиться скрывается в исправлениях безопасности. В обработке Kitty Graphics устранили несколько ошибок проверки данных и управления ресурсами. Злоумышленник, контролирующий вывод в терминал, мог вызвать зависание, падение или чрезмерное выделение памяти. В ограниченных условиях ошибки обработки временных файлов позволяли обращаться к файлам за пределами разрешённых каталогов. Для части этих сценариев было достаточно отобразить специально подготовленный вывод.
Отдельная ошибка касалась вставки текста. Защита не считала символ возврата каретки \r завершением строки, хотя при передаче в PTY он мог сработать как Enter. Поэтому опасная вставка могла пройти без ожидаемого подтверждения. Уязвимость затрагивала программы без bracketed paste; интерактивные Bash, Zsh и Fish с включённым по умолчанию этим режимом не относились к описанному случаю. В версии 1.4 возврат каретки проверяется наряду с переводом строки.
На macOS также изменили открытие гиперссылок OSC 8. Раньше специально подготовленный адрес мог попасть в системный механизм открытия файлов и URL и при дополнительных условиях привести к выполнению команд. Для этой атаки требовался клик пользователя, а не просто показ ссылки. Теперь опасные локальные цели блокируются, нестандартные схемы требуют подтверждения, а отображаемый адрес очищается от управляющих символов, способных скрыть его действительное содержание.
Эти исправления напоминают о неприятном свойстве терминала: он интерпретирует входящие данные, а не только рисует буквы. Лог с удалённого сервера или вывод неизвестной программы нельзя считать безопасным лишь потому, что он появился в текстовом окне. В этой части релиз заслуживает внимания даже тех, кому совершенно не нужны картинки и дополнительные мегабайты истории.
Перед обновлением стоит заглянуть в конфигурацию
GTK-версия теперь требует GTK 4.18 и libadwaita 1.7. Разработчики подняли нижнюю границу и убрали код совместимости со старыми версиями библиотек. Ubuntu 24.04 LTS этим требованиям не соответствует; в примечаниях предлагают использовать Flatpak либо оставаться на прежней версии Ghostty. На macOS минимальная поддерживаемая версия осталась прежней, macOS 13 Ventura; одновременно добавлена совместимость с macOS 27.
Пересмотрена и логика copy-on-select. Теперь настройка явно различает отсутствие автоматического копирования, primary-буфер, системный буфер и оба сразу. Прежний смысл значения clipboard, копирование в оба буфера, больше не соответствует его названию: для такого поведения следует выбрать both. Настройка копирования выделения и поведение средней кнопки мыши разделены, чтобы одно действие не меняло неожиданно другое.
Именно подобные изменения полезно проверить раньше, чем начать искать регрессию. Если привычное выделение или вставка ведут себя иначе, причина может находиться в новых правилах конфигурации, а не в сломанном терминале.
Ghostty 1.4 интересен сочетанием разных масштабов работы. В одном выпуске соседствуют крупная переделка обработки вывода и уточнение значения настройки копирования. Сжатие истории освобождает ресурсы, графические протоколы расширяют возможности программ, исправления безопасности сужают пространство для злоупотреблений. Для повседневной работы это хороший набор приоритетов: терминал хранит больше полезного, быстрее обрабатывает поток данных и аккуратнее обращается с тем, что приходит извне. Проверять результат стоит на собственном сценарии, а впечатляющие цифры из отдельных тестов оставлять в их исходном контексте.
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
-15% на заказ нового VDS — HABRFIRSTVDS.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.