Skip to content

sudo-tee/hollow

Repository files navigation

Hollow

Hollow demo
Hollow demo Hollow demo

What Hollow Is

Hollow is a Zig terminal emulator with a LuaJIT runtime and Ghostty's VT core. The current build is usable today, highly configurable through Lua, and validated primarily on Windows and WSL.

I see it as a spiritual successor to WezTerm. WezTerm is a fantastic terminal emulator, but Wezterm development has slowed down and the project is not as active as it once was. Hollow is an attempt to create a new terminal emulator that builds on the strengths of WezTerm while also providing a more modern and flexible architecture.

If you are new to the repo, start with the docs index. The root README is the product overview; the rest of docs/ is the actual guide set.

Table Of Contents

Why "Hollow"?

The name "Hollow" is meant to evoke the idea of a container or vessel that can be filled with different contents. In this case, the "hollow" is the terminal emulator itself, which can be customized and extended with different configurations, scripts, and plugins to suit the user's needs. The name also has a certain simplicity and elegance to it, which reflects the design philosophy of the project.

Features

  • A modern terminal emulator built with Zig and LuaJIT
  • A built-in Lua API for interacting with the terminal and building custom UI and automation
  • A VT core based on Ghostty for fast and accurate terminal emulation
  • Support for tabs, panes, workspaces, and a customizable top bar
  • Cross-platform support with a focus on Windows and WSL (Linux and macOS support is planned but not yet validated)

Getting Started

Download a release

The latest release is available on GitHub: Releases

Windows releases also bundle the optional hollow-wsl-bypass helper for WSL. If you install that helper inside your WSL distro, Hollow uses it for wsl.exe domains and falls back to ConPTY automatically when the helper is not installed.

Windows builds also emit hollow-native.pdb for crash symbolization.

Customize the config

Copy the default config conf/init.lua to the user config location:

  • Windows: %APPDATA%\hollow\init.lua
  • Non-Windows: $XDG_CONFIG_HOME/hollow/init.lua or $HOME/.config/hollow/init.lua

Refer to the configuration docs for details on the config model, defaults and overrides

Development builds

Build from source (Windows/WSL)

First-time setup:

./scripts/setup.sh

Build and run:

./launch.sh

Build only:

./launch.sh --build-only

Debug build:

./launch.sh --debug

Build from source (other platforms)

First-time setup:

./scripts/setup.sh

Build and run:

zig build run
## Or build a release binary:
zig build -Doptimize=ReleaseFast

Linux build prerequisites

Error: The linux build is currently broken.

To build on Linux you need the X11, Xi, Xcursor, OpenGL and ALSA development packages:

sudo apt install -y libx11-dev libxi-dev libxcursor-dev libgl1-mesa-dev libasound2-dev pkg-config

These provide the -lX11 -lXi -lXcursor -lGL -lasound libraries required by the linker.

Documentation Map

Start with the docs index.

File Purpose Read this when
docs/README.md Documentation hub and structure you want the full map of guides and references
docs/configuration.md Config model, defaults, overrides, packaging you want to customize Hollow or ship a default config
docs/windows-wsl.md Windows-first setup, WSL usage, troubleshooting you are running Hollow in its primary validated environment
docs/hollow-lua-api.md Lua runtime API reference you are scripting Hollow or building custom UI/automation
docs/htp-shell-examples.md Shell-side HTP helpers and examples you want shells or scripts to talk back to the host

Companion reference files outside docs/:

  • conf/init.lua: the shipped default configuration
  • types/hollow.lua: LuaLS typings for the runtime API

What Ships Today

  • tabs, split panes, floating panes, maximized panes, and workspaces
  • scrollback, selection, clipboard, and hyperlink handling
  • a shipped top bar with workspace, tabs, cwd, key legend, and time
  • a Lua API centered on hollow.config, hollow.term, hollow.events, hollow.keymap, hollow.ui, and hollow.htp
  • CLI and Lua font discovery helpers
  • Windows domains for pwsh, powershell, cmd, and wsl
  • optional WSL PTY bypass helper with automatic fallback to ConPTY when not installed
  • a bundled config that users can extend from %APPDATA%\hollow\init.lua on Windows or $XDG_CONFIG_HOME/hollow/init.lua / $HOME/.config/hollow/init.lua on non-Windows hosts

The shipped Windows default domain is currently pwsh. wsl is available and documented because it is an important workflow, but it is not the default in the current bundled config.

Default Keymaps

The default keymaps are defined in conf/init.lua. The bundled leader key is <C-Space> (timeout 1200ms). Below are the default bindings included in the shipped config (key → action):

  • <C-S-c>: copy_selection
  • <C-S-v>: paste_clipboard
  • <S-Insert>: paste_clipboard
  • <C-\>: split_vertical
  • <C-S-\>: split_horizontal
  • <C-t>: new_tab
  • <C-w>: close_tab
  • <C-S-w>: close_pane
  • <C-Tab>: next_tab
  • <C-S-Tab>: prev_tab
  • <C-A-n>: new_workspace
  • <C-A-p>: workspace_switcher
  • <C-A-r>: rename_workspace
  • <C-A-w>: close_workspace
  • <C-A-Right>: next_workspace
  • <C-A-Left>: prev_workspace
  • <C-S-Left>: focus_pane_left
  • <C-S-Right>: focus_pane_right
  • <C-S-Up>: focus_pane_up
  • <C-S-Down>: focus_pane_down
  • <C-S-m>: maximize_pane
  • <C-S-f>: float_pane
  • <C-A-S-f>: tile_pane
  • <C-A-h>: move_pane_left
  • <C-A-l>: move_pane_right
  • <C-A-k>: move_pane_up
  • <C-A-j>: move_pane_down
  • <C-A-S-Left>: resize_pane_left
  • <C-A-S-Right>: resize_pane_right
  • <C-A-Up>: resize_pane_up
  • <C-A-Down>: resize_pane_down
  • <A-S-PageUp>: scrollback_page_up
  • <A-S-PageDown>: scrollback_page_down
  • <C-S-Home>: scrollback_top
  • <C-S-End>: scrollback_bottom
  • <leader>r: rename current tab (bound to a small rename prompt; desc: "rename tab")
  • <leader>uu: reload the config (desc: "reload config")

You can override any of these in your user config by calling hollow.keymap.set or hollow.keymap.set_leader in $XDG_CONFIG_HOME/hollow/init.lua or %APPDATA%\\hollow\\init.lua.

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.
  • The current build is suitable for building, running, configuring, and packaging now, with Windows/WSL as the main tested target.
  • If you are planning a docs site, treat docs/README.md as the navigation root.

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors