3 पॉइंट द्वारा GN⁺ 2026-03-21 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • libghostty C API पर आधारित न्यूनतम फीचर वाला टर्मिनल डेमो, जो एक ही C फ़ाइल और Raylib rendering का उपयोग करके चलता है
  • libghostty-vt की क्षमताओं को सत्यापित करने के लिए बनाई गई संरचना, जो GPU rendering के बजाय 2D graphics आधारित टर्मिनल implementation दिखाती है
  • text reflow, 24-bit color, Unicode handling, mouse·keyboard protocols जैसी वास्तविक टर्मिनल-स्तरीय सुविधाओं का समर्थन करता है
  • Kitty Graphics Protocol और OSC clipboard·title setting जैसी कुछ सुविधाएँ अभी लागू नहीं हैं, और Windows support भी शामिल नहीं है
  • libghostty के core का उपयोग करके विभिन्न applications को अपना GUI या renderer जोड़ने की extensibility प्रदान करता है

Ghostling का अवलोकन

  • Ghostling एक न्यूनतम फीचर वाला टर्मिनल डेमो प्रोजेक्ट है, जो libghostty C API पर आधारित है और एक single C file से बना उदाहरण है
  • यह Raylib का उपयोग window management और rendering के लिए करता है, और single-threaded संरचना में चलता है
  • libghostty-vt की flexibility दिखाने के लिए यह direct GPU rendering के बजाय 2D graphics renderer का उपयोग करता है
  • यह पूरी तरह रोज़मर्रा के उपयोग वाला टर्मिनल नहीं, बल्कि minimum viable terminal implementation का उदाहरण है, इसलिए कोड की सटीकता का सत्यापन सीमित है

Libghostty परिचय

  • Libghostty, Ghostty के core से निकाली गई एक embedded terminal emulation library है, जो C और Zig API प्रदान करती है
  • libghostty-vt एक dependency-free library है, जो VT sequence parsing, cursor position, style, scrollback जैसे terminal state management को संभालती है
    • इसमें rendering या window management code शामिल नहीं है, इसलिए इसका उपयोग करने वाले applications को इन्हें स्वयं implement करना होगा
  • Ghostty GUI में सत्यापित codebase पर आधारित होकर यह accurate और complete terminal emulation, SIMD-optimized parsing, advanced Unicode support, efficient memory use, और extensive test-based stability प्रदान करता है

मुख्य सुविधाएँ

  • text reflow सहित window resizing का समर्थन
  • 24-bit color और 256-color palette, bold·italic·inverse styles का समर्थन
  • Unicode और multi-codepoint grapheme handling (लेकिन shaping·layout नहीं)
  • Shift, Ctrl, Alt, Super जैसे modifier key input का समर्थन
  • Kitty keyboard protocol, mouse tracking (X10, normal, button, any-event), कई mouse reporting formats (SGR, URxvt, UTF8, X10) का समर्थन
  • scroll wheel और drag scrollbar, focus reporting (CSI I / CSI O) का समर्थन
  • Ghostty GUI के समान स्तर की अधिकांश terminal emulation सुविधाएँ शामिल

नियोजित सुविधाएँ

  • वे सुविधाएँ जो अभी libghostty-vt में पूरी तरह expose नहीं हुई हैं
    • Kitty Graphics Protocol

    • OSC clipboard support

      • OSC title setting
      • Windows support libghostty-vt में संभव है, लेकिन Ghostling में अभी लागू नहीं है
      • भविष्य में जैसे-जैसे नई अतिरिक्त सुविधाएँ मिलेंगी, यह सूची बढ़ाई जाएगी

जो सुविधाएँ प्रदान नहीं की जातीं

  • libghostty टर्मिनल emulation core पर केंद्रित है, इसलिए इसमें GUI layer की सुविधाएँ शामिल नहीं हैं
    • tabs, multi-window, split screen, session management, config file, GUI, search UI आदि शामिल नहीं हैं
  • ऐसी सुविधाएँ libghostty का उपयोग करने वाले applications को स्वयं implement करनी होंगी
  • Ghostling, न्यूनतम उदाहरण बनाए रखने के लिए, जानबूझकर इन सुविधाओं को शामिल नहीं करता

Build करने का तरीका

  • आवश्यकताएँ: CMake 3.19 या उससे ऊपर, C compiler, PATH में Zig 0.15.x
  • अगर Raylib इंस्टॉल नहीं है, तो इसे CMake के FetchContent से अपने आप डाउनलोड किया जाएगा
  • मूल build प्रक्रिया
    cmake -B build -G Ninja  
    cmake --build build  
    ./build/ghostling  
    
  • ध्यान दें: debug build, safety checks की वजह से बहुत धीमा होता है और benchmarking के लिए उपयुक्त नहीं है
  • Release build
    cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release  
    cmake --build build  
    
  • शुरुआती setup के बाद केवल cmake --build build चलाना पर्याप्त है

