WezTerm is a fast, highly configurable terminal with its own built-in multiplexer, so it is reasonable to expect a vertical or side tab list. The short answer is that WezTerm keeps its tab bar horizontal. Here is exactly what it supports, the closest workarounds, and how Otty — a native macOS terminal — makes a vertical sidebar the default layout.
WezTerm's tab bar: top or bottom only
WezTerm renders its tab bar across the full width of the window, and you can move it between two positions with a single Lua option:
-- top is the default; set to true to move it to the bottom
config.tab_bar_at_bottom = true
That is the full range: top or bottom. There is no option to place the tab bar on the left or right edge, so a true vertical tab list is not part of WezTerm's built-in layout. WezTerm does have a complete native tab and pane system — windows, tabs, and splits with their own scrollback — it just renders the tab strip horizontally.
Workarounds in WezTerm
People get close to a side list in a few ways, with trade-offs:
- tmux inside WezTerm. Run tmux and use its status line to list windows. It gives you a persistent session list, but it lives inside one pane and is styled by tmux.
- Lua tab-bar plugins. Projects like
bar.weztermandwezterm-barrestyle the tab bar, but their position options are still top or bottom — they do not move tabs to the side. - Splits over tabs. Use panes for parallel work and keep tab count low, which lessens the need for a long list without making it vertical.
None of these produces a native vertical tab bar. If that is the specific thing you want, a terminal that lays out tabs vertically by design is simpler.
Otty: vertical tabs as the default layout
Otty is a native macOS terminal whose default layout is a vertical tab sidebar on the left. There is nothing to script — it is on by default and controlled by one key:
# Vertical tab sidebar on the left (this is the default)
window-layout = sidebar-left
# Or a horizontal bar, like WezTerm's:
# window-layout = tabs-top
# window-layout = tabs-bottom
Because it is a first-class layout, the sidebar supports grouping tabs by project or date, custom dividers, drag-to-reorder, tear-off to a new window, merging a tab into a split, and per-tab status badges. You can auto-hide it when only one tab is open:
# always | default | auto
auto-hide-tabs-panel = auto
From WezTerm's Lua to Otty's key = value
WezTerm configures everything through a Lua program (~/.wezterm.lua), which is powerful but means tab placement is code you write and maintain. Otty uses a Ghostty-style key = value format, so the same change is one declarative line (window-layout = sidebar-left) with no scripting. If you prefer programmable config, WezTerm's Lua is a strength; if you want vertical tabs without writing any, Otty gets you there in a line.