3 pontos por GN⁺ 2025-09-24 | 3 comentários | Compartilhar no WhatsApp
  • libghostty está sendo desenvolvido como uma biblioteca de emulador de terminal embutido que pode ser usada em qualquer aplicação
  • Seu primeiro componente, libghostty-vt, é uma API sem dependências, otimizada para parsing e manutenção de estado
  • Surgiu para resolver a complexidade da emulação de terminal e o problema de implementações repetidas, buscando suporte multiplataforma e alta portabilidade
  • No futuro, há planos de expandir com bibliotecas adicionais para processamento de entrada de teclado, renderização via GPU e integração com diversos frameworks
  • Atualmente, a API Zig já pode ser testada, e a API C também será lançada em breve; o projeto está ouvindo ativamente o feedback dos usuários

Introdução e contexto do desenvolvimento do libghostty

  • libghostty é um projeto de biblioteca projetado para permitir que qualquer aplicação incorpore recursos de emulador de terminal modernos, rápidos e completos
  • Hoje, inúmeros programas acabam implementando seus próprios emuladores de terminal à sua maneira, ou criam apenas funcionalidades de terminal muito limitadas em separado
  • Essas implementações de emulação de terminal desenvolvidas individualmente costumam ser codebases ad-hoc e de uso único, que não lidam bem com casos de borda e complexidade, sofrendo com frequência de incompletude, bugs e queda de desempenho
  • Para a maioria dos desenvolvedores, implementar emulação de terminal não é parte do negócio principal, então existe demanda por uma solução comum e altamente reutilizável
  • libghostty oferece uma API C multiplataforma projetada com dependências mínimas, permitindo que diferentes aplicações usem recursos de emulação de terminal estáveis e rápidos

libghostty-vt: o início da primeira biblioteca

  • libghostty-vt é uma biblioteca totalmente sem dependências (nem libc é necessária) que fornece uma API para parsing de sequências de terminal e manutenção de estado do terminal, como posição do cursor, estilo e quebra de linha
  • Esse parsing de sequências de terminal não é apenas um recurso central de um emulador de terminal, mas também algo indispensável para sites que precisam exibir saída com estilo simples, como GitHub Actions e logs de build da Vercel
  • O parsing do protocolo de terminal parece simples na superfície, mas sua implementação é extremamente difícil; na prática, há casos em que várias implementações, como o Jediterm, apresentam problemas ao lidar com certas sequências
  • Alguns desenvolvedores ficam apenas em um parsing simplificado de sequências ANSI, mas a necessidade de lidar com estilos complexos, como diferentes notações RGB, e de garantir compatibilidade completa exige um parser sofisticado
  • libghostty-vt foi extraído do núcleo já validado do Ghostty e traz parsing otimizado com SIMD, excelente suporte a Unicode, estruturas de memória avançadas e ampla compatibilidade de protocolo (Kitty Graphics, Tmux Control Mode etc.)
  • É fornecido como uma API C de dependência zero em arquivo único, podendo ser facilmente embutido em qualquer linguagem ou ambiente de uso geral; o suporte inicial prioriza macOS e Linux (x86_64, aarch64), com planos de expansão gradual para Windows, sistemas embarcados, WASM e outros
  • Isso permite alcançar um suporte de plataformas mais amplo do que o próprio Ghostty GUI

libghostty em expansão no longo prazo

  • Depois do libghostty-vt, está prevista uma sequência de bibliotecas adicionais para processamento de entrada (como codificação de teclado), renderização via GPU (OpenGL, Metal), widgets GTK e frameworks Swift
  • Essas expansões funcionais serão organizadas por módulos, minimizando dependências, tamanho de código e complexidade de manutenção

Estado atual do desenvolvimento do libghostty-vt

  • Um PR (pull request) que expõe libghostty-vt externamente como módulo Zig foi mesclado recentemente, então desenvolvedores Zig já podem usá-lo imediatamente
  • A API C ainda está em definição e deve ser disponibilizada em breve para testes (a lógica central já é uma base validada, usada há anos no Ghostty)
  • O app Ghostty para macOS também usa uma API C interna, mas como os headers internos atuais não são adequados para publicação externa nem uso geral, uma API C totalmente nova está sendo projetada
  • libghostty terá versionamento separado da aplicação Ghostty e, no momento, está em fase alfa, esperando adoção rápida e participação de desenvolvedores de bindings para linguagens
  • A meta é lançar a primeira versão com tag dentro de 6 meses

Pedido de feedback dos usuários

  • Como o projeto está atualmente na fase de design da API, este é um momento em que opiniões e feedback de usuários reais são especialmente importantes
  • Além do Ghostty, membros de várias comunidades já estão desenvolvendo projetos baseados em libghostty, e a expectativa é que mais usuários participem
  • Se houver ideias de uso do projeto ou requisitos específicos, é possível falar diretamente com os desenvolvedores pelo Discord do Ghostty ou por e-mail
  • libghostty está atualmente em versão alfa, então a API ainda não é estável, mas a lógica central garante alta estabilidade já comprovada em uso real

