Files
claude-app-builder-4-mac/STATUS.md
T
marcus.hinz c8f5714b1e libghostty als zweite Terminal-Engine integriert (Default ghostty, SwiftTerm Fallback)
- vendor/libghostty: vorgebaute macOS-libghostty.a (arm64) + Header + Build-Patches + README
- Sources/CGhostty: C-Modul der libghostty-C-API
- Sources/MiniTerm/Ghostty.swift: GhosttyApp + GhosttySurfaceView (Surface, Input, Größe, Fokus)
- main.swift: Engine-Wahl per Info.plist MTEngine
- Package.swift: CGhostty-Target + Link gegen libghostty + Frameworks
- STATUS.md: Stand, Build-Weg (macOS-15-VM), offene Punkte
2026-06-21 21:40:00 +02:00

3.1 KiB

Stand: libghostty-Integration in MiniTerm

Stand 2026-06-21. MiniTerm baut pro Aufruf eigenständige macOS-.apps (eigene Bundle-ID → eigenes Dock-Icon/⌘-Tab). Bisher SwiftTerm als Terminal. Ziel: SwiftTerm durch libghostty (GPU/Metal-Renderer von Ghostty) ersetzen.

Erreicht

  • libghostty gebaut (volle macOS-Variante mit Metal-Renderer, Surface-/App-API), liegt als vendor/libghostty/ (lib/libghostty.a arm64 ~135 MB, include/, patches/, README.md). Quelle Ghostty v1.3.1 + Zig 0.15.2.
  • In MiniTerm integriert, kompiliert, linkt, läuft — Test-.app startet ohne Crash mit GPU-gerenderter Login-Shell. Mausrad/Scrollback funktioniert.

Warum der Build aufwändig war

  • Zig 0.15.2 linkt auf dem Host (macOS 26.5) kein natives Binary (libSystem- Inkompatibilität mit dem 26er-SDK; Auto-Erkennung von 26.x scheitert). Neuere Zig (0.16/0.17) linken, bauen aber Ghostty 1.3.1 nicht (API-Drift).
  • Lösung: Build in macOS-15-VM (tart, cirruslabs-Image, Apple-Silicon-Host) mit aktivem CLT (15.5-SDK) → Zig linkt. metal-Shader-Compiler nur per DEVELOPER_DIR aus dem installierten Xcode geholt.
  • 3 Build-Patches an Ghostty (in vendor/libghostty/patches/…patch): build.zig (macOS-libghostty.a-Install frei, shared .so raus), GhosttyXCFramework.zig (nur macOS-Slice, kein iOS), MetallibStep.zig (metal via Xcode-DEVELOPER_DIR).
  • libghostty.a aus VM herauskopiert; Host-Swift linkt sie problemlos (Cross-SDK unkritisch). VM + Scratch danach abgeräumt.

Neue/geänderte Dateien

  • Sources/CGhostty/ — C-Modul (include/ghostty.h + module.modulemap, leeres shim.c) für die libghostty-C-API.
  • Sources/MiniTerm/Ghostty.swiftGhosttyApp (einmalig ghostty_init, Config laden/finalize, ghostty_runtime_config_s-Callbacks, ghostty_app_tick via wakeup) + GhosttySurfaceView (NSView, ghostty_surface_new mit nsview-Zeiger; Größe/Content-Scale/Fokus; Tastatur inkl. Shift+Enter→ ghostty_surface_text; Maus/Scroll).
  • Sources/MiniTerm/main.swift — Engine-Wahl per Info.plist MTEngine (Default ghostty, swiftterm = Fallback, auch wenn libghostty-Init scheitert).
  • Package.swift — CGhostty-Target + linkerSettings: -L vendor/libghostty/lib -lghostty + Frameworks AppKit/Metal/MetalKit/ QuartzCore/CoreText/CoreGraphics/CoreVideo/IOSurface/Carbon, -lc++.

Offen / bewusst weggelassen

  • Kein Scrollbalken — der ist in Ghostty.app host-seitig (SurfaceScrollView), nicht in libghostty; unsere View bildet ihn nicht nach (Scrollback per Mausrad geht). Nachrüstbar.
  • Clipboard-Callbacks no-op — kein ⌘C/⌘V über libghostty.
  • Font-Family wird nicht gesetzt (nur font_size; Family ginge nur über eine Ghostty-Config-Datei via ghostty_config_load_file).
  • arm64-only (kein x86_64-Slice).
  • Visuelle Vollprüfung (Tippen/Resize/Reflow) durch Marcus noch offen.

Reproduzieren ohne VM

vendor/libghostty/lib/libghostty.a + include/ genügen zum Bauen. Neu bauen nur nötig bei Ghostty-Update → Rezept in vendor/libghostty/README.md.