LINUX.ORG.RU

Ghostty 1.4.0

 , , ,


0

4

Команда разработчиков эмулятора терминала 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)
Ответ на: комментарий от maxcom

Tabs in the titlebar (macos-titlebar-style = tabs) lay out correctly again.

ИИ-шечка же переводила.

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

Терминалу нужно GPU-ускорение?

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

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

Знакогенератор есть в любой современной видеокарте, которая умеет в legacy boot (CSM) - передача управления загрузчику осуществляется в текстовом режиме. Почти все современные видеокарты умеют legacy boot, кроме некоторых ориентированных на сервера, у которых нет подходящей секции в BIOS. Но, да обычно этот знакогенератор даже в legacy boot используется полсекунды между BIOS и загрузчиком и рисует мигающий курсор или чёрный экран. Но он есть))

GPFault ★★★★
()
Последнее исправление: GPFault (всего исправлений: 1)

Эх, надо будет сходить в Ghostty🤔

UriZzz ★★
()

Кроссплатформенный, говорите? Но ведь только MacOS и Linux. Где Windows? Без нее это условная кроссплатформенность.

perepiska
()
Ответ на: комментарий от Yampp

У меня почему-то не воспроизводится это «быстро».

Замеряю

time ( dd if=/dev/zero bs=4096 count=$((32*1024)) of=/dev/stdout | tr '\0' 'z' )

Говно мамонта (старая гвардия):

urxvt: 1.01s (!!!)
xterm: 2.92s
st (st.suckless.org): 1.73s

Новые и блестящие:

alacritty: 2.38s
kitty: 4.67s
ghostty: 9.82s (!!!)

Ghostty ещё и выглядит как говно с этой gtk4-панелью/рамкой сверху.

Может, я не то замеряю и есть какой-то годный бенчмарк. Если так, то ткните.

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

В разных терминалах разные значения. Как можно вообще доверять таким результатам? Надеюсь вы зарепортали баг авторам утилиты time.

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

И как часто нпдо рендерить глифы для терминала?..

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

Да отличная шутка, меня прям порвало, когда дошло. Кстати, команда date тоже работает так, что хрен воспроизведешь…

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

У меня:

kitty: 0m0,370s
foot: 0m0,711s
konsole: 0m2,692s
urxvt: 0m0,964s
ghostty: 0m1,439s

В konsole результаты сильно колебались, до 5+ секунд доходило.

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

Ну, urxvt убогий и с ним сравнивать смысла мало. А вот foot на cpu отрендерил эту задачу быстро. Правда она удобная для него (построчный вывод, вместо обновления экрана разом).

Ghostty не особо шустрый терминал, но тот же kitty у меня на всех машинах быстрее foot/urxvt, даже где видюшка встройка. А wezterm с рендерингом на gpu порой тормознее konsole.

CPU рендеринг сильнее отстаёт на задачах типа использования файловых менеджеров типа yazi, когда обновляется целиком часть экрана. Там начинают чувствоваться завтыки при движении по файлам, а konsole вообще просто заедает местами.

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

time ( dd if=/dev/zero bs=4096 count=$((32*1024)) of=/dev/stdout | tr ‘\0’ ‘z’ )

запустил ровно ту же самую команду:

foot:

32768+0 records in
32768+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 2.97166 s, 45.2 MB/s

kitty:

32768+0 records in
32768+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 1.58016 s, 84.9 MB/s

alacritty:

32768+0 records in
32768+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 1.25426 s, 107 MB/s

ghostty:

32768+0 records in
32768+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 0.338916 s, 396 MB/s

иксовые эмуляторы не запускал, т.к. sway у меня скомпилен без поддержки xwayland (все это время не замечал, лол).

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

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 1)
Ответ на: комментарий от shdown
$ time ( dd if=/dev/zero bs=4096 count=$((32*1024)) of=/dev/stdout | tr ‘\0’ ‘z’ )
bash: синтаксическая ошибка рядом с неожиданным маркером «dd»
ogion ★★★
()
Ответ на: комментарий от ogion

