Sete meses após o ciclo da versão 1.3, a equipe do Ghostty — o emulador de terminal acelerado por GPU idealizado por Mitchell Hashimoto (cofundador da HashiCorp) e mantido como projeto sem fins lucrativos — publicou oficialmente o Ghostty 1.4.0. O lançamento consolida 2.889 commits de 172 contribuidores e traz uma das maiores reengenharias internas da história do projeto, conforme destacado também pela cobertura do It's FOSS.

Entre os marcos técnicos estão a compressão transparente de scrollback em segundo plano (que derruba o uso de memória física entre 70% e 90%), um parser VT até 5,7 vezes mais rápido, a primeira implementação 100% completa do protocolo gráfico do Kitty fora do próprio Kitty e uma nova pipeline de renderização OpenGL sobre EGL + DMABUF no Linux. Em contrapartida, a exigência de GTK 4.18 e libadwaita 1.7 encerra o suporte a compilações nativas no Ubuntu 24.04 LTS.


Novo renderizador OpenGL com EGL e DMABUF no Linux: fim das fontes borradas em escala fracionária

Para usuários de Linux e FreeBSD, a mudança arquitetural mais visível do Ghostty 1.4 está na camada gráfica GTK. O aplicativo abandonou o widget GtkGLArea tradicional em favor de uma pipeline dedicada:

  1. O renderizador agora desenha via EGL em sua própria thread separada, sem executar nenhuma chamada OpenGL na main thread da interface;
  2. Cada quadro renderizado é exportado diretamente como um DMABUF na GPU e entregue ao GTK para composição com triple-buffering, eliminando screen tearing sob rolagem pesada (com fallback automático via CPU em drivers antigos que não exportam DMABUFs);
  3. O Ghostty passa a renderizar na escala fracionária real da janela, garantindo mapeamento 1:1 entre pixels renderizados e pixels físicos.
No Ghostty 1.4 para Linux (GTK), painéis divididos (splits) agora contam com alças de arrastar e soltar entre abas e janelas, preservando processos ativos e diretório de trabalho.

