← На главную

Shitty: форк Zutty на Apple-silicon обгоняет alacritty, kitty, ghostty

02.08.2026 23:05 · hackernews

Терминал Shitty — это жёсткий форк и фактически полная переработка Zutty от Тома Силади. Он заточен под низкую задержку, быстрый старт и предсказуемое потребление ресурсов. Состояние терминала хранится на CPU, а отрисовка ячеек идёт через Vulkan на Linux и Metal на macOS. Судя по бенчмаркам из статьи, на Apple-silicon MacBook при прогоне 100MB через GUI Shitty обходит конкурентов: printable ASCII даёт ~118 MiB/s против ~99 у alacritty 0.17.0, ~75 у kitty 0.48.2 и ~64 у ghostty 1.3.1. На случайных байтах (худший случай для парсера, невалидный UTF-8) Shitty выдаёт ~51 MiB/s, alacritty — ~31, ghostty — ~21, а kitty вообще выходит из игры: реагирует на мусор в escape-последовательностях звонками и сменой заголовков.

Корректность проверяется более чем 5000 тестами, собранными из дюжины наборов — kitty, esctest, xterm vttests, vttest, tack, libvterm, libtsm, alacritty, ghostty, contour, konsole, mosh. Всё гоняется black-box через настоящий PTY. Ресайз рендерится в той же транзакции, что и изменение границ, обновления идут по повреждённым областям. Парсер тотальный и зафазжен: cat /dev/urandom тут называется бенчмарком, а не отчётом о падении. Юникод сделан через графемные кластеры, а не кодовые точки: эмодзи-последовательности, вариационные селекторы, комбинируемые метки, широкий CJK.

Shitty — один маленький бинарник без тулкита и со встроенными шрифтами. Он запускается даже на машине без установленных шрифтов. По умолчанию приложения не могут читать выделение из терминала или управлять окном хоста, если явно не разрешено. Поддержаны протоколы от VT52 до VT5xx, популярные xterm-расширения, 16/256/24-битный цвет с цветом подчёркивания, клавиатурные протоколы Legacy, modifyOtherKeys и Kitty, мышиные протоколы X10, VT200, UTF-8, SGR, SGR-pixel, urxvt, OSC 52 и OSC 8. Есть shell-интеграция, уведомления, репорты прогресса и in-band resize.

Код написан на C++23, сборка через Clang. На macOS системный clang не знает -std=c++26, который нужен встроенной libstd, поэтому ставьте LLVM из Homebrew. Зависимости: Python 3, Ragel 6, glslangValidator, utf8proc 2.9+; на Linux ещё FreeType, HarfBuzz, Wayland, xkbcommon, Vulkan; на macOS — SPIRV-Cross и системные CoreText, Cocoa, Metal, IOSurface. Установка проще всего через Homebrew tap pg83/tap/shitty или Nix flake. Сам исполняемый файл называется st, а десктоп-приложение и иконка — shitty.

Тестовый native suite гоняет отдельный headless-бинарник st_test через raw PTY; в продакшен-сборке этого входа нет. Пока не реализованы bidi и шесть (sixel), часть исторических DEC-расширений сознательно вне профиля. Лицензионная история такая: исходный Zutty создал Tom Szilagyi, Shitty ведёт от него родословную. Проект переезжает с GPL на MIT: импортированный ранее код остаётся под GPLv3-or-later, новые коммиты даются под двойной лицензией GPLv3-or-later и MIT. Пока в дереве лежит GPL-only материал, вся дистрибуция подчинена GPL.

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