Spacer
A spacer is an empty, resizable box. Use it to add deliberate whitespace between widgets — for example, to separate a header row from the charts below it, or to push a widget into a particular column. A spacer is only visible while you are editing in the dashboard builder. On the published dashboard (including embedded views) it renders as empty space, so it never draws a card or border for viewers.Divider
A divider is a horizontal separator line that breaks up the layout flow — a lightweight way to signal the boundary between sections of a dashboard. Unlike other widgets, a divider is a fixed height and cannot be resized vertically.Stack
A horizontal stack or vertical stack is a container that groups several widgets and lays them out evenly — side by side in a horizontal stack, or top to bottom in a vertical stack. Use a stack to keep a set of related widgets aligned and sized together, instead of positioning each one on the grid by hand.
Place a stack on the canvas and resize it; its children always share that space evenly:
- In a horizontal stack, each child takes the full height and an equal share of the width.
- In a vertical stack, each child takes the full width and an equal share of the height.
Grid
A grid is a container whose children each hold a fixed cell position and size, unlike a stack’s evenly shared space. A grid is a window into the same uniform cell grid as the board that holds it, so a child keeps the exact footprint you give it — nothing is auto-compacted, swapped, resized, or moved to make room. Dragging, resizing, or dropping a widget onto a cell that’s already occupied is rejected and the widget stays where it was. A grid with no room left for the widget at all is handled differently, as described below.
A new grid is added as a square matching the column count of the board or grid it’s placed in, plus one row for its header — for example, 12×13 on a 12-column dashboard. Inside another grid it is narrowed to that grid’s own width and height, and where no free block of that size is left it is added to the dashboard below instead. Add a widget to it by dragging one in from the canvas, the toolbar, or another container; the widget keeps its size and lands on the cell you drop it on, as long as that cell is free. A widget dropped on a grid with no free block of its size left, whether dragged from the toolbar or moved from elsewhere, is added to the dashboard below instead, with the warning Not enough room in the grid for this widget. You can also click an empty cell of the grid, or drag across several, to add a widget at that spot.
Click the grid’s header to select it, then drag its resize grip to change its size, or open its gear menu for Edit title, Resize, and Delete grid (what that removes). Resizing only crops or restores empty rows and columns: a grid can’t shrink below 2×4 or cut into an occupied cell. To name a grid, click into its header once it’s selected and type a title.
A new grid has no title. Once it holds two or more widgets, Cube titles it after them, for example Sales by region, and the title follows them as they change, at most once a minute. When Cube can’t use AI, for example when your account is out of AI tokens, the grid stays untitled. Type a title to keep it: Cube never changes a title that you gave it. Cube titles only the grids you add in the dashboard builder, so a grid that an AI agent adds keeps its title, and so does a grid that was already on the dashboard before November 2026.
A grid can sit on the canvas, inside another grid, or inside a tab, but not inside a stack (nesting rules).
Tabs
A tabs container shows one widget at a time behind a row of tabs across the top of its card. Use it where a dashboard would otherwise run long: put each view of the data on its own tab and let viewers switch between them, instead of stacking every chart down the page.
Each tab holds one widget — a chart or a container — which fills the tab body: resize the container and the widget resizes with it, and there are no separate resize handles inside a tab. A container in a tab is re-laid-out rather than stretched, so growing a tabs container by two columns gives a grid inside its tab two more columns of cells rather than wider ones.
- Add a chart or container — drag one in from the canvas, the toolbar’s Charts picker or Containers menu, or another container.
- Empty tab — shows a Drag a chart or container here placeholder.
- Second drop — a tab that already holds a chart or container takes no other. One dropped on it, whether dragged from the toolbar or moved from elsewhere, is added to the dashboard below instead, with the warning This tab already holds a widget.
- Anything else — a tab takes no text, AI summary, control, spacer, or divider. That rule is about the widget rather than the tab, so such a widget is added to the dashboard below instead, with the warning Only a chart or a container can be placed in a tab., whether the tab is empty or already full.
- Take one out — remove it through its own menu or delete button, or drag it onto the canvas, where it lands at the size of the tab body it was filling.
- Switch — click a tab, or focus one and press ← / →. The tab you leave selected is the one the published dashboard opens on.
- Add a tab — press +, just after the last tab. The new tab opens empty and becomes the active one.
- Rename — double-click a tab, press F2 with it focused, or use its ⋮ menu → Rename; type the new title in place.
- Reorder — drag a tab along the strip.
- Delete — the tab’s ⋮ menu → Delete tab. A container always keeps at least one tab, so the item is disabled on the last one. Deleting the tab you are reading opens the one after it, or the one before it when it was the last; deleting any other tab leaves you on the tab you were already on.
Tabs on a published dashboard
On a published dashboard — including embedded views — the strip still switches tabs by click or arrow keys, but the editing affordances are gone: no +, no per-tab menu, no rename or reorder. The container opens on the tab that was selected in the dashboard builder when you published, unless the URL names a tab. Selecting a tab in the builder is an edit like any other: it is saved to the dashboard, and you can undo it. A tab you add becomes the selected one, so it is also the one viewers land on. Reordering the strip doesn’t change it. If you delete that tab, the tab after it takes over, or the one before it when it was the last. Switching a tab writes it into the page URL as?tab_<widget_id>=<tab_id>, so a link you copy reopens on the tab you were reading; only the containers you actually switched are written into that link. You can also set that parameter by hand to open a published or embedded dashboard on a particular tab. Downloading the dashboard with the Snapshot layout captures the tab each container is currently showing; the print version prints every tab’s widgets instead.
Nesting containers
Containers nest inside one another up to four levels deep, counted from a container sitting directly on the canvas. The limit is on the chain as a whole, whatever the mix of kinds — a grid inside a grid inside a grid is as deep as a grid holding a tabs container holding a stack. A grid on the canvas, holding a tabs container, whose tab holds a grid, holding another grid, is at the limit: that innermost grid still takes charts and other widgets, but another container dropped into it is added to the dashboard below instead, with the warning Containers can’t be nested more than 4 levels deep. Two placements are never allowed at any depth: a grid or a tabs container inside a stack — a stack has no cells of its own to give them. One dropped on a stack, whether dragged from the toolbar or moved from elsewhere on the dashboard, is added to the dashboard below instead, with the warning A grid can’t be placed inside a stack. or Tabs can’t be placed inside a stack. The reverse is fine, which is why a stack is the one container that goes anywhere.When a container refuses a widget
When a container refuses a widget for one of the reasons below, Cube doesn’t send the widget back. It adds the widget to the dashboard itself, directly below the container, or below the outermost container holding it when the container is nested, and shows a warning that names the reason, followed by Added to the dashboard below it instead. This holds whether you drag the widget in from the toolbar or move it from elsewhere on the dashboard, including out of another container, and wherever over the container you release it.
Where it lands:
- Below the outermost container. When the container that refuses sits inside another one, the widget goes below the container on the dashboard that holds it, never into the outer container. A widget dropped on a full grid inside a tab, for example, lands below the tabs container.
- Aligned to its left edge. The widget starts at that container’s left edge, moved left only as far as it needs to fit within the dashboard’s width. The widgets below move down to make room.
- At the size it gets on the dashboard. A widget from the toolbar gets the size it is added at on the dashboard. A moved widget keeps its own size when it came from the dashboard or a grid, takes the size of the tab body when it came from a tab, and gets its type’s added size when it came from a stack — the same sizes as when you drag it out onto the canvas.
Deleting a container
This holds for every container — stack, grid, and tabs — and for every way of deleting one: the container’s own menu or delete button, and Delete / Backspace on a board selection. Deleting a single tab works the same way: everything in it goes with it, at every depth, and a tab that isn’t empty asks first.Adding a layout widget
In the dashboard builder, containers come from the Containers menu in the toolbar’s Add: group — Tabs, Horizontal stack, Vertical stack, or Grid — and Spacer and Divider from the Other menu beside it. The widget is added to the canvas, where you can drag it into place and resize it (a divider resizes horizontally only). Every one of them is also in the menu that opens when you click or drag across empty cells on the canvas — see Adding a widget at a spot on the canvas.Styling
The spacer and divider follow the dashboard’s widget styling settings:- The divider draws its line using the widget border width, style, and color.
- A spacer picks up the same border and background settings while you are editing, so its bounds are easy to see.