FAQ

  • Zig की जगह C क्यों इस्तेमाल किया गया

    • libghostty-vt** पूरा Zig API देता है, लेकिन** C API अधिक व्यापक रूप से इस्तेमाल होता है और अधिक सुलभ है

      • Ghostling, न्यूनतम C API usage example दिखाने के लिए एक डेमो है
  • Rust जैसी अन्य भाषाओं का समर्थन

    • libghostty-vt C API के माध्यम से zero dependency के साथ चल सकता है
    • अधिकांश भाषाओं में इसे thin binding के साथ उपयोग किया जा सकता है, और official bindings C और Zig पर केंद्रित हैं
    • उम्मीद है कि community विभिन्न language bindings विकसित और maintain करेगी
  • क्या Raylib अनिवार्य है

    • नहीं. libghostty पर renderer या GUI framework को लेकर कोई बाध्यता नहीं है
    • यह WASM environment में भी स्वतंत्र रूप से चल सकता है
    • यह render state API प्रदान करता है, इसलिए Metal·OpenGL·Raylib जैसे किसी भी renderer के साथ जोड़ा जा सकता है
  • CMake और Raylib क्यों चुने गए

    • यह किसी विशेष तकनीक पर निर्भर नहीं है, और CMake एक सामान्य-purpose build system है जिसे व्यापक support प्राप्त है
    • Raylib** एक सरल और आसानी से configure होने वाली** 2D window·rendering library है

      • प्रोजेक्ट का उद्देश्य तकनीकी चयन से अधिक libghostty के उपयोग का उदाहरण दिखाना है

1 टिप्पणियां

 
GN⁺ 2026-03-21
Hacker News प्रतिक्रियाएँ
  • मैं libghostty को Trolley में इस्तेमाल कर रहा हूँ
    यह प्रोजेक्ट TUI को desktop app के रूप में पैकेज करता है, कुछ वैसा ही जैसे web app को Electron से wrap किया जाता है
    बस GUI और CLI bundler जोड़ा गया है, और यह Windows पर भी पूरी तरह काम करता है
    Ghostty डेवलपर्स से मैं सचमुच प्रभावित हूँ

    • तुम्हारे GitHub README में एक screenshot होता तो अच्छा लगता
      उससे तुरंत समझ आता कि app TUI के आसपास किस तरह का chrome(UI बाहरी हिस्सा) जोड़ता है
  • C फ़ाइल छोटी है, इसलिए इसे कुछ ही मिनटों में पूरा पढ़ लिया
    लगभग 5वीं लाइन पर font को auto-generated header में embed करने का अनोखा तरीका देखकर हैरानी हुई
    मैं Windows resource वाले तरीके का आदी था, लेकिन इसमें CMake code से byte array बनाया गया था
    थोड़ा झटका देने वाला, फिर भी प्रभावशाली — लगा जैसे आखिरकार cross-platform binary resource embedding का समाधान मिल गया हो

    • यहाँ इस्तेमाल की गई build script साझा कर रहा हूँ
      cmake -DINPUT=pixel.gif -DOUTPUT=pixel.h -DARRAY_NAME=pixel_gif -P bin2header.cmake कमांड से
      1x1 pixel GIF को C array में बदला जा सकता है
      auto-generated header में image सीधे byte array के रूप में चली जाती है
    • एक मज़ेदार बात यह है कि XPM bitmap मूल रूप से बिना किसी बदलाव के #include किए जाने के लिए डिज़ाइन किए गए थे
      X PixMap wiki में इसकी संरचना अच्छी तरह समझाई गई है
    • vim पैकेज के xxd कमांड से भी ऐसा array बनाया जा सकता है
      लेकिन बड़े resource के लिए यह अक्षम है — gcc/clang में memory explosion हो जाता है
      इसलिए मैं LIEF project का उपयोग करता हूँ
      यह Windows PE, macOS Mach-O, Linux ELF binaries में resource डालने और फिर पढ़ने की सुविधा देता है
      इसकी बदौलत बिना size limit वाला cross-platform resource bundling system बनाया जा सका
    • Windows programmer होने के नाते DrawTextEx call देखना दिलचस्प लगा
      यह Ghostty library की expressiveness को अच्छी तरह दिखाने वाला sample था
      दूसरी library choices भी शानदार थीं, और इससे मुझे भी terminal app खुद बनाने की प्रेरणा मिली
    • “आखिरकार मिल गया” वाली बात से मैं सहमत नहीं हूँ
      source code में binary शामिल करना बहुत पुरानी तकनीक है
      70–80 के दशक के BASIC की DATA lines या Atari ST, Amiga games में भी यह तरीका आम था
      Java में भी pixel-level fonts को .java फ़ाइलों में सीधे डाला गया है
      सुना है कि Linux kernel के कुछ fonts भी इसी तरह संभाले जाते हैं
  • यह प्रोजेक्ट दिलचस्प है
    मुझे terminal emulator में tabs या session management की ज़रूरत नहीं होती
    WM window और tab संभालता है, और tmux session, scrollback, search वगैरह संभालता है
    इसलिए urxvt, st, foot जैसे simple terminal मेरे लिए काफी रहे हैं
    Ghostty मेरी पसंद का नहीं था, लेकिन इसे एक बार आज़माया जा सकता है
    OSC support आने वाला है, और अगर st की तुलना में कम झंझट वाला plugin system जुड़ जाए तो अच्छा होगा