Open source
A dev-first terminal

A terminal, built to the pixel.

Native panes, hideable drawers, tool floats, and workspaces you define, all on a libghostty core. Reach your toolchain without stopping to find somewhere to run it.

macOS 14+, Apple Silicon.

16/// Split orientation. `.vertical` = a | b.
17public enum SplitAxis: Sendable { case vertical, horizontal }
18
19/// Recursive pane layout. A value type.
20public indirect enum PaneNode: Sendable {
21 case leaf(PaneID)
22 case split(id: SplitID, axis: SplitAxis,
23 ratio: Double, a: PaneNode, b: PaneNode)
24}
25
26public extension PaneNode {
27 var leafIDs: [PaneID] {
Szen-termSources/PaneKitPaneNode.swift
zen-term
zen-term ❯ swift run ZenTerm
Building for debugging…
Build complete! (4.21s)
✓ ZenTerm launched
Bash(swift build)
… +6 lines
Build succeeded. Running swift test.
Test Suite 'PaneKitTests' passed.
Verifying the reconciler… (2m 14s)
▶▶ auto mode on (shift+tab to cycle)
1ZenTerm2Craftwork

one workspace: editor, agent, build

Keyboard-first

Every action is a keystroke: palettes, panes, drawers, floats. Your hands stay on home row.

Own the UI

Catppuccin, Tokyo Night, Nord and Gruvbox ship built in, or point ZenTerm at any ghostty theme. The whole app follows: terminal, chrome, tabs, and the focus halo.

Define your workflow

Build your workspaces, define your tools, configure the terminal defaults, and remap your shortcuts.

zen-termfeature/zen-83…
swift build
Building for debugging…
Build complete! (4.21s)
1ZenTerm2Craftwork
Search workspaces…
New Workspace…
ZenTerm
ZenTerm Website
Craftwork
Reecv
Cohaus
Drucial App
Dot Files
⏎ open⇧⏎ replace↑↓ move⎋ close
Per-tab workspaces

Pin a workspace to any directory.

A workspace pins panes, processes, and environment to a directory. Set it up once and the project opens that way every time you launch it.

  • Panes, processes, and environment, per tab
  • Launch the whole project from the workspace picker
  • Curated by hand, never a directory scan
zen-termfeature/zen-83…
swift build
Building for debugging…
Build complete! (4.21s)
1ZenTerm2Craftwork
1 · Status
zen-term ↑1
3 · Branches
feature/zen-83-build-zenter…
main
4 · Commits
fa76ac0Build ZenTerm landing page
0c43ca0Scaffold landing from template
d3fcde9Add-Project form + modal slot
13523c9Workspaces: deliberate project list
Log
commit fa76ac0
Author: Drew White
Date: 2 minutes ago
Build ZenTerm landing page (ZEN-83)
Checkout: spaceNew branch: nRebase: rCancel: esc
Floats and drawers

Open a tool over your work, then hide it.

Drawers stay hidden until you call them. Open a tool from any workspace, then kill it or leave it running in the background, out of view.

  • Scope a float to a window, a directory, or a tab
  • Any TUI works: lazygit, btop, yazi, ghdash
  • All of it, configurable
zen-termfeature/zen-83…
swift build
Building for debugging…
Build complete! (4.21s)
1ZenTerm2Craftwork
Search commands…
Tools
Open Workspace PickerP
Add Workspace…
Open LazygitL
Drawers
Toggle Bottom DrawerB
Toggle Right Drawer\
Tabs
New TabT
Previous Tab[
⏎ run↑↓ move⎋ close
Palette and config

Make it yours, find it fast.

Change the behavior, appearance, and feel. Every action lives in the command palette for instant access.

  • Floats, workspaces, theme, keybinds, terminal behavior
  • In the app, or in the config file
  • Discovery behind a unified command picker
Neovim

One motion across Neovim splits and ZenTerm panes.

Your Neovim splits and ZenTerm panes become one surface to move through. Bind the same motion shortcuts on both, and zen-navigator.nvim carries you across the seam: reach the edge of your splits and you land in the pane beside them, then back. It's vim-tmux-navigator, without the tmux.

View zen-navigator.nvim
1. Install with lazy.nvim
{ "praxis-labs-io/zen-navigator.nvim", event = "VeryLazy", opts = {} }
2. Hand ZenTerm the chord in your config
keybind = nav_left=ctrl+h
keybind = nav_down=ctrl+j
keybind = nav_up=ctrl+k
keybind = nav_right=ctrl+l
Form meets function

Reach any of it without leaving home row.

An interface built around pixel-perfect functionality.

01

Floating-pane canvas

Terminals sit inset on a padded canvas, rounded frames with room to breathe around each pane.

02

The focus halo

The focused pane carries an accent ring and soft glow, so you can see where the keyboard is pointed.

03

Panes that keep their shells

Split a pane in any direction. Restructure the layout and your running processes stay put.

04

Focus Mode

It fills the window with the focused pane, then restores your layout untouched.

05

Bring your own theme

Aim ZenTerm at any ghostty theme and one portable file colors the entire app: terminal, chrome, tabs, halo.

06

Know when an agent needs you

When ZenTerm sits in the background and an agent stops for input, a system notification pulls you back.

How it compares

Opinionated where it counts.

No knock on the classics. ZenTerm makes different bets, and this is where they show up.

ZenTermiTerm2WarpGhosttyKittyTerminal.app
Floating-pane canvas + focus halo
Hideable drawers, alive when hidden
Summonable tool floats (per-tool, any TUI)PartialPartial
Workspace recipes (layout + processes)PartialPartial
Themes a non-cell UI, not just the gridPartial
In-app configuration
Keyboard-first command palettePartial
No account, no cloudPartial
Open source

Get ZenTerm.

The app is public under the MIT license. Read how any of it works, build it yourself, or open a pull request. Each release has notes on what changed.