Layouts🔗

Every workspace in Triad picks its own layout. Switch one without touching the others. Change layout mid-session with a binding or triad msg.

Selecting a Layout🔗

Define the cycle for switch-layout and add per-layout bindings in your config:

layout {
  layout-cycle "scroller" "tile" "monocle"
}

bindings {
  bind "Super+n"       "switch-layout"
  bind "Super+d"       "tile"
  bind "Super+g"       "grid"
  bind "Super+Ctrl+x"  "monocle"
}

Or switch at any time via IPC:

triad msg scroller
triad msg tile
triad msg switch-layout

Short layout IDs work in binds and IPC commands for Triad's built-in, bundled, and native layouts. Use names like notion, dwindle, center-tile, spiral, or i3 directly.


Scrolling🔗

Windows sit on an infinite horizontal or vertical strip. Navigation is scrolling, not switching.

LayoutDescriptionModel
scrollerInfinite horizontal strip. Windows scroll left and right past the screen edge.Horizontal strip
vertical-scrollerSame as scroller, oriented vertically.Vertical strip

Algorithmic🔗

The layout algorithm places all windows automatically. Windows reflow when others open or close. No manual splitting required.

LayoutDescriptionModel
tileOne master window takes a fixed portion; the rest stack on the other side.Master-stack
vertical-tileMaster on top, stack below. Portrait orientation of tile.Vertical master-stack
right-tileMaster on right, stack on left.Mirrored master-stack
center-tileMaster centered; stack windows flank left and right.Centered master-stack
gridWindows fill equal-area cells. Adapts as windows open and close.Grid
vertical-gridGrid oriented vertically.Vertical grid
monocleOne window fills the screen. Cycle through the rest.Single-window view
deckMaster visible; others stacked behind as layers.Master deck
vertical-deckDeck oriented vertically.Vertical deck
spiralEach new window takes a ratio of the remaining space, spiraling inward.Recursive split
masterSingle master with a configurable number of stack windows.Master-stack
tgmixShows windows from multiple tags under one layout.Tag-mixed

BSP🔗

Each new window bisects the focused region. The tree grows automatically as windows open; you resize and rebalance after the fact.

LayoutDescriptionModel
bspNew windows split the focused leaf automatically. Janet drives the geometry policy.Automatic BSP
bsp-treePersistent binary partition tree. Triad owns insertion, preselection, directional focus, resize, and balance.Native BSP
dwindleNew windows split the focused container and spiral inward.Focused split

Frame-tree🔗

Persistent named frames exist independently of their contents. Build the frame structure first; windows fill it. Frames survive when empty.

LayoutDescriptionModel
notionJanet geometry policy over Triad-owned persistent frames and tabs.Frame policy
frame-treePersistent leaf frames hold tabs. Split nodes divide space. Empty frames survive.Native frame tree

Split-tree🔗

You build the layout manually by splitting containers. Each container runs in split, tabbed, or stacked mode independently. The tree persists across window changes.

LayoutDescriptionModel
i3Persistent split-tree container model. Triad owns splits, insertion, movement, resize, and restore.Native split tree
tabbedWindows stacked as tabs inside a split-tree container.Tabbed container
stackedWindows stacked vertically with visible titlebars inside a split-tree container.Stacked container

Custom Layouts🔗

Need something Triad doesn't ship? Write it in Janet. Any layout you define becomes a first-class layout ID — usable in layout-cycle, workspace rules, and IPC commands. See Janet Scripting to get started.


Layout Switch Toast🔗

Triad can show a native centered toast whenever you change the layout of the active workspace.

SettingFormatDescription
enabledBoolToggle the layout switch toast.
timeout-msmsHow long the toast remains visible.
ring-colorColorColor of the layout indicator ring.

Example:

layout-switch-toast {
  enabled #true
  timeout-ms 1500
  ring-color "#7fc8ff"
}