bash: синтаксическая ошибка рядом с неожиданным маркером «dd»

А у вас точно bash?

У меня в fish это не запускается, но тут понятно, заморочки fish.

Кстати, вот результат в bash - alacritty:

32768+0 records in
32768+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 2,17075 s, 61,8 MB/s
thera_pi
()
Последнее исправление: thera_pi (всего исправлений: 1)
Ответ на: комментарий от shdown
# Ghostty 1.3.1-4.fc44
real    0m2,358s
user    0m0,090s
sys     0m0,588s

# rxvt-unicode
real	0m1,826s
user	0m0,071s
sys	0m0,681s

Ghostty не самый свежий, новая версия пока не прилетела. Но разница небольшая, учитывая, что rxvt-unicode нихрена не умеет и выглядит как привет из «640Kb хватит всем». Откуда у тебя такой разрыв – непонятно.

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

Ghostty

Терминалу нужно GPU-ускорение?

В новости ничего не сказано про анимированный курсор. А я себе сделал. В общем и целом быстрые терминалы очень приятные. Но там прицел все же на многотонный вывод от агентов. И новые фичи для мультиплексирования спектаторам.

На клавиатуре выставил срабатывание в верхней точке. Выхлоп hg status появляется быстрее, чем клавиша Enter до дна дойдет.

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

ну и zig >= 0.17.0, спасибо блин большое

Мне пришлось даже ебилд самому набросать, ни в одном оверлее не было. Ну как набросать, взял готовый zig-bin и поменял версию в конце.

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

Как-то ты его не так настраиваешь или собираешь.

У меня:

сабж

real    0m0,505s
user    0m0,061s
sys     0m0,419s

xterm

real    0m4,052s
user    0m0,070s
sys     0m0,425s

foot(всегда считался очень быстрым)

real	0m0,864s
user	0m0,053s
sys	0m0,436s

А, да, не весь вывод показал, для сабжа

134217728 bytes (134 MB, 128 MiB) copied, 0,382891 s, 351 MB/s

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

А как у тебя собран? Я собираю git-версию(недельной давности сейчас) как

zig-bin-0.17.0 build -Doptimize=ReleaseFast

У меня даже быстрее foot вышло. Настройки, не помню чтобы особо что-то настраивал именно для быстродействия.

Не может ли быть что сабж медленнее у тех, у кого иксы? И быстрее на вяленом. У меня вяленный и у меня он очень быстр.

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

У тебя иксы или вяленный? У меня есть подозрение что тут могла муха порыться в разнице между результатами.

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

У меня Hyprland и невидия.

Может отпишется кто из тех у кого противоположные результаты. Возможно оно под иксами тормозит.

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

time ( dd if=/dev/zero bs=4096 count=$((32*1024)) of=/dev/stdout | tr '\0' 'z' )

foot 1.27.0: 1,213
kitty 0.49.1: 1,294
alacritty 0.17.0: 2,808
rxvt-unicode 9.31: 2,937
ghostty 1.3.1: 3,748
st 0.9.3: 6,014
xterm 410: 8,273

Сабж виснет на пару секунд при выделении мышью и ^D, а xterm почему-то ничего не выводит, пока команда не отработает целиком.

kneedeep ★
()
Последнее исправление: kneedeep (всего исправлений: 1)

кроссплатформенный эмулятор терминала … аппаратное ускорение графики

Фтопку

анимированные изображения

Это ещё консоль или уже браузер?

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

А как у тебя собран?

1.3.1 из ебилда.

У меня даже быстрее foot вышло.

Попробовал на ноутбуке:

ghostty (1.3.1 из ебилда): 2,293
foot: 0,847
kitty: 0,521
ghostty 1.4.0 (zig-bin-0.17.0 build -Doptimize=ReleaseFast): 0,416
altwazar ★★★★★
()
Последнее исправление: altwazar (всего исправлений: 1)
Ответ на: комментарий от altwazar

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

Loki13 ★★★★★
()

