Zellij plugin

zellij-vtabs

A vertical, grouped, collapsible tab sidebar for Zellij — with live attention indicators driven by Claude Code.

Prebuilt .wasm · verified on Zellij 0.43.10.44.3 · MIT

zellij · vtabs
~/work/api ❯ cargo test test result: ok. 20 passed ~/work/api ❯ ▌
This is a personal tool — built to support my own workflow of running Claude Code inside Zellij, not a general-purpose plugin. It's published for reuse across my machines, not to work out-of-the-box for everyone. No stability guarantees and no issue tracker. Feel free to read, fork, and adapt paths and conventions to your own environment.

What it does

Zellij has no native vertical tabs. This renders a left sidebar that shows tabs as a collapsible tree grouped by name prefix, so many tabs stay organized at a glance.

▼ work (2)

Grouped tree

A tab named group:label lands under group; no colon means General. Groups collapse and expand.

↑ ↓

Reorder & navigate

jk/arrows to move, Enter to switch or toggle. ⇧J⇧K reorders groups and tabs. Mouse works too.

r

Inline rename

r on a group renames the group and re-prefixes its tabs; on a tab it renames the label. Persists across restarts.

Attention icons

when Claude needs input, when it finishes — cleared when you focus the tab. Rolls up to collapsed headers.

Working spinner

An animated indicator while Claude is running in a tab. Configurable frames — preview the sets ↗.

/ →

Auto-grouping

Opt-in: name default tabs from their directory (repo:branch, worktree-aware) by configurable rules. Your manual names always win.

Quick start — zero install

Zellij can load the plugin straight from the release URL. No download, no Rust toolchain. Two files and you're running.

Save a layout

Put this in try-vtabs.kdl — it loads the plugin from the latest release.

layout {
    pane split_direction="vertical" {
        pane size=28 borderless=true {
            plugin location="https://github.com/otezz/zellij-vtabs/releases/latest/download/zellij-vtabs.wasm"
        }
        pane
    }
    pane size=1 borderless=true {
        plugin location="zellij:status-bar"
    }
}

Pre-seed permissions

Append to ~/.cache/zellij/permissions.kdl — the in-pane grant prompt doesn't render usably in a 28-column sidebar.

"https://github.com/otezz/zellij-vtabs/releases/latest/download/zellij-vtabs.wasm" {
    ReadApplicationState
    ChangeApplicationState
    ReadCliPipes
}

Run it

Start a session with the layout, then name a couple of tabs group:label to see the tree.

zellij --new-session-with-layout ./try-vtabs.kdl

Want it as your default sidebar, auto-grouping, and the Claude Code attention/working hooks? The README has the full install, config reference, and hook setup.