-
libghostty C API를 기반으로 한 최소 기능의 터미널 데모로, 단일 C 파일과 Raylib 렌더링을 사용해 동작
-
libghostty-vt의 기능을 검증하기 위한 구조로, GPU 렌더링 대신 2D 그래픽 기반 터미널 구현을 보여줌
-
텍스트 리플로우, 24비트 컬러, 유니코드 처리, 마우스·키보드 프로토콜 등 실제 터미널 수준의 기능을 지원함
-
Kitty Graphics Protocol과 OSC 클립보드·타이틀 설정 등 일부 기능은 아직 미구현 상태이며, Windows 지원도 포함되지 않음
-
libghostty의 핵심을 활용해 다양한 애플리케이션이 독자적 GUI나 렌더러를 결합할 수 있는 확장성을 제공함
Ghostling 개요
-
Ghostling은 libghostty C API를 기반으로 한 최소 기능의 터미널 데모 프로젝트로, 단일 C 파일로 구성된 예제임
-
Raylib을 사용해 윈도우 관리와 렌더링을 수행하며, 단일 스레드 구조로 동작함
-
libghostty-vt의 유연성을 보여주기 위해 GPU 직접 렌더링 대신 2D 그래픽 렌더러를 사용함
- 완전한 일상용 터미널이 아닌 최소 실행 가능한 터미널 구현 예시로, 코드의 정확성 검증은 제한적임
Libghostty 소개
-
Libghostty는 Ghostty의 핵심에서 추출된 임베디드 터미널 에뮬레이션 라이브러리로, C와 Zig API를 제공함
-
libghostty-vt는 의존성이 없는 라이브러리로, VT 시퀀스 파싱, 커서 위치, 스타일, 스크롤백 등 터미널 상태 관리를 담당함
- 렌더링이나 윈도우 관리 코드는 포함하지 않으며, 이를 사용하는 애플리케이션이 직접 구현해야 함
-
Ghostty GUI에서 검증된 코드 기반으로, 정확하고 완전한 터미널 에뮬레이션, SIMD 최적화 파싱, 고급 유니코드 지원, 효율적 메모리 사용, 광범위한 테스트 기반 안정성을 제공함
주요 기능
-
텍스트 리플로우를 포함한 창 크기 조정 지원
-
24비트 컬러 및 256색 팔레트, 볼드·이탤릭·역상 스타일 지원
-
유니코드 및 다중 코드포인트 그래핌 처리 (단, 셰이핑·레이아웃 없음)
-
Shift, Ctrl, Alt, Super 등 수정키 입력 처리
-
Kitty 키보드 프로토콜, 마우스 추적(X10, normal, button, any-event), 여러 마우스 리포팅 포맷(SGR, URxvt, UTF8, X10) 지원
-
스크롤 휠 및 드래그 스크롤바, 포커스 리포팅(CSI I / CSI O) 지원
-
Ghostty GUI와 동일한 수준의 터미널 에뮬레이션 기능 대부분 포함
예정된 기능
- 아직 libghostty-vt에서 완전히 노출되지 않은 기능
-
Kitty Graphics Protocol
-
OSC 클립보드 지원
-
OSC 타이틀 설정
-
Windows 지원은 libghostty-vt에서 가능하지만 Ghostling에서는 미구현 상태
- 향후 추가 기능이 발견될 때마다 목록이 확장될 예정
제공되지 않는 기능
-
libghostty는 터미널 에뮬레이션 핵심에 집중하므로, GUI 계층 기능은 포함하지 않음
- 탭, 다중 윈도우, 분할 화면, 세션 관리, 설정 파일, GUI, 검색 UI 등은 미포함
- 이러한 기능은 libghostty를 사용하는 애플리케이션이 직접 구현해야 함
- Ghostling은 최소 예시를 유지하기 위해 이러한 기능을 의도적으로 제외함
빌드 방법
-
필수 요구사항: CMake 3.19 이상, C 컴파일러, PATH에 Zig 0.15.x
-
Raylib은 설치되어 있지 않으면 CMake의 FetchContent로 자동 다운로드됨
- 기본 빌드 절차
cmake -B build -G Ninja
cmake --build build
./build/ghostling
-
주의: 디버그 빌드는 안전성 검사로 인해 매우 느리며, 벤치마크용으로 부적합함
-
Release 빌드
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
- 초기 설정 이후에는 cmake --build build만 실행하면 됨
FAQ
-
Zig 대신 C를 사용한 이유
-
libghostty-vt는 완전한 Zig API를 제공하지만, C API는 더 널리 사용되고 접근성이 높음
- Ghostling은 최소 C API 사용 예시를 보여주기 위한 데모임
-
Rust 등 다른 언어 지원
-
libghostty-vt는 C API를 통해 제로 의존성으로 동작 가능
- 대부분의 언어에서 얇은 바인딩만으로 사용 가능하며, 공식 바인딩은 C와 Zig 중심
- 커뮤니티에서 다양한 언어 바인딩을 개발·유지하기를 기대함
-
Raylib 필수 여부
-
필수 아님. libghostty는 렌더러나 GUI 프레임워크에 대한 제약이 없음
-
WASM 환경에서도 독립적으로 동작 가능
-
렌더 상태 API를 제공해, Metal·OpenGL·Raylib 등 어떤 렌더러와도 결합 가능
-
CMake와 Raylib 선택 이유
- 특정 기술에 종속되지 않으며, CMake는 범용적이고 지원이 넓은 빌드 시스템
-
Raylib은 간단하고 설정이 쉬운2D 윈도우·렌더링 라이브러리
- 프로젝트의 목적은 기술 선택보다 libghostty의 활용 예시를 보여주는 데 있음