Kitty is fast and deeply scriptable, so a common question is whether you can move its tab bar to the side and get a vertical tab list. The answer is that Kitty's tab bar is horizontal only. This article covers what tab_bar_edge actually supports, the workarounds people try, and how Otty — a native macOS terminal — makes a vertical sidebar the default layout.
Kitty's tab bar: top or bottom
Kitty controls tab bar placement with one option in kitty.conf:
# top or bottom; bottom is the default
tab_bar_edge top
The accepted values are top and bottom, with bottom as the default. There is no left or right value, so a side tab bar is not part of Kitty's built-in layout. Placing the tab bar on the side has been an open feature request on Kitty's tracker for years, and it has not shipped as a native option. Kitty does have a full native tab system (plus tiling windows and layouts), so this is purely about the tab strip's orientation, not a lack of tabs.
Workarounds in kitty
- Custom tab bar rendering. Kitty's
tab_bar_style customlets you draw the tab bar with a Pythontab_bar.py. This changes how the bar looks, but it does not move tabs to the side — they stay along the top or bottom edge. - tmux inside kitty. Run tmux and use its status line as a window list, which lives inside one pane.
- OS windows and layouts. Kitty's tiling layouts and multiple OS windows can reduce how much you lean on tabs, but they do not give you a vertical tab index.
None of these is a true vertical tab bar. For that, a terminal that lays tabs out vertically by design is the direct route.
Otty: vertical tabs as the default layout
Otty is a native macOS terminal whose default layout is a vertical tab sidebar on the left of every window. It is on by default and set with a single key:
# Vertical tab sidebar on the left (this is the default)
window-layout = sidebar-left
# A horizontal bar is also available:
# window-layout = tabs-top
# window-layout = tabs-bottom
Since the sidebar is a real layout, it 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 there is only one tab:
# always | default | auto
auto-hide-tabs-panel = auto
From kitty.conf to Otty's config
Both terminals use a plain-text config file, so the mental model carries over. Kitty uses space-separated key value lines (tab_bar_edge top); Otty uses Ghostty-style key = value lines (window-layout = sidebar-left). The difference that matters here is the capability: Otty's sidebar is a built-in vertical layout, while Kitty's tab_bar_edge stops at top and bottom.