3 puan yazan GN⁺ 2026-03-21 | 1 yorum | WhatsApp'ta paylaş
  • libghostty C API tabanlı, tek bir C dosyası ve Raylib render kullanarak çalışan minimum özellikli bir terminal demosu
  • libghostty-vt işlevlerini doğrulamak için tasarlanmış bir yapıyla, GPU render yerine 2D grafik tabanlı terminal uygulamasını gösteriyor
  • Metin reflow’u, 24-bit renk, Unicode işleme, fare ve klavye protokolleri gibi gerçek terminal düzeyinde özellikleri destekliyor
  • Kitty Graphics Protocol ile OSC clipboard ve başlık ayarı gibi bazı özellikler henüz uygulanmış değil; Windows desteği de dahil değil
  • libghostty çekirdeğini kullanarak, farklı uygulamaların kendi GUI veya render bileşenlerini birleştirebilmesine olanak tanıyan genişletilebilirlik sunuyor

Ghostling genel bakış

  • Ghostling, libghostty C API tabanlı minimum özellikli bir terminal demo projesidir; tek bir C dosyasından oluşan bir örnektir
  • Pencere yönetimi ve render için Raylib kullanır ve tek iş parçacıklı bir yapıda çalışır
  • libghostty-vt esnekliğini göstermek için doğrudan GPU render yerine 2D grafik render kullanır
  • Tam teşekküllü günlük kullanım terminali değil, minimum çalışabilir terminal uygulaması örneğidir; kodun doğruluğu kapsamlı biçimde doğrulanmış değildir

Libghostty tanıtımı

  • Libghostty, Ghostty çekirdeğinden çıkarılmış bir gömülü terminal emülasyon kütüphanesidir ve C ile Zig API’leri sunar
  • libghostty-vt, bağımlılıksız bir kütüphanedir; VT sequence parsing, imleç konumu, stiller, scrollback gibi terminal durum yönetimini üstlenir
    • Render veya pencere yönetimi kodu içermez; bunlar kütüphaneyi kullanan uygulama tarafından doğrudan uygulanmalıdır
  • Ghostty GUI içinde doğrulanmış kod tabanına dayanarak, doğru ve eksiksiz terminal emülasyonu, SIMD optimize parsing, gelişmiş Unicode desteği, verimli bellek kullanımı ve geniş test tabanlı kararlılık sağlar

Başlıca özellikler

  • Metin reflow dâhil pencere boyutlandırma desteği
  • 24-bit renk ve 256 renk paleti, bold, italik ve ters video stilleri desteği
  • Unicode ve çoklu codepoint grapheme işleme (ancak shaping ve layout yok)
  • Shift, Ctrl, Alt, Super gibi değiştirici tuş girişlerinin işlenmesi
  • Kitty keyboard protocol, fare izleme (X10, normal, button, any-event) ve birden çok fare raporlama biçimi (SGR, URxvt, UTF8, X10) desteği
  • Kaydırma tekerleği ve sürüklenebilir kaydırma çubuğu, odak raporlama (CSI I / CSI O) desteği
  • Ghostty GUI ile aynı düzeydeki terminal emülasyonu özelliklerinin büyük kısmını içerir

Planlanan özellikler

  • Henüz libghostty-vt içinde tamamen dışa açılmamış özellikler
    • Kitty Graphics Protocol

    • OSC clipboard desteği

      • OSC başlık ayarı
      • Windows desteği, libghostty-vt tarafında mümkün olsa da Ghostling’de henüz uygulanmamıştır
      • Gelecekte yeni ek özellikler keşfedildikçe liste genişletilecektir

Sunulmayan özellikler

  • libghostty, terminal emülasyonu çekirdeğine odaklandığı için GUI katmanı özelliklerini içermez
    • Sekmeler, çoklu pencere, bölünmüş ekran, oturum yönetimi, yapılandırma dosyası, GUI, arama arayüzü vb. dahil değildir
  • Bu özellikler libghostty kullanan uygulama tarafından doğrudan uygulanmalıdır
  • Ghostling, minimum örnek yapısını korumak için bu özellikleri kasıtlı olarak dışarıda bırakır

Derleme yöntemi

  • Gereksinimler: CMake 3.19 veya üzeri, C derleyicisi, PATH içinde Zig 0.15.x
  • Raylib, kurulu değilse CMake’in FetchContent özelliğiyle otomatik olarak indirilir
  • Temel derleme adımları
    cmake -B build -G Ninja  
    cmake --build build  
    ./build/ghostling  
    
  • Dikkat: Debug build, güvenlik kontrolleri nedeniyle çok yavaştır ve benchmark için uygun değildir
  • Release build
    cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release  
    cmake --build build  
    
  • İlk kurulumdan sonra yalnızca cmake --build build komutunu çalıştırmak yeterlidir

