3 poin oleh GN⁺ 2026-03-21 | 1 komentar | Bagikan ke WhatsApp
  • Demo terminal dengan fungsi minimum berbasis libghostty C API, berjalan menggunakan satu file C dan rendering Raylib
  • Dirancang untuk memverifikasi kemampuan libghostty-vt, serta menunjukkan implementasi terminal berbasis grafis 2D alih-alih rendering GPU
  • Mendukung fitur setingkat terminal sungguhan seperti text reflow, warna 24-bit, pemrosesan Unicode, serta protokol mouse dan keyboard
  • Beberapa fitur seperti Kitty Graphics Protocol dan pengaturan clipboard serta judul via OSC masih belum diimplementasikan, dan dukungan Windows juga belum disertakan
  • Memanfaatkan inti libghostty untuk memberi ekstensibilitas agar berbagai aplikasi dapat menggabungkan GUI atau renderer mereka sendiri

Ikhtisar Ghostling

  • Ghostling adalah proyek demo terminal dengan fungsi minimum berbasis libghostty C API, berupa contoh yang terdiri dari satu file C
  • Menggunakan Raylib untuk pengelolaan jendela dan rendering, serta berjalan dengan arsitektur single-thread
  • Menggunakan renderer grafis 2D alih-alih rendering GPU langsung untuk menunjukkan fleksibilitas libghostty-vt
  • Bukan terminal harian yang sepenuhnya lengkap, melainkan contoh implementasi terminal minimum viable, sehingga verifikasi ketepatan kode masih terbatas

Pengenalan Libghostty

  • Libghostty adalah library emulasi terminal embedded yang diekstrak dari inti Ghostty, menyediakan API C dan Zig
  • libghostty-vt adalah library tanpa dependensi, yang menangani manajemen status terminal seperti parsing urutan VT, posisi kursor, style, dan scrollback
    • Tidak menyertakan kode rendering atau pengelolaan jendela; aplikasi yang menggunakannya harus mengimplementasikan bagian tersebut sendiri
  • Berdasarkan kode yang telah tervalidasi di Ghostty GUI, library ini menawarkan emulasi terminal yang akurat dan lengkap, parsing yang dioptimalkan dengan SIMD, dukungan Unicode tingkat lanjut, penggunaan memori yang efisien, serta stabilitas berbasis pengujian yang luas

Fitur utama

  • Mendukung pengubahan ukuran jendela termasuk text reflow
  • Mendukung warna 24-bit dan palet 256 warna, serta style bold, italic, dan inverse
  • Mendukung Unicode dan grapheme multi-codepoint (namun tanpa shaping atau layout)
  • Menangani input tombol modifier seperti Shift, Ctrl, Alt, Super
  • Mendukung Kitty keyboard protocol, pelacakan mouse (X10, normal, button, any-event), serta berbagai format pelaporan mouse (SGR, URxvt, UTF8, X10)
  • Mendukung scroll wheel dan scrollbar drag, serta pelaporan fokus (CSI I / CSI O)
  • Mencakup sebagian besar fitur emulasi terminal pada level yang sama dengan Ghostty GUI

Fitur yang direncanakan

  • Fitur yang masih belum sepenuhnya diekspos di libghostty-vt
    • Kitty Graphics Protocol

    • Dukungan clipboard OSC

      • Pengaturan judul OSC
      • Dukungan Windows dimungkinkan di libghostty-vt, tetapi masih belum diimplementasikan di Ghostling
      • Daftar ini akan terus diperluas saat fitur tambahan ditemukan di masa mendatang

Fitur yang tidak disediakan

  • Karena libghostty berfokus pada inti emulasi terminal, fitur lapisan GUI tidak disertakan
    • Tab, multi-window, split screen, manajemen sesi, file konfigurasi, GUI, UI pencarian, dan sebagainya tidak termasuk
  • Fitur-fitur tersebut harus diimplementasikan langsung oleh aplikasi yang menggunakan libghostty
  • Ghostling sengaja mengecualikan fitur-fitur ini agar tetap menjadi contoh minimum

Cara build

  • Persyaratan wajib: CMake 3.19 atau lebih baru, compiler C, dan Zig 0.15.x di PATH
  • Raylib akan diunduh otomatis melalui FetchContent CMake jika belum terpasang
  • Prosedur build dasar
    cmake -B build -G Ninja  
    cmake --build build  
    ./build/ghostling  
    
  • Catatan: Build debug sangat lambat karena pemeriksaan keamanan, sehingga tidak cocok untuk benchmark
  • Build Release
    cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release  
    cmake --build build  
    
  • Setelah konfigurasi awal, cukup jalankan cmake --build build

