LINUX.ORG.RU

Ghostty 1.4.0

 , , ,


0

5

Команда разработчиков эмулятора терминала Ghostty представила версию 1.4.0. Новая версия стала итогом 7 месяцев активной разработки: над ней трудились 172 контрибьютора, сделавших 2 289 коммитов. В этой версии: серьёзное ускорение работы, снижение потребления памяти, полноценная поддержка протокола Kitty и множество других улучшений для всех поддерживаемых платформ.

Ghostty — это быстрый, многофункциональный и кроссплатформенный эмулятор терминала, использующий собственный пользовательский интерфейс и аппаратное ускорение графики. Ghostty построен на libghostty — переносимой встраиваемой библиотеке эмуляции терминала . libghostty лежит в основе всех встроенных терминалов в IDE от JetBrains, и сейчас ведутся работы по замене ядра терминала с libvterm на libghostty в Neovim.

Главные нововведения

1. 100% поддержка Kitty Graphics (с анимацией и относительным позиционированием)

Ghostty стал первым сторонним терминалом (помимо самого Kitty), реализовавшим полную спецификацию протокола графики Kitty.

  • Анимация: Теперь анимированные изображения (например, GIF через kitten icat) воспроизводятся прямо в терминале, а не замирают на первом кадре. Анимация автоматически ставится на паузу, когда окно терминала неактивно.
  • Относительное позиционирование: Позволяет программам привязывать дочерние изображения к родительским элементам, чтобы они перемещались вместе.
  • Производительность: Парсинг графических данных теперь переведен на SIMD, что ускорило передачу крупных изображений примерно в 16 раз (в тестах для 64 МБ данных).

2. Сжатие истории (Scrollback Compression) и снижение расхода памяти

  • Прозрачное сжатие: Невидимая часть истории строк теперь сжимается «на лету» в фоновом режиме во время простоя терминала, экономя от 70% до 90% физической памяти для текстовых логов. Распаковка происходит мгновенно при прокрутке или поиске.
  • Лимит истории по умолчанию: Благодаря компрессии стандартный лимит буфера прокрутки увеличен с 10 МБ до 50 МБ на один терминал.
  • Оптимизация вкладок: Новое пустое окно на macOS теперь потребляет всего около 16 КиБ (против 128 КиБ ранее). Неактивные вкладки теперь сбрасывают ресурсы GPU, что в тестах с 20 скрытыми вкладками снизило потребление памяти с 385 МБ до 18 МБ.

3. Резкий рост производительности и пропускной способности I/O

  • Обход ограничений macOS: Ядро macOS искусственно ограничивает размер каждого чтения из pty примерно до 1 КиБ. Ghostty теперь производит чтение в отдельном потоке, увеличивая общую сквозную пропускную способность I/O на 25–55%.
  • Парсер VT: Обработка простого ASCII-текста в бенчмарках выросла со 128 МБ/с до 725 МБ/с (в 5.7 раз), а работа с текстом на CJK — в 3.4 раза. Операция cat для 150-мегабайтного текстового файла на macOS теперь занимает всего 566 мс вместо 1.5 секунд.
  • Изменение размера: Изменение размеров окна с большими логами (например, 10 000 строк) теперь происходит примерно в 6 раз быстрее.

4. Новый OpenGL-рендерер для Linux и FreeBSD

Приложение для GTK получило полностью переработанный конвейер рендеринга без использования устаревшего GtkGLArea. Рендерер рисует кадры через EGL в отдельном потоке с тройной буферизацией (DMABUF).

  • Главный визуальный итог: исправлена размытость текста при дробном масштабировании (например, 125% или 150%) в Linux.

5. Полноценная интеграция с протоколом буфера обмена Kitty (OSC 5522)

Ghostty теперь поддерживает протокол обмена буфера обмена Kitty на macOS и GTK. Это позволяет терминальным приложениям передавать и принимать не только чистый текст, но и изображения, HTML и другие форматы, а также запрашивать доступ к конкретным типам данных в буфере обмена с удобным окном предпросмотра и запросом прав.

6. Улучшения для SSH и утилита ghostty +ssh