Perspectivas e impacto futuro

  • Com a estabilidade alcançada pela aplicação Ghostty, agora foi possível avançar em direção a um objetivo maior chamado libghostty
  • Se o libghostty passar a ser amplamente usado em diversas aplicações, ele poderá gerar um impacto e uma influência de ecossistema muito maiores do que o Ghostty como app isolado
  • À medida que o uso do libghostty crescer, o próprio Ghostty também poderá ganhar recursos mais ricos e maior estabilidade
  • Ghostty e libghostty devem evoluir de forma complementar, trazendo benefícios tanto para desenvolvedores quanto para usuários

3 comentários

 
yshrust 2025-09-24

Estou usando desde a 1.0 e, tirando a falta de rolagem e busca, estou satisfeito haha. Eu usava o iTerm, mas acabei ficando com ele.

 
GN⁺ 2025-09-24
Opiniões do Hacker News
  • É realmente lendário ver alguém passar por fundar uma empresa, abrir capital e vendê-la por bilhões, e ainda assim voltar para o mundo da programação

    • O Hashimoto vai além de ser um gênio; o que mais impressiona é sua capacidade extraordinária de abstração, modularizando sistemas e interfaces ao extremo e minimizando o acoplamento. Parece alguém que coloca em prática exatamente a filosofia de Simple Made Easy defendida por Rich Hickey. O software dele dá a sensação de ter sido projetado com uma estrutura em que só pode funcionar corretamente. E usei o Ghostty pela primeira vez: no iTerm2 com tema Zsh/Powerlevel10k sempre havia um pequeno atraso de renderização, mas no ghostty a resposta é quase imediata

    • Dá até inveja, e ao mesmo tempo parece uma vida de sonho. Ter conquistado riqueza e depois continuar criando apenas pelo projeto em si, sem precisar ceder na qualidade por dinheiro. Isso me lembra uma velha citação do Knuth

      Permitir que milhares de cientistas da computação façam livremente o que querem é o que impulsiona o avanço da área

      De fato, projetos feitos com amor estão alcançando cada vez mais sucesso. Isso mostra que, quando não se fica obcecado por dinheiro, é possível produzir resultados melhores. Ao mesmo tempo, isso faz pensar sobre a estrutura da nossa sociedade e a economia em geral, porque para viver assim é preciso algum nível de capital prévio. Como disse Knuth, se todos tivéssemos um pouco mais de tempo, poderíamos produzir resultados melhores; mas quando tudo é feito na correria, muita coisa acaba sendo sacrificada. E, como em outra frase dele,

      Se você tentar otimizar tudo, nunca será feliz

      Nesse ponto surge a pergunta: estamos realmente recompensando de forma justa as pessoas que resolvem problemas e tornam a vida mais fácil, ou só estamos aumentando pontuações sem sentido em algum jogo? Como se cria mais lendas? Como construir uma sociedade em que se possa viver seguindo a própria paixão, como o Mitchell, sem ter de explicar para um conselho o valor da qualidade?

    • Já o vi pessoalmente, e ele era realmente um sujeito caloroso e gente boa. Almocei com ele numa conferência quando ele ainda estava na Kiip, antes de fundar a Hashicorp, e o Mitchell era um hacker de verdade. Dava para sentir que ele amava sinceramente tudo relacionado à computação. Em especial, ele ficava profundamente envolvido em conferências sobre sistemas distribuídos. Eu tinha certeza de que ele teria sucesso em qualquer coisa que fizesse. Desde que descobri e comecei a usar o Ghostty, sigo usando satisfeito

    • E esse cara ainda está totalmente mergulhado no desenvolvimento de software tty, uma das áreas mais de nicho e cheias de devoção de toda a stack Unix

    • Eu usava ghostty todos os dias e só agora descobri que quem fez foi o Mitchell Hashimoto. Que experiência incrível

  • O Ghostty é realmente muito legal; fico animado com a possibilidade de um terminal emulator verdadeiramente omni-platform se expandir até para mobile. Também é curioso que o Ghostty seja feito em Zig. É o primeiro programa baseado em Zig que uso no dia a dia, e achei divertido que a estrutura do repositório seja igual à do Golang https://github.com/ghostty-org/ghostty

    • (Não parece um layout de Go) Na verdade isso é uma coisa boa; a estrutura de diretórios do Go com pkg/ src/ etc. não é lá grande coisa
  • Quero muito gostar do Ghostty, mas há alguns pontos decepcionantes

    • ainda não há suporte a ⌘F para busca
    • não existe uma forma de selecionar/copiar saída anterior ou uma string específica usando apenas o teclado
    • ⌘. não envia CTRL-C (algo que usuários de Mac esperam)
    • a renderização de fontes ainda não é tão suave quanto no Terminal.app; já tentei ajustar com font-thicken-strength, mas não fica 100% igual. Parece impossível ou muito difícil por causa das características de renderização do Metal. Para quem passa o dia inteiro olhando texto, isso é bem importante
    • É possível configurar para que ⌘. envie CTRL-C
      keybind = "cmd+.=text:\x03"
      
      Discussão relacionada: https://news.ycombinator.com/item?id=42889411
    • Deve ser suportado em breve: https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • A busca no scrollback deve entrar na versão 1.3, mas provavelmente ainda vai levar uns 6 meses. Como o Ghostty também está evoluindo rápido ultimamente, vale a pena dar uma olhada nas notas de lançamento da 1.2
    • Vendo a oscilação dos pontos, acho que o que escrevi gerou mal-entendido. Na verdade, acho incrível a ideia de implementar GUI nativa por fornecedor em uma solução cross-platform. Fico muito feliz que esse projeto exista, só que pessoalmente ainda não o considero perfeito. Mesmo assim, sigo acompanhando com expectativa
    • Esse segundo ponto (selecionar saída anterior pelo teclado) é o principal motivo de eu continuar usando o WezTerm
  • A paixão e o nível de detalhe que o Mitchell dedica à experiência do desenvolvedor são realmente impressionantes. Ainda lembro nitidamente do impacto que tive ao usar o Vagrant pela primeira vez em Santa Monica, em 2011. Eu jamais pensei em substituir o iTerm2, mas conheci o Ghostty e me apaixonei na hora

  • Tenho usado ghostty todos os dias ultimamente. Troquei recentemente. No macOS, como mapeei caps lock para cmd, até cmd+c funciona bem. As configurações padrão são inteligentes, e tirando o fato de que customizar não é tão fácil, estou satisfeito com tudo. O tema Gruvbox light também é muito bonito. O simples fato de ser escrito em Zig já é muito legal, então, se alguém se pergunta se Zig é uma linguagem pronta para uso real, ghostty pode ser a resposta. Não parece que vou voltar para outro terminal; a experiência tem sido realmente muito satisfatória. Observação: combinar ghostty com aerospace praticamente completa um ambiente quase perfeito só com teclado no Mac

    • Você poderia explicar por que eu deveria usar ghostty? (Pergunto como alguém que usa Terminal.app como principal)
    • Clickhouse e Bun também são projetos impressionantes
  • Estou usando ghostty no meu Air Mac, um Mac que herdei do meu irmão quando ele parou de programar. Gosto tanto do ghostty que sou sinceramente grato. Pode parecer um detalhe pequeno, mas por algum motivo acho bem valioso ele não depender de libc

  • O histograma de análise de frequência do visidata não era renderizado corretamente; algumas partes apareciam como quadrados, mas o resto surgia como losangos com ponto de interrogação. Por causa desse problema, ainda não consegui abandonar o iTerm. Nem sabia por quais palavras-chave pesquisar, então foi difícil resolver

    • Pode ser que esses code points não existam na fonte principal nem na fonte de fallback. Se você usa ghostty, eu recomendaria verificar no iTerm2 qual fonte está exibindo esses glifos e depois procurar se há uma configuração adequada no ghostty
  • Continuo acompanhando o Ghostty na esperança de que o reflow de texto dele (especialmente incluindo o scrollback) possa ser resolvido também em terminais baseados em Neovim. Fico muito feliz de ver o Ghostty trazendo uma nova inovação para o ambiente de terminal https://github.com/neovim/neovim/issues/33155

    • Fiquei curioso se você é um power user do terminal do neovim. Há um tempo tentei mudar meu fluxo de trabalho, saindo de um modelo em que o tmux executava o neovim para outro em que o próprio neovim gerenciaria o terminal. Parecia conveniente poder abrir arquivos em apenas um buffer, porque muitas vezes eu acabava abrindo em algum pane um arquivo que já estava aberto em outra instância do neovim. Durante os testes, não senti nenhum problema específico de reflow que parecesse ser resolvido ao trocar para libghostty; o mais difícil foi me adaptar ao paradigma. Como alguém bem acostumado ao terminal embutido do neovim, gostaria de ouvir experiências sobre o que exatamente a adoção de libghostty poderia melhorar
  • Quero muito usar ghostty, mas ainda não consegui experimentar porque não há suporte a cmd+f. Ainda assim, estou muito animado com a evolução desse projeto

    • Está no roadmap
      https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • Dá para usar uma tecla como cmd+shift+f para abrir o buffer inteiro no editor de texto padrão e pesquisar lá; muita gente conseguiu se virar assim, e comigo foi a mesma coisa. É uma alternativa prática o suficiente até que chegue a busca nativa no scrollback
    • Fico curioso sobre por que esse recurso não foi adicionado logo no começo; busca no histórico é essencial em terminal, então será que havia algum motivo complicado? Na verdade, o próprio Mitchell abriu essa issue há 2 anos
      https://github.com/ghostty-org/ghostty/issues/189
    • Muita gente reclama da falta de busca no histórico tipo cmd+f, mas eu, mesmo tendo isso disponível, nunca usei. Seria legal se alguém pudesse explicar qual é o fluxo de trabalho em que isso faz tanta diferença; talvez eu esteja deixando passar algo importante
    • Também dá para rodar tmux dentro e mapear cmd+f para copy-mode + /