Na prática, isso resolve de vez a regressão histórica (#1938) em que textos e caracteres de desenho de caixa (box-drawing) ficavam borrados ao usar escalas fracionárias como 125% ou 150% no Wayland.

Além do novo renderizador, o aplicativo GTK recebeu recursos aguardados há meses:

  • Arrastar e soltar para Splits (Split Drag and Drop): Agora é possível clicar na alça superior de qualquer painel dividido e soltá-lo sobre outro painel — inclusive em outra aba ou janela — movendo instantaneamente o buffer, o diretório atual e os processos em execução (controlado pela opção drag-handle = auto | always | never).
  • Atalhos globais nativos no Wayland: Integração com o protocolo vicinae-hotkey-v1 em compositores como Hyprland 0.56+ e via XDG Desktop Portal nos demais, acompanhada da nova ação de CLI ghostty +toggle-quick-terminal para gerenciadores de janelas sem suporte a atalhos globais.
  • Background Blur no Niri: Suporte oficial a desfoque de fundo no compositor scrollable-tiling Niri.

Compressão de Scrollback em tempo ocioso e queda drástica no uso de RAM e VRAM

Terminais abertos por dias com logs extensos de compilação ou sessões de agentes costumam acumular centenas de megabytes de memória residente (RSS). No Ghostty 1.4, páginas de scrollback que não estão visíveis na tela passam a ser comprimidas de forma transparente enquanto o terminal está ocioso, sendo descomprimidas sob demanda quando o usuário rola a página ou faz uma busca.

A compressão transparente reduz o uso de memória física das páginas de histórico em 70% a 90%, permitindo quintuplicar o limite padrão de scrollback de 10 MB para 50 MB.

Os ganhos medidos pela equipe incluem:

  • 70% a 90% menos memória física (RSS) ocupada por páginas de histórico de texto;
  • Limite padrão quintuplicado: Graças à compressão em 64-bit Linux e macOS, o limite padrão de scrollback-limit subiu de 10 MB para 50 MB por terminal — e um buffer cheio de 50 MB hoje consome menos RAM física do que 10 MB consumiam no Ghostty 1.3;
  • Devolução imediata ao sistema operacional: Memória liberada ao limpar ou truncar o histórico agora é devolvida imediatamente ao kernel em vez de ficar retida até o fechamento da janela;
  • Liberação de VRAM em abas ocultas: Abas em segundo plano liberam seus recursos de GPU e param de renderizar. Em um teste com 1 aba visível e 20 abas ocultas, o consumo de memória de vídeo caiu de 385 MiB para 18 MiB, levando menos de 1 milissegundo para reconstruir a superfície ao alternar de aba.

Throughput 5,7x maior no parser VT e leitura desacoplada de PTY

Na frente de desempenho bruto, a equipe identificou um gargalo curioso no kernel do macOS que beneficiou toda a arquitetura multi-thread do Ghostty: o kernel limita cada leitura (read()) de um descritor pty a cerca de 1 KiB, independentemente do tamanho do buffer alocado. Nas versões anteriores, o Ghostty processava cada leitura assim que ela chegava, bloqueando o programa emissor a cada kilobyte.

No Ghostty 1.4, uma thread drena o pty continuamente enquanto outra thread realiza o parsing VT em paralelo, elevando o throughput de I/O de ponta a ponta entre 25% e 55%.

Com parsing SIMD e separação entre drenagem de PTY e parser VT, a velocidade de processamento de texto ASCII saltou de 128 MB/s para 725 MB/s.

Combinado a otimizações pesadas de SIMD no parser de sequências de escape:

Operação / BenchmarkGhostty 1.3.xGhostty 1.4.0Ganho
Parser VT (texto ASCII puro)128 MB/s725 MB/s5,7x mais rápido
Parser VT (texto CJK / Unicode)Base3,4x+240%
cat de arquivo de texto de 150 MB1,50 s566 ms2,65x mais rápido
Redimensionamento de janela (10k linhas)Base6x mais rápidoContenção de lock 2,7x a 11x menor
Parsing de imagens Kitty Graphics (64 MiB)Base (byte a byte)Parsing em lote SIMD16x mais rápido
Payloads de área de transferência OSC 52Base30x mais rápido—

100% do protocolo gráfico do Kitty, OSC 5522 e wrapper ghostty +ssh

O Ghostty 1.4 (e a biblioteca em C libghostty-vt, já adotada por diversos outros emuladores de terminal) tornou-se o primeiro terminal fora do próprio Kitty a implementar 100% da especificação publicada do Kitty Graphics Protocol:

  • Animações completas e posicionamento relativo: Ferramentas como kitten icat agora exibem GIFs animados nativamente (pausando automaticamente quando a aba está oculta) e permitem ancorar imagens filhas à posição de imagens mães;
  • Kitty Clipboard Protocol (OSC 5522): Enquanto o clássico OSC 52 suporta apenas texto puro, o protocolo OSC 5522 permite que aplicações rodando dentro do terminal leiam e escrevam múltiplos formatos MIME na área de transferência — como imagens PNG ou HTML — com diálogo de confirmação visual mostrando prévia da imagem e limite configurável (clipboard-write-limit-bytes, padrão de 64 MiB);
  • Wrapper ghostty +ssh: Substitui a lógica duplicada nos scripts de shell por um comando nativo que injeta automaticamente o terminfo (xterm-ghostty) no servidor remoto, encaminha variáveis COLORTERM e TERM_PROGRAM sem sobrescrever diretivas SetEnv do ~/.ssh/config, faz fallback limpo para xterm-256color caso tic não exista no host e mantém cache separado por endereço e porta (ghostty +ssh-cache --prune=30d).

Por que o Ubuntu 24.04 LTS perdeu suporte nativo (e como contornar)

Seguindo a política oficial de dependências do projeto para Linux, o Ghostty 1.4 elevou os requisitos mínimos de compilação e execução nativa do GTK:

  • Antes (Ghostty 1.3): GTK 4.14 e libadwaita 1.5;
  • Agora (Ghostty 1.4): GTK 4.18 e libadwaita 1.7 (além de OpenGL 4.3 com suporte a EGL).
Como o Ubuntu 24.04 LTS fornece bibliotecas mais antigas da pilha GNOME 46, binários nativos do Ghostty 1.4 exigem distribuições mais recentes ou empacotamento via Flatpak.

Como o Ubuntu 24.04 LTS (Noble Numbat) foi congelado com bibliotecas da geração GNOME 46 (GTK 4.14 / libadwaita 1.5), binários nativos .deb do Ghostty 1.4 encerram a execução na inicialização ao detectar bibliotecas antigas. Usuários do Ubuntu 24.04 têm três caminhos recomendados pelos mantenedores:

  1. Utilizar o pacote Flatpak (que embute o runtime GNOME atualizado com GTK 4.18+ e libadwaita 1.7+);
  2. Permanecer na série Ghostty 1.3.x caso dependam estritamente de pacotes nativos do sistema;
  3. Migrar para o Ubuntu 26.04 LTS ou distribuições rolling/semi-rolling (Fedora 42+, Arch Linux, openSUSE Tumbleweed).

A atualização também corrige 10 avisos de segurança (GHSAs) auditados pela equipe, incluindo higienização de quebras de linha \r na proteção de colagem (GHSA-4hwh-wx3w-3fqg), limites contra leitura/exclusão arbitrária de arquivos em comandos maliciosos do protocolo gráfico Kitty (GHSA-mhff-mv4q-fp63) e proteção contra injeção de sequências de escape no prompt ao entrar (cd) em diretórios com nomes forjados (GHSA-2r63-vmw6-3m3c).