Представлен новый удобный CLI-инструмент ghostty +ssh, который автоматически подготавливает удаленный хост (устанавливает terminfo, пробрасывает переменные окружения COLORTERM, TERM_PROGRAM и др.) и запускает стандартный ssh. Теперь можно просто настроить алиас:

alias ssh='ghostty +ssh --'

7. Поддержка macOS 27 (Golden Gate)

Добавлена полная совместимость с macOS 27: исправлено отображение вкладок в стиле tabs (macos-titlebar-style = tabs), устранено появление серых плашек поверх тем при использовании кастомного стиля заголовков, а также сохранена полная обратная совместимость вплоть до macOS 13 (Ventura).

>>> Полный список изменений

★★★★★

Проверено: maxcom ()
Последнее исправление: hobbit (всего исправлений: 7)
Ответ на: комментарий от Lrrr

Вы прикалываетесь все? У вас в тесте глиф z, его отрендерить нужно ровно 1 (один) раз, куда у вас там что просаживается?

BruteForce ★★★★★
()
Ответ на: комментарий от shdown

altwazar, MoldAndLimeHoney, почему urxvt «убогий», «нихрена не умеет и выглядит как привет из «640Kb хватит всем»?

Не поддерживает truecolor, что создаёт проблемы с темами всяких вимов/хеликсов. Не поддерживает даже sixel, предпросмотр изображений в каком-нибудь fm типа yazi просто засирает весь терминал мусором. При этом, какой-нибудь foot тоже с cpu-рендерингом будет быстрее, как и новый ghostty, kitty, alacritty на машинах с нормальным видеодрайвером.

altwazar ★★★★★
()
Ответ на: комментарий от altwazar

По иронии, foot без учёта динамических библиотек как раз умещается в те самые 640 килобайт, с запасом даже))

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

Среди простых терминалов, когда не нужны табы, сплиты и всякие доп. фичи, у него конкурентов особо и нет. Быстрый, не жрет, багов не замечал.

altwazar ★★★★★
()
Ответ на: комментарий от altwazar

При этом, какой-нибудь foot тоже с cpu-рендерингом будет быстрее, как и новый ghostty, kitty, alacritty на машинах с нормальным видеодрайвером.

В твиттере отметился автор velocitty, дескать, быстрее.

Как выяснилось чуть позже, он херит свой scrollback.

sarumeister ★
()

Для работы терминала теперь нужно ускорение на GPU? Инженерия, которую мы заслужили.

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Для работы терминала теперь нужно ускорение на GPU?

В разрешениях выше FullHD слишком много пикселей чтобы что-то выводить без 3D-ускорения.

Картинку на разрешениях до FullHD включительно можно выводить и с 2D-ускорением.

Без ускорения можно выводить текстовый режим на ЭЛТ монитор.

ЗЫ. Даже DEC VT100 не был просто «монитором с клавиатурой», у него была дополнительная начинка, включая CPU (Intel 8080) и 3 Кб RAM.

saahriktu ★★★★★
()
Ответ на: комментарий от Xintrea

ы терминала теперь нужно ускорение на GPU?

Много знаешь десктопов/лэптопов без ускорения на GPU?

Инженерия, которую мы заслужили.

Не использовать возможности железа – это инженерия, которую ты желаешь?

MoldAndLimeHoney ★★★
()
Ответ на: комментарий от MoldAndLimeHoney

ы терминала теперь нужно ускорение на GPU?
Много знаешь десктопов/лэптопов без ускорения на GPU?

Мой домашний десктоп на Core2Duo E8400, и в нем нет GPU.

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Для работы терминала теперь нужно ускорение на GPU? Инженерия, которую мы заслужили.

Да е-мое! У тебя текст скроллится снизу вверх. Куски надо вверх бит-блиттить!

sarumeister ★
()

Нечего тут бенчмарками измерять потому что в Ghostty есть более серьёзные проблемы.

Там кириллические шрифты сломаны. Накрепко. Давно.

https://github.com/ghostty-org/ghostty/discussions/12211

Для проверки: echo -e '\033[3mтпоср\033[0m'