FAQ

  • Alasan menggunakan C alih-alih Zig

    • libghostty-vt** menyediakan API Zig yang lengkap, tetapi** API C lebih luas digunakan dan lebih mudah diakses

      • Ghostling adalah demo untuk menunjukkan contoh penggunaan minimum C API
  • Dukungan bahasa lain seperti Rust

    • libghostty-vt dapat berjalan tanpa dependensi melalui C API
    • Dapat digunakan di sebagian besar bahasa hanya dengan binding tipis, dan binding resmi berfokus pada C dan Zig
    • Diharapkan komunitas akan mengembangkan dan memelihara binding untuk berbagai bahasa
  • Apakah Raylib wajib

    • Tidak wajib. libghostty tidak membatasi renderer maupun framework GUI
    • Dapat berjalan secara mandiri bahkan di lingkungan WASM
    • Menyediakan render state API, sehingga bisa digabungkan dengan renderer apa pun seperti Metal, OpenGL, atau Raylib
  • Alasan memilih CMake dan Raylib

    • Tidak terikat pada teknologi tertentu, dan CMake adalah sistem build serbaguna dengan dukungan luas
    • Raylib** adalah library jendela dan rendering 2D yang sederhana dan mudah dikonfigurasi**

      • Tujuan proyek ini bukan pada pilihan teknologinya, melainkan untuk menunjukkan contoh pemanfaatan libghostty

1 komentar

 
GN⁺ 2026-03-21
Komentar Hacker News
  • Saya memakai libghostty di Trolley
    Proyek ini mengemas TUI menjadi aplikasi desktop, mirip seperti membungkus web app dengan Electron
    Hanya dengan menambahkan bundler GUI dan CLI, ini bisa berjalan sempurna di Windows
    Saya benar-benar kagum pada para pengembang Ghostty

    • Akan bagus kalau ada setidaknya satu screenshot di README GitHub-mu
      Rasanya itu akan langsung membantu memahami chrome (bingkai UI) seperti apa yang ditambahkan aplikasi di sekitar TUI
  • File C-nya kecil, jadi saya bisa membaca semuanya dalam beberapa menit
    Sekitar baris ke-5, saya terkejut melihat pendekatan unik yang menyematkan font sebagai header yang dibuat otomatis
    Saya terbiasa dengan cara resource Windows, tetapi ini memakai kode CMake untuk membuat array byte
    Agak mengejutkan sekaligus mengesankan — rasanya seperti akhirnya menemukan solusi untuk penyematan resource biner lintas platform

    • Berikut skrip build yang dipakai di sini
      Dengan perintah cmake -DINPUT=pixel.gif -DOUTPUT=pixel.h -DARRAY_NAME=pixel_gif -P bin2header.cmake,
      saya bisa mengubah GIF 1x1 piksel menjadi array C
      Header yang dihasilkan otomatis akan berisi gambar tersebut sebagai array byte mentah
    • Fakta menariknya, bitmap XPM memang awalnya dirancang agar bisa di-#include tanpa modifikasi
      Wiki X PixMap menjelaskan strukturnya dengan baik
    • Array seperti ini juga bisa dibuat dengan perintah xxd dari paket vim
      Tetapi itu tidak efisien untuk resource besar — gcc/clang bisa mengalami ledakan penggunaan memori
      Karena itu saya memakai proyek LIEF
      Ini memungkinkan penyisipan dan pembacaan kembali resource pada biner Windows PE, macOS Mach-O, dan Linux ELF
      Berkat itu, saya bisa membangun sistem bundling resource lintas platform tanpa batas ukuran
    • Sebagai programmer Windows, menarik melihat pemanggilan DrawTextEx
      Itu adalah sampel yang menunjukkan daya ekspresif pustaka Ghostty dengan baik
      Pilihan pustaka lainnya juga sangat bagus, dan ini memberi saya inspirasi untuk mencoba membuat aplikasi terminal sendiri
    • Saya tidak terlalu setuju dengan ungkapan “akhirnya menemukan”
      Menyertakan biner di dalam source code adalah teknik lama
      Di baris DATA BASIC era 70-an dan 80-an, atau di game Atari ST dan Amiga, cara seperti ini sudah umum
      Di Java juga pernah ada font tingkat piksel yang langsung dimasukkan ke file .java
      Saya juga pernah dengar beberapa font di kernel Linux ditangani dengan cara seperti ini
  • Proyek ini menarik
    Saya tidak butuh fitur tab atau manajemen sesi di terminal emulator
    WM mengelola jendela dan tab, dan tmux menangani sesi, scrollback, pencarian, dan sebagainya
    Jadi terminal sederhana seperti urxvt, st, atau foot sudah cukup bagi saya
    Ghostty bukan selera saya, tetapi yang ini layak dicoba
    Dukungan OSC sudah direncanakan, dan akan bagus jika ada sistem plugin yang tidak serepot st