Баг один есть в реализации kitty протокола. Но я даже не знаю с какой стороны багрепорт писать начать. Суть в том, что надо настроить превью картинок через uberzugpp в vifm, запустить это всё в ghostty, выбрать каталог с картьинками вперемешку с текстовыми файлами, и начать быстро перемещаться. Если превью не успевает прогрузится и перейти на текстовый файл, то выводит мусор в окно панели.

Почему я считаю что это баг в ghostty? потому что kitty работает нормально и никакого мусора не появляется.

Вот как этот баг вообще сформулировать, чтобы зарепортить? Я по-русски неформально еле-еле сформулировал и то наверное не все поймут.

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

bash: синтаксическая ошибка рядом с неожиданным маркером «dd»

У тебя time вместо встроенного в баш (как обычно) используется внешний (видел такое в альт линуксе):

time -p bash -c 'dd if=/dev/zero bs=4096 count=$((32*1024)) | tr "\0" z'
altwazar ★★★★★
()
Последнее исправление: altwazar (всего исправлений: 1)
Ответ на: комментарий от Loki13

Ну вот кстати может быть медленнее у тех, кто старую версию использует.

Весьма вероятно, так как до 1.4.0 релизов других и не было.

Вообще, проблем в 1.4.0 гораздо меньше. Пользовался бы даже, но работа со сплитами в kitty больше нравится.

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

Вот как этот баг вообще сформулировать, чтобы зарепортить? Я по-русски неформально еле-еле сформулировал и то наверное не все поймут.

последовательность шагов для воспроизведения

ожидаемый результат (так как в kitty)

полученный результат (можно скрины приложить)

если он что-то пишет в логи - приложи еще логи.

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

Там для предпросмотра через uberzugpp надо самописные(относительно самописные, взятые в issue на гитхабе vifm) скрипты в vifm использовать, их нет в поставке или в каком либо пакете. Прямо совсем не простой путь для повторения и подозреваю, что заморачиваться не будут разрабы. Так-то я понимаю в чем там баг, предпросмотр(декодер картинки) запускается параллельно, а при переходе на следующий элемент, видимо в протоколе kitty есть какой-то «токен» для отмены предыдущего, и они его не обрабатывают и вываливают мусор пришедший чуть позже смены элемента. Но это я только из логики поведения, а не из кода говорю.

Я бы подумал, что это вообще баг в vifm, но ведь в kitty всё работает нормально.

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

Там для предпросмотра через uberzugpp надо самописные(относительно самописные, взятые в issue на гитхабе vifm) скрипты в vifm использовать, их нет в поставке или в каком либо пакете. Прямо совсем не простой путь для повторения и подозреваю, что заморачиваться не будут разрабы

приложи просто ссылку на этот тикет в гитхабе vifm. То что не будут заморачиваться - можно не париться. Они же не руками это будут воспроизводить, а попросят нейронку. Главное поискать, нет ли там тикетов на ту же тему, чтобы дубликаты не плодить.

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

time -p bash -c ‘dd if=/dev/zero bs=4096 count=$((32*1024)) | tr «\0» z’

Вот в таком виде отработало. Выдало кучу z, а в конце:

real 5.10
user 0.11
sys 0.67

Это на konsole.

На xterm выдало:

real 2.98
user 0.10
sys 0.65
ogion ★★★
()

Одна интересная особенность у терминалов, как они реагируют на ресайз окна сплита со строкой ввода:

konsole просто массово размножает символы и превращает содержимое в мусор

ghostty аналогично, но чуть поменьше

foot так же как в ghostty

в kitty ресайз работает нормально

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

Терминалу нужно GPU-ускорение?

Чтоб лагать при отрисовке крутых 8K шрифтов с HDR-raytracing-TrueColor-FSR эффектами и майнерами

HPW-dev ★
()
Ответ на: комментарий от shdown
contour:
    32768+0 записей получено
    32768+0 записей отправлено
    134217728 байтов (134 MB, 128 MiB) скопировано, 17,9451 s, 7,5 MB/s
    real 0m17,958s user 0m0,166s sys 0m0,925s