Oreolek ★
()
Последнее исправление: Oreolek (всего исправлений: 1)
Ответ на: комментарий от Ja-Ja-Hey-Ho

Но кстати может это не то, о чём говорил автор. Очень не хватает скриншота проблемы с отрисовкой.

Ja-Ja-Hey-Ho ★★★★★
()
Ответ на: комментарий от Ja-Ja-Hey-Ho
info(font_shared_grid_set): font regular: Inconsolata LGC Nerd Font Mono
info(font_shared_grid_set): font bold: Inconsolata LGC Nerd Font Mono Bold
info(font_shared_grid_set): font italic: Inconsolata LGC Nerd Font Mono Italic
info(font_shared_grid_set): font bold_italic: Inconsolata LGC Nerd Font Mono Bold Italic

У меня всё работает. Нужный шрифт, италик. Правда в конфиге шрифты нормально указал:

font-family = "Inconsolata LGC Nerd Font Mono"
font-style-bold = "Bold"
font-style-italic = "Italic"
font-style-bold-italic = "Bold Italic"
altwazar ★★★★★
()
Последнее исправление: altwazar (всего исправлений: 1)
Ответ на: комментарий от altwazar

Похоже тут скорее вопрос к самому шрифту, чем к терминалу.

Сейчас настроил этот же шрифт в Alacritty - всё так же отрисовывает.

Или уже исправили в новом релизе.

Ja-Ja-Hey-Ho ★★★★★
()
Ответ на: комментарий от Ja-Ja-Hey-Ho

Что дефолтный JetBrains Mono, что Nerd из бага нормально показывают италик кириллицу. Единственное, что там наклонное «т», а не «m», в этом проблема? Хотя мне так даже больше нравится.

Скринов да, не хватает. Oreolek, покажешь?

Logopeft ★★★
()
Ответ на: комментарий от Dr64h

Ghostty 1.4.0 (комментарий)

Вы прикалываетесь все? У вас в тесте глиф z, его отрендерить нужно ровно 1 (один) раз, куда у вас там что просаживается?

BruteForce

kitten __benchmark__ --render

kitty 0.48.2
  Only ASCII chars                     : 4.14s      @ 48.3    MB/s
  Unicode chars                        : 3.59s      @ 50.4    MB/s
  Unique multi-codepoint Unicode cells : 47.25s     @ 3.7     MB/s
  CSI codes with few chars             : 4.32s      @ 23.1    MB/s
  Long escape codes                    : 2.97s      @ 264.3   MB/s
  Images                               : 2.23s      @ 239.7   MB/s

foot 1.28.0
  Only ASCII chars                     : 3.46s      @ 57.9    MB/s
  Unicode chars                        : 5.2s       @ 34.8    MB/s
  Unique multi-codepoint Unicode cells : 1m5.62s    @ 2.7     MB/s
  CSI codes with few chars             : 5.74s      @ 17.4    MB/s
  Long escape codes                    : 4.21s      @ 186.4   MB/s
  Images                               : 2.38s      @ 224.0   MB/s

alacritty 0.17.0
  Only ASCII chars                     : 5.13s      @ 39.0    MB/s
  Unicode chars                        : 3.28s      @ 55.2    MB/s
  Unique multi-codepoint Unicode cells : 8.34s      @ 21.0    MB/s
  CSI codes with few chars             : 4.3s       @ 23.3    MB/s
  Long escape codes                    : 15.22s     @ 51.5    MB/s
  Images                               : 2.92s      @ 182.5   MB/s

st-sx 0.9.3
  Only ASCII chars                     : 11.03s     @ 18.1    MB/s
  Unicode chars                        : 6.22s      @ 29.1    MB/s
  Unique multi-codepoint Unicode cells : 5.13s      @ 34.1    MB/s
  CSI codes with few chars             : 6.44s      @ 15.5    MB/s
  Long escape codes                    : 18.43s     @ 42.5    MB/s
  Images                               : 11.33s     @ 47.1    MB/s