SSS

  • Zig yerine neden C kullanıldı

    • libghostty-vt** tam bir Zig API sunsa da,** C API daha yaygın kullanılır ve daha erişilebilirdir

      • Ghostling, minimum C API kullanım örneğini göstermek için hazırlanmış bir demodur
  • Rust gibi diğer dil destekleri

    • libghostty-vt, C API üzerinden sıfır bağımlılıkla çalışabilir
    • Çoğu dilde ince binding’lerle kullanılabilir; resmî binding’ler C ve Zig odaklıdır
    • Topluluğun farklı diller için binding’ler geliştirip sürdürmesi beklenmektedir
  • Raylib zorunlu mu

    • Zorunlu değil. libghostty, render veya GUI framework’ü konusunda herhangi bir kısıtlama getirmez
    • WASM ortamında da bağımsız olarak çalışabilir
    • Render state API sağlayarak Metal, OpenGL, Raylib gibi her türlü render ile birleştirilebilir
  • Neden CMake ve Raylib seçildi

    • Belirli bir teknolojiye bağımlı değildir; CMake genel amaçlı ve geniş destekli bir build sistemidir
    • Raylib** basit ve kurulumu kolay bir** 2D pencere ve render kütüphanesidir

      • Projenin amacı teknik seçimlerden çok libghostty kullanım örneği göstermektir

1 yorum

 
GN⁺ 2026-03-21
Hacker News görüşleri
  • Ben libghostty'yi Trolley'de kullanıyorum
    Bu proje, bir web uygulamasını Electron ile sarmaya benzer şekilde TUI'leri masaüstü uygulamaları olarak paketliyor
    Sadece GUI ve CLI bundle'layıcıları ekledim ama Windows'ta da kusursuz çalışıyor
    Ghostty geliştiricilerinden gerçekten etkilendim

    • GitHub README'ne bir ekran görüntüsü koyman güzel olurdu
      Uygulamanın TUI'nin etrafına nasıl bir chrome (arayüz çerçevesi) eklediğini hemen anlamayı sağlardı
  • C dosyası o kadar küçük ki birkaç dakikada tamamını okuyabildim
    5. satır civarında fontu otomatik üretilmiş bir header içine gömmenin alışılmadık yolunu görünce şaşırdım
    Windows kaynak yöntemine alışığım ama burada CMake koduyla bir byte dizisi üretiliyor
    Biraz sarsıcı ama etkileyiciydi — sonunda çapraz platform ikili kaynak gömme için bir çözüm bulmuşum gibi hissettirdi

    • Burada kullanılan build script paylaşılmış
      cmake -DINPUT=pixel.gif -DOUTPUT=pixel.h -DARRAY_NAME=pixel_gif -P bin2header.cmake komutuyla
      1x1 piksellik bir GIF'i C dizisine dönüştürebildim
      Otomatik oluşturulan header içinde görsel doğrudan byte dizisi olarak yer alıyor
    • İlginç bir ayrıntı olarak, XPM bitmap aslında değiştirilmeden #include edilebilsin diye tasarlanmıştı
      X PixMap wiki bunun yapısını iyi açıklıyor
    • vim paketindeki xxd komutuyla da bu tür diziler oluşturulabilir
      Ama büyük kaynaklar için verimsiz — gcc/clang bellek patlaması yaşatıyor
      Bu yüzden ben LIEF projesini kullanıyorum
      Bu araç Windows PE, macOS Mach-O, Linux ELF ikililerine kaynak eklemeyi ve sonra tekrar okumayı sağlıyor
      Bu sayede boyut sınırı olmayan çapraz platform kaynak bundle sistemi kurabildim
    • Bir Windows programcısı olarak DrawTextEx çağrısını görmek ilgimi çekti
      Bu, Ghostty kütüphanesinin ifade gücünü iyi gösteren bir örnekti
      Diğer kütüphane seçimleri de harikaydı ve bana da kendi terminal uygulamamı yapma ilhamı verdi
    • “Sonunda buldum” ifadesine katılmıyorum
      İkili veriyi kaynak koduna dahil etmek eski bir teknik
      70'ler ve 80'lerdeki BASIC DATA satırlarında ya da Atari ST ve Amiga oyunlarında bu yaklaşım yaygındı
      Java'da da piksel tabanlı fontları doğrudan .java dosyalarına koyduğum olmuştu
      Linux çekirdeğindeki bazı fontların da bu şekilde işlendiğini duymuştum
  • Bu proje ilginç görünüyor
    Benim bir terminal emülatöründe sekme ya da oturum yönetimi özelliklerine ihtiyacım yok
    WM pencereleri ve sekmeleri yönetiyor, tmux ise oturum, scrollback ve arama gibi işleri hallediyor
    Bu yüzden urxvt, st, foot gibi basit terminaller bana yetiyordu
    Ghostty benim zevkime pek uymamıştı ama buna bir şans verilir
    OSC desteği planlanıyor ve st'ye göre daha az uğraştıran bir eklenti sistemi eklenirse güzel olur