konsole:
    32768+0 записей получено
    32768+0 записей отправлено
    134217728 байтов (134 MB, 128 MiB) скопировано, 8,19161 s, 16,4 MB/s
    real 0m8,200s user 0m0,163s sys 0m0,843s

st (st-sx):
    32768+0 записей получено
    32768+0 записей отправлено
    134217728 байтов (134 MB, 128 MiB) скопировано, 5,31975 s, 25,2 MB/s
    real 0m5,326s user 0m0,149s sys 0m0,809s

ghostty:
    32768+0 записей получено
    32768+0 записей отправлено
    134217728 байтов (134 MB, 128 MiB) скопировано, 4,09131 s, 32,8 MB/s
    real 0m4,097s user 0m0,148s sys 0m0,811s

alacritty:
    32768+0 записей получено
    32768+0 записей отправлено
    134217728 байтов (134 MB, 128 MiB) скопировано, 3,22833 s, 41,6 MB/s
    real 0m3,234s user 0m0,168s sys 0m0,810s

kitty:
    32768+0 записей получено
    32768+0 записей отправлено
    134217728 байтов (134 MB, 128 MiB) скопировано, 2,30827 s, 58,1 MB/s
    real 0m2,313s user 0m0,159s sys 0m0,805s

foot:
    32768+0 записей получено
    32768+0 записей отправлено
    134217728 байтов (134 MB, 128 MiB) скопировано, 1,74138 s, 77,1 MB/s
    real 0m1,746s user 0m0,163s sys 0m0,802s

nu~> ps | where name =~ '^alacritty$|^contour$|^foot$|^ghostty$|^kitty$|^konsole$|^st$'
        | sort-by -r mem | select name mem virtual
╭───┬───────────┬──────────┬─────────╮
│ # │   name    │   mem    │ virtual │
├───┼───────────┼──────────┼─────────┤
│ 0 │ ghostty   │ 239,6 MB │  3,6 GB │
│ 1 │ contour   │ 221,6 MB │  2,4 GB │
│ 2 │ kitty     │ 162,9 MB │  1,2 GB │
│ 3 │ alacritty │ 110,9 MB │  1,2 GB │
│ 4 │ konsole   │ 104,0 MB │  1,0 GB │
│ 5 │ foot      │  30,1 MB │  2,6 GB │
│ 6 │ st        │  26,2 MB │ 36,2 MB │
╰───┴───────────┴──────────┴─────────╯
Dr64h ★★★★
()
Последнее исправление: Dr64h (всего исправлений: 1)
Ответ на: комментарий от Dr64h

Проверял в КДЕ вяленде, на практике самый жрущий у меня был Contour.

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

Вот ещё WezTerm до кучи:

32768+0 записей получено
32768+0 записей отправлено
134217728 байтов (134 MB, 128 MiB) скопировано, 5,10579 s, 26,3 MB/s
real 0m5,110s user 0m0,178s sys 0m0,589s
╭───┬─────────────┬──────────┬─────────╮
│ # │    name     │   mem    │ virtual │
├───┼─────────────┼──────────┼─────────┤
│ 0 │ wezterm-gui │ 145,5 MB │  1,8 GB │
╰───┴─────────────┴──────────┴─────────╯

Dr64h ★★★★
()

Мне скорость терминала НЕ_ВАЖНА.

Использую Yakuake

Set440 ★★★
()

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

У меня он выглядит вот так: https://cdn.myimgs.org/images/70728/urxvt_mc_xoria256.png (он поддерживает 256 цветов, что и демонстрируется; в дебиане он по умолчанию с ними собран).

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

Скорее всего что-то стоит из snap/flatpack а urxvt/xterm/st из реп. А snap/flatpack они из-за песочницы не могут gpu пробросить, потому куда медленнее.

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

Нет, снапа и флатпака у меня вообще нет. Просто видеокарта от Intel.

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

Если есть простаивающее железо, то почему бы не использовать?

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