ghostty 1.1.3
  Only ASCII chars                     : 6.82s      @ 29.3    MB/s
  Unicode chars                        : 5.7s       @ 31.7    MB/s
  Unique multi-codepoint Unicode cells : 11.79s     @ 14.8    MB/s
  CSI codes with few chars             : 6.8s       @ 14.7    MB/s
  Long escape codes                    : 49.36s     @ 15.9    MB/s
  Images                               : 29.22s     @ 18.3    MB/s

contour 0.4.3
  Only ASCII chars                     : 26.56s     @ 7.5     MB/s
  Unicode chars                        : 22.96s     @ 7.9     MB/s
  Unique multi-codepoint Unicode cells : 15.04s     @ 11.6    MB/s
  CSI codes with few chars             : 15.58s     @ 6.4     MB/s
  Long escape codes                    : 14.89s     @ 52.6    MB/s
  Images                               : 5.08s      @ 105.1   MB/s

wezterm 20240203-110809-5046fc22
  Only ASCII chars                     : 26.18s     @ 7.6     MB/s
  Unicode chars                        : 14.08s     @ 12.8    MB/s
  Unique multi-codepoint Unicode cells : 6m34.82s   @ 0.4     MB/s
  CSI codes with few chars             : 17.32s     @ 5.8     MB/s
  Long escape codes                    : 10.5s      @ 74.7    MB/s
  Images                               : 5.14s      @ 103.8   MB/s

konsole — завис на «Unique multi-codepoint Unicode cells»;

urxvt — завис на «CSI codes with few chars».

Есть ещё vtebench, но готового пакета нет и мне уже лень качать, и собирать растасофт.

Dr64h ★★★★
()
Ответ на: комментарий от Dr64h

kitten benchmark –render

Это не имеет отношения к тому, о чём я говрю. Я отвечал на это

Продолжаю пользоваться foot. И на низкие цифры в искусственных бенчмарках мне глубоко наплевать, т.к. foot во-первых рисует шрифты в HDR с корректным блендингом (из-за 16-битных цветов на пиксель цифры и просаживаются), во-вторых поддерживает очень полезные хоткеи типа «прыгнуть к началу вывода команды».

Терминалы использовали аппаратное ускорение на MDA, CGA, EGA, VGA в виде встроенного в видеокарту знакогенератора. Затем перешли на софтовый рендеринг глифов и стали медленнее. GPU позволяет рендерить глифы снова быстро.

Это какое-то бредовое объяснение необходимости юзать рендеринг на GPU для терминала и это ещё более бредовое «объяснение» почему новые терминалы тормозят.

P.S.:

RTX 4060M 580.178.04

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia kitty 0.45.0
  Only ASCII chars         : 1.97s      @ 101.4   MB/s
  Unicode chars            : 2.14s      @ 84.7    MB/s
  CSI codes with few chars : 1.93s      @ 51.7    MB/s
  Long escape codes        : 2.89s      @ 271.5   MB/s
  Images                   : 2.64s      @ 202.3   MB/s

urxvt v9.31 - released: 2023-01-02
  Only ASCII chars         : 1.44s      @ 138.4   MB/s
  Unicode chars            : 1.89s      @ 95.5    MB/s
  CSI codes with few chars : 615.81ms   @ 162.4   MB/s
  Long escape codes        : 8.93s      @ 87.8    MB/s
  Images                   : 3.35s      @ 159.4   MB/s

UHD 770 Mesa

kitty
  Only ASCII chars         : 1.41s      @ 142.3   MB/s
  Unicode chars            : 1.61s      @ 112.2   MB/s
  CSI codes with few chars : 2.12s      @ 47.1    MB/s
  Long escape codes        : 2.36s      @ 331.7   MB/s
  Images                   : 1.8s       @ 295.6   MB/s

urxvt выдает разумеется те же числа
  Only ASCII chars         : 1.44s      @ 139.3   MB/s
  Unicode chars            : 1.9s       @ 95.4    MB/s
  CSI codes with few chars : 591.51ms   @ 169.1   MB/s
  Long escape codes        : 8.88s      @ 88.3    MB/s
  Images                   : 3.3s       @ 161.7   MB/s

BruteForce ★★★★★
()
Последнее исправление: BruteForce (всего исправлений: 1)
Ответ на: комментарий от BruteForce

Это какое-то бредовое объяснение необходимости юзать рендеринг на GPU для терминала…

