Skip to content
sudo-teePublic

About

Hollow is a terminal emulator built in Zig with a LuaJIT scripting layer and `libghostty-vt` for VT parsing and rendering.

Resources

Stars

33 stars

Watchers

4 watching

Forks

Latest commit

 

History

472 Commits

Folders and files

Repository files navigation

Hollow

Zig GitHub stars Last Commit

Hollow demo
Hollow demo Hollow demo

What Hollow Is

A Zig terminal emulator with a LuaJIT runtime and Ghostty's VT core. Fully configurable via Lua — inspired by the Lua APIs from WezTerm and Neovim — with a plugin system for custom panes, overlays, and widgets.

A personal side project — built for around my personal workflow, but completely customizable for anyone else.

If you are new to the repo, start with the docs index.

Features

  • Zig + LuaJIT runtime with a full Lua API (hollow.config, hollow.term, hollow.events, hollow.keymap, hollow.ui, hollow.htp, and more)
  • Ghostty's VT core for fast, accurate terminal emulation
  • Tabs, split panes, floating panes, maximized panes, workspaces, customizable top bar
  • Keyboard quick select for visible links, IPs, paths, filenames, and quoted text
  • Scrollback, selection, clipboard, hyperlink handling, font discovery, ligature, nerd fonts and emoji support
  • Basic support for Kitty images and Sixel
  • Windows domains for pwsh, powershell, cmd, and *WSL, it will populate domains automatically for all wsl distros installed on the system. eg: (UbuntuWSL, DebianWSL, AlpineWSL, FedoraWSL, etc.)
  • Agent-backed WSL, SSH and container panes via a bundled Linux hollow-agent (full escape sequence support; WSL falls back to ConPTY automatically)
  • Cross-platform targets: Windows and WSL (primary); Linux/X11 (basic support); macOS (planned)
  • Plugin system with Lua API for custom panes, overlays, and widgets (hollow.plugins)
  • Sensible default UX but fully customizable via Lua config and plugins

Paste uses Ghostty's mode-aware encoding and safety checks. Unbracketed multiline text and embedded bracketed-paste terminators are rejected with a "Paste blocked" notification; there is currently no override prompt.

Quick Start

Download a release: github.com/sudo-tee/hollow/releases Windows builds include the Linux hollow-agent bundle (agents/), auto-deployed into WSL for pane PTYs (falls back to ConPTY automatically if unavailable). Linux builds require an X11 session or XWayland; see Linux.

Customize: %APPDATA%\hollow\init.lua (Windows) or ~/.config/hollow/init.lua (other). Use conf/init.lua as a reference for the default config.

Build from source:

Zig version: 0.17.0 only. If you use asdf or mise, run asdf install or mise install from the repo root — .tool-versions is already pinned.

make setup                # fetch and patch dependencies
make dev                  # incremental Windows cross-build + run
make run                  # non-Windows build + run

Run make help for build, test, and benchmark commands. Pass options with ARGS, for example make dev ARGS="--build-only" or make bench ARGS="scroll 100". Existing scripts remain available directly.

Full build docs in Development.

Documentation

The full guide set lives in docs/:

Section Start here
Guides Getting started, Configuration, Keybindings, Panes/tabs/workspaces
Platforms Windows, WSL, Linux, macOS
Reference Lua API, CLI, Keymap actions
Examples Config snippets, UI recipes, Plugin authoring

Companion files: conf/init.lua (default config), types/hollow.lua (LuaLS typings).

Default Keymaps

All keymaps are defined in conf/init.lua. The leader key is <C-Space> (1200ms timeout). See the file for the full bindings or override them in your user config via hollow.keymap.set.

Project Status

  • Hollow is still an active project and the API surface is still moving.
  • The docs in this repo are meant to describe the current product, not a future roadmap.
  • Windows/WSL remain main tested targets. Linux/X11 has basic runtime support and release artifacts, with compositor-dependent window chrome behavior.

Roadmap

About

Hollow is a terminal emulator built in Zig with a LuaJIT scripting layer and `libghostty-vt` for VT parsing and rendering.

Resources

Stars

33 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages