Grid
Introduction
Section titled “Introduction”Grid places child components in a CSS grid with a fixed column count. Use it for two-up field pairs, metric tiles, or any mixed controls that should align in columns. Nest grids inside sections or at the top of a schema.
from almasix.orbit.schemas import Gridfrom almasix.orbit.forms import TextInput
Grid.make() .columns(2) .schema([ TextInput.make("col_a"), TextInput.make("col_b"), ])

Columns
Section titled “Columns”.columns(n) sets the track count. The default is 2 when you don’t call it:
Grid.make().columns(1).schema([...]) # single column stackGrid.make().columns(3).schema([...]) # three-up metrics / fieldsRendered chrome uses or-grid or-grid-cols-N.
Grid container
Section titled “Grid container”.grid_container() adds or-grid-container when the grid should establish its own containing block for nested column spans:
Grid.make() .columns(3) .grid_container() .schema([...])Dense and gap
Section titled “Dense and gap”Shared layout helpers tighten or remove gutters — same API as Flex and other layouts:
Grid.make().columns(2).dense().gap(False).schema([...])Grid.make().columns(2).gap("sm").schema([...])Also available: .defer_loading() for async chrome — see Layouts and Schemas overview.
Composition tip
Section titled “Composition tip”Pair a grid with a section when you want a titled block of columns:
from almasix.orbit.schemas import Section, Gridfrom almasix.orbit.forms import TextInput, Select
Section.make("contact").heading("Contact").schema([ Grid.make().columns(2).schema([ TextInput.make("email"), Select.make("preferred").options({"email": "Email", "phone": "Phone"}), ]),])

API reference
Section titled “API reference”| Method | Role |
|---|---|
.columns |
Number of columns |
.grid_container |
Add container chrome class |
.schema |
Child components |
.dense / .gap / .defer_loading |
Shared layout helpers |