Необходимости нет, но единственный нормальный терминал без gpu-рендеринга сейчас - foot. Но он не умеет в табы, сплиты и всякие фишки типа kitten ssh.

urxvt не умеет в true color и отрисовку изображений. Даже если бы он в 100 раз был быстрее, я бы его не смог использовать. Но и на бенчмарке он просто застрял на столько, что я через 10 минут не стал дожидаться результатов.

edit:

дождался urxvt:

Results:
  Only ASCII chars                     : 13.72s     @ 72.9   MB/s
  Unicode chars                        : 5m6.59s    @ 2.9   MB/s
  Unique multi-codepoint Unicode cells : 10m14.83s  @ 1.4    MB/s
  CSI codes with few chars             : 4.1s       @ 121.0   MB/s
  Long escape codes                    : 53.68s     @ 73.0   MB/s
  Images                               : 20.44s     @ 130.5   MB/s

На Images можно забить, он их всё равно не рендерит.

kitty у меня на основной машине (9070 xt):

Results:
  Only ASCII chars                     : 3.01s      @ 332.1   MB/s
  Unicode chars                        : 3.78s      @ 237.9   MB/s
  Unique multi-codepoint Unicode cells : 23.75s     @ 36.8    MB/s
  CSI codes with few chars             : 3.55s      @ 140.9   MB/s
  Long escape codes                    : 7.74s      @ 506.5   MB/s
  Images                               : 5.16s      @ 517.3   MB/s
altwazar ★★★★★
()
Последнее исправление: altwazar (всего исправлений: 3)
Ответ на: комментарий от altwazar

Сделал еще бенчмарк с true-color-urxvt:

Results:
  Only ASCII chars                     : 14.04s     @ 71.2   MB/s
  Unicode chars                        : 25m27.87s  @ 0.6   MB/s
  Unique multi-codepoint Unicode cells : 19m3.88s   @ 0.8    MB/s
  CSI codes with few chars             : 4.56s      @ 109.7   MB/s
  Long escape codes                    : 54.04s     @ 72.5   MB/s
  Images                               : 24.63s     @ 108.3   MB/s
altwazar ★★★★★
()
Последнее исправление: altwazar (всего исправлений: 1)
Ответ на: комментарий от altwazar

Необходимости нет,

Так другие с тобой не согласны.

BruteForce ★★★★★
()
Ответ на: комментарий от Sylvia

и кто бы мог подумать, что именно под капотом использует этот kwi))

Вообще конечно поразительно, что корпоративные бездари (житбрейнс, кеды, гном конечно же) все эти годы не могли запилить нормальный потоковый парсер VT-последовательностей, каковым по сути и является этот libghostty-vt.

Но как только кто-то мотивированный, в данном случае Хашимото, его сделал, так они тут же налетели и начали юзать его в своих продуктах. Не забывая громко рапортовать об офигительных ускорениях, как будто они имеют к этому какое-то отношение.

При этом целевая аудитория этих корпоратов (а также они сами в частном порядке) продолжит называть Хашимото фофыстом и пытаться отменять.

Lrrr ★★★★★
()
Ответ на: комментарий от Logopeft

Добавил скрин на Github. Почему-то единственный терминал, который думает что кириллица должна быть только болгарской.

Oreolek ★
()
Ответ на: комментарий от Oreolek

Не воспроизводится. Проверь какая у тебя локаль настроена и что настроено в самом Ghostty.

Ja-Ja-Hey-Ho ★★★★★
()
Ответ на: комментарий от Oreolek

Добавил скрин на Github.

А ты убедился, что шрифты реально подтянулись? Типа:

info(font_shared_grid_set): font regular: Inconsolata LGC Nerd Font Mono
info(font_shared_grid_set): font bold: Inconsolata LGC Nerd Font Mono Bold
info(font_shared_grid_set): font italic: Inconsolata LGC Nerd Font Mono Italic
info(font_shared_grid_set): font bold_italic: Inconsolata LGC Nerd Font Mono Bold Italic

У меня с твоим конфигом только font regular подтянулся, поэтому я поправил его.

altwazar ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.