--- title: Layout description: Guidelines to create consistent layouts across Studio pages using a set of page components. --- Build every Studio page with [PageContainer](../fragments/page-container), optional page chrome ([Page Breadcrumbs](../fragments/page-breadcrumbs), [Page Nav](../fragments/page-nav)), [PageHeader](../fragments/page-header) when you need a title block, and [PageSection](../fragments/page-section). These components handle width, spacing, and content structure so pages feel consistent across the app. ## Core rules
1. Breadcrumbs first. Every page starts with a bordered breadcrumb row (`PageBreadcrumbs`) at the top. Place it as a sibling above `PageHeader` or page content — not inside `PageHeader`. 2. Sub navigation below breadcrumbs. When a page has tabs or section links, place `PageNav` directly under the breadcrumb row, aligned top left. Also a sibling — not inside `PageHeader`. 3. Parent pages with sub navigation stay compact. The parent omits `PageHeader` (no title or description). Breadcrumbs name the parent; child routes render their own `PageHeader` with meta. 4. Pick width by content, not page type. | Width | Use when | | --------- | ------------------------------------------------------------------------------------------ | | `small` | Settings, forms, and focused configuration (including child pages under a settings parent) | | `default` | Lists, tables, and detail pages that stay readable without full viewport width | | `full` | Dense horizontal content: logs, code, editors, charts, or tables that need the viewport | A route can mix widths across child pages (for example, a full-width parent with a `small` settings tab and a `full` logs tab). 5. Page header meta is optional. Add `PageHeader` with `PageHeaderMeta` (icon, title, description, aside) only when that context helps the user. Skip it when the work area is self-explanatory (for example, logs with filters and a table). 6. Put actions where the user is already looking. | Situation | Where actions go | | -------------------------------------------------- | ------------------------------------------------------------ | | Parent with sub navigation | `PageBreadcrumbsActions` on the breadcrumb row | | Child page with `PageHeaderMeta` and no filter row | `PageHeaderAside` | | Table or list with a filter/search row | Right side of that row (not header aside) | | Simple list with no filter row | `PageHeaderAside` or `PageSectionAside` | | Compact chrome, no meta (for example logs) | Breadcrumb row **or** in-page controls (filter bar, toolbar) | 7. Section titles for multiple sections. When a page has no `PageHeader` title and the content is split into multiple `PageSection`s, use `PageSectionTitle` and `PageSectionDescription` to label each section (see [Page Section](../fragments/page-section)).
## Patterns ### Settings Single-column configuration. Use `size="small"` or `size="default"` for both header and container. Group fields with `PageSection`. Page sub navigation sits below page breadcrumbs. ### List Collections of objects (tables, triggers, functions). Default to `size="default"`; use `full` when columns need the width. ### Detail Dense content split into sections. Use `size="default"` and `PageSection` with `orientation="horizontal"` where a summary sits beside content. ### Full width Logs, code, editors, and other dense views. Use `size="full"`. Keep the top compact: breadcrumbs, optional breadcrumb-row actions, then sub navigation when needed. Omit `PageHeader` when there is no title block. Page-level actions live on the breadcrumb row or in the content (filter bar, toolbar). ### Parent with mixed child widths Some parents are full width because a child needs it. The parent chrome stays compact (breadcrumbs, actions, sub navigation). Each child picks its own container width: overview charts in `full`, settings in `small`, logs and code in `full` without extra outer padding. ## Components - **[Page Breadcrumbs](../fragments/page-breadcrumbs)** — full-width breadcrumb row - **[Page Nav](../fragments/page-nav)** — full-width sub-navigation row - **[Page Container](../fragments/page-container)** — max-width and padding (`small`, `default`, `full`, …) - **[Page Header](../fragments/page-header)** — optional title block (meta, icon, aside) - **[Page Section](../fragments/page-section)** — titled content blocks and section-level actions