> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aliengh.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Floors, roofs and stairs

> Layered slabs with openings, roofs over any simple outline, stairs fitted between levels, and balustrades.

Each element comes in two parts: a **type** that says how it is built, and the element that places it. Wire the stair's void into the slabs and its edges into the balustrades, and the floor opens up where the stair comes through.

```text theme={null}
slab_types ─> slabs        roof_types ─> roofs
stair_types ─> stairs ─┬─> stairs.voids ─> slabs.openings
                        └─> stairs.edges ─> balustrades.path   (balustrade_types ─> balustrades)
```

<Warning>NCC checks are first-pass design checks. They help you catch problems early. They are not certification.</Warning>

| Component | What it's for |
| - | - |
| [Slab types](#slab-types) (next beta) | A floor build-up: concrete, post-tensioned, hollowcore, CLT, timber joists, waffle, steel deck, or your own layers, with a finish on top and a soffit below. |
| [Slabs](#slabs) (next beta) | Layered slabs at the levels you choose, from closed outlines, with edge offsets, setdowns and openings cut for stair voids and shafts. |
| [Roof types](#roof-types) (next beta) | A roof build-up (metal deck, tiles, slate, membrane, green roof, or your own layers) with the pitches the covering allows. |
| [Roofs](#roofs) (next beta) | Hip, gable, dutch gable, skillion or flat roofs over any simple outline, with eaves and verges, fascias and gutters, and a roof plan with fall arrows. |
| [Stair types](#stair-types) (next beta) | How a stair is built (in-situ or precast concrete, steel stringers, timber), with riser and going targets and the NCC limits for its use. |
| [Stairs](#stairs) (next beta) | Straight, L, U or spiral stairs fitted between two levels, with first-pass NCC checks, a plan symbol, balustrade edges and the void for the floor above. |
| [Balustrade types](#balustrade-types) (next beta) | Frameless glass, glass and posts, bars, rails, wires, sheet or timber, with heights, post spacing, gaps and a handrail, checked against the NCC barrier rules. |
| [Balustrades](#balustrades) (next beta) | Balustrades along slab edges, stair edges or any curve, following a stair's pitch, with plan and elevation linework and first-pass NCC checks. |

***

## Slab types

`slab_types`

<Info>New since 0.02-alpha: arrives in the next beta.</Info>

A floor build-up: concrete, post-tensioned, hollowcore, CLT, timber joists, waffle, steel deck, or your own layers, with a finish on top and a soffit below.

**Cost:** Free.

### Inputs

| Input | Type | On the component | Default | What it does |
| - | - | - | - | - |
| `preset` | Text | Dropdown | `concrete 200` | a common floor build-up, or custom (from layers). One of `concrete 200`, `post-tensioned 250`, `hollowcore 200 + topping`, `CLT 180 + screed`, `timber joist floor`, `waffle 300`, `steel deck composite 150`, `slab on ground 100`, `custom` |
| `name` | Text | Text field | blank | type name (blank: from the preset, finish and soffit) |
| `layers` | list of Text | Text field | blank | layers top -> bottom, thickness in mm: 'screed 50; CLT 180\*; plasterboard ceiling 13' (\* = structure). Replaces the preset's layers when given |
| `finish` | Text | Dropdown | `none` | floor finish laid on top. One of `none`, `polished concrete`, `tiles`, `timber boards`, `carpet`, `vinyl`, `screed`, `raised floor` |
| `soffit` | Text | Dropdown | `as built` | underside: as built keeps the build-up's own; the others replace its ceiling. One of `as built`, `exposed`, `plasterboard`, `suspended ceiling`, `render`, `acoustic panels` |
| `plane` | Plane | Wire | — | where the swatch sits (default: world origin) |
| `save` | Boolean | Button | — | add this type to the Alien library |

### Outputs

| Output | Type | What it gives you |
| - | - | - |
| `slab_type` | Text | slab\_type record for slabs |
| `names` | list of Text | layer names, top first |
| `materials` | list of Text | layer materials |
| `thicknesses` | list of Number | layer thicknesses (m) |
| `total` | Number | overall thickness (m) |
| `swatch` | list of Brep | a stepped sample, one solid per layer |
| `colours` | list of Colour | colour per swatch solid |
| `info` | Text | what happened: a summary, sources and notes |

<AccordionGroup>
  <Accordion title="How it works">
    * Presets: concrete 200, post-tensioned 250, hollowcore 200 + topping, CLT 180 + screed, timber joist floor, waffle 300, steel deck composite 150, slab on ground 100, custom.
    * Layers 'screed 50; CLT 180\*; plasterboard ceiling 13' (mm, cm and m work; \* = structure) replace the preset's.
    * Save adds the type to the library (kind slab\_type).
  </Accordion>
</AccordionGroup>

***

## Slabs

`slabs`

<Info>New since 0.02-alpha: arrives in the next beta.</Info>

Layered slabs at the levels you choose, from closed outlines, with edge offsets, setdowns and openings cut for stair voids and shafts.

**Cost:** Free.

### Inputs

| Input | Type | On the component | Default | What it does |
| - | - | - | - | - |
| `outline` | list of Curve | Select in Rhino | — | slab outlines, closed (a 10 x 7 m sample room when unwired); outlines at several heights each go to the level at their height |
| `levels` | list of Data | Wire | — | level records (sample levels when unwired) |
| `which` | Text | Text field | `floors` | levels to slab: floors (all but the top level, which is the roof's), all, suspended (not the lowest or top), indices from 0 = lowest ('1-3'), names or codes ('L01, Level 2') |
| `slab_type` | list of Data | Wire | — | slab\_types record(s), one per chosen level from the lowest (the last repeats; default: concrete 200) |
| `offset` | Number | Slider -2–5 | `0` | edge offset from the outline (m): + outward (e.g. to the outer face of the walls), - inward |
| `openings` | list of Curve | Select in Rhino | — | holes, closed curves: stair voids (stairs.voids), shafts, atria; ones crossing the edge cut notches |
| `through` | Text | Dropdown | `auto` | which slabs an opening cuts: its level = the level at the curve's height; auto = that, unless it lies at the outline's height (a sketch: then every slab). One of `auto`, `every level`, `its level` |
| `setdown` | Number | Slider 0–1 | `0` | top of slab below the level (m), e.g. 0.05 for a wet area |
| `site` | Data | Wire | — | site record (optional): places the sample outline |

### Outputs

| Output | Type | What it gives you |
| - | - | - |
| `slabs` | list of Text | slab records |
| `solids` | list of Brep | one solid per layer per slab |
| `materials` | list of Text | material per solid |
| `colours` | list of Colour | colour per solid |
| `edges` | list of Curve | slab edges at the top: outer edges and void edges (for balustrades) |
| `plan` | list of Curve | plan linework at the top: slab edges and a cross in each void |
| `area` | list of Number | net area of each slab (m2) |
| `info` | Text | what happened: a summary, sources and notes |

<AccordionGroup>
  <Accordion title="How it works">
    * which: floors (all but the top level, the roof's) | all | suspended | indices '1-3' | names or codes.
    * Edge offset, setdown, one slab type per chosen level (the last repeats); outlines at several heights go to their own level.
    * Openings cut at their own level (stair voids) or through every slab when sketched at the outline's height (through = auto); overlapping openings merge, crossing ones notch.
    * edges output (outer and void edges at the top) feeds balustrades; area is net m2.
  </Accordion>
</AccordionGroup>

***

## Roof types

`roof_types`

<Info>New since 0.02-alpha: arrives in the next beta.</Info>

A roof build-up (metal deck, tiles, slate, membrane, green roof, or your own layers) with the pitches the covering allows.

**Cost:** Free.

### Inputs

| Input | Type | On the component | Default | What it does |
| - | - | - | - | - |
| `preset` | Text | Dropdown | `metal deck` | a common roof build-up, or custom (from layers). One of `metal deck`, `metal deck low pitch`, `concrete tile`, `terracotta tile`, `slate`, `membrane on concrete`, `green roof`, `custom` |
| `name` | Text | Text field | blank | type name (blank: the preset's) |
| `layers` | list of Text | Text field | blank | layers top -> bottom, thickness in mm: 'metal roofing 20; battens 40; insulation 55; rafters 140\*' (\* = structure). Replaces the preset's layers when given |
| `colour` | Text | Dropdown | `as built` | colour of the roofing (the top layer). One of `as built`, `charcoal`, `dark grey`, `mid grey`, `light grey`, `off-white`, `red`, `terracotta`, `green`, `blue` |
| `plane` | Plane | Wire | — | where the swatch sits (default: world origin) |
| `save` | Boolean | Button | — | add this type to the Alien library |

### Outputs

| Output | Type | What it gives you |
| - | - | - |
| `roof_type` | Text | roof\_type record for roofs |
| `names` | list of Text | layer names, top first |
| `materials` | list of Text | layer materials |
| `thicknesses` | list of Number | layer thicknesses (m) |
| `total` | Number | overall thickness, square to the roof (m) |
| `swatch` | list of Brep | a stepped sample, one solid per layer |
| `colours` | list of Colour | colour per swatch solid |
| `info` | Text | what happened: a summary, sources and notes |

<AccordionGroup>
  <Accordion title="How it works">
    * Presets: metal deck, metal deck low pitch, concrete tile, terracotta tile, slate, membrane on concrete, green roof, custom.
    * roofs warns when the pitch is outside the covering's range.
    * Save adds the type to the library (kind roof\_type).
  </Accordion>
</AccordionGroup>

***

## Roofs

`roofs`

<Info>New since 0.02-alpha: arrives in the next beta.</Info>

Hip, gable, dutch gable, skillion or flat roofs over any simple outline, with eaves and verges, fascias and gutters, and a roof plan with fall arrows.

**Cost:** Free.

### Inputs

| Input | Type | On the component | Default | What it does |
| - | - | - | - | - |
| `outline` | list of Curve | Select in Rhino | — | wall lines to roof over, closed, one roof each (a 10 x 7 m sample room when unwired) |
| `levels` | list of Data | Wire | — | level records (sample levels when unwired) |
| `level` | Text | Text field | blank | level the roof sits on (the top of the walls): name, code or index (blank: the top level) |
| `form` | Text | Dropdown | `hip` | roof form. One of `hip`, `gable`, `dutch gable`, `skillion`, `flat` |
| `pitch` | Number | Slider 0–75 | `22.5` | pitch (degrees); flat roofs: the fall written on the plan (5 or less) |
| `overhang` | Number | Slider 0–3 | `0.6` | eaves overhang past the wall line (m) |
| `gable_overhang` | Number | Slider 0–3 | `0.3` | verge overhang at gable ends and skillion sides (m) |
| `ridge` | Text | Dropdown | `auto` | ridge direction for gable, dutch gable, skillion and flat: auto = along the long side; skillion and flat fall across it. One of `auto`, `x`, `y` |
| `flip` | Boolean | Switch | off | skillion and flat: fall the other way |
| `fascia` | Number | Slider 0–0.6 | `0.2` | fascia and barge board depth (m), with gutters on the eaves; 0 = none |
| `roof_type` | Data | Wire | — | roof\_types record (default: metal deck) |
| `site` | Data | Wire | — | site record (optional): x/y and placement, north for face aspects, scale for plan text |

### Outputs

| Output | Type | What it gives you |
| - | - | - |
| `roofs` | list of Text | roof records |
| `solids` | list of Brep | one solid per layer per roof part, then fascias, barge boards, gutters and gablets |
| `materials` | list of Text | material per solid |
| `colours` | list of Colour | colour per solid |
| `ridges` | list of Curve | ridge lines (and a skillion's high edge) |
| `hips` | list of Curve | hip lines |
| `valleys` | list of Curve | valley lines |
| `eaves` | list of Curve | roof edges: eaves, verges (gable rakes) and gablet bases |
| `plan` | list of Curve | roof plan: eaves outline, ridges, hips, valleys, the wall line dashed, fall arrows with the pitch |
| `area` | list of Number | area of each roof on the slope (m2) |
| `info` | Text | what happened: a summary, sources and notes |

<AccordionGroup>
  <Accordion title="How it works">
    * Hip, gable and dutch gable use a weighted straight skeleton, so L, T, U, concave and rotated outlines work; flat and skillion keep exact curves.
    * pitch, eaves overhang, gable overhang, ridge direction (auto = along the long side, x, y), flip for skillion/flat falls, fascia depth.
    * Outputs: solids (one per layer per roof part, then fascias, barges, gutters, gablets), ridges, hips, valleys, eaves, a roof plan with the dashed wall line and fall arrows, roof records with faces (pitch, aspect from true north, area).
  </Accordion>
</AccordionGroup>

***

## Stair types

`stair_types`

<Info>New since 0.02-alpha: arrives in the next beta.</Info>

How a stair is built (in-situ or precast concrete, steel stringers, timber), with riser and going targets and the NCC limits for its use.

**Cost:** Free.

### Inputs

| Input | Type | On the component | Default | What it does |
| - | - | - | - | - |
| `construction` | Text | Dropdown | `concrete in-situ` | how the stair is built. One of `concrete in-situ`, `steel stringers`, `timber`, `precast` |
| `use` | Text | Dropdown | `public / commercial` | sets the NCC limits: public / commercial (Vol 1) or private / domestic (Vol 2). One of `public / commercial`, `private / domestic` |
| `name` | Text | Text field | blank | type name (blank: from the construction and sizes) |
| `riser` | Number | Slider 100–250 | `175` | target riser (mm): each stair rounds it to a whole number of risers; NCC 115–190 |
| `going` | Number | Slider 150–450 | `280` | going (mm), nosing to nosing; NCC 250–355 public, 240–355 private |
| `tread` | Number | Slider 5–100 | `40` | tread thickness (mm): steel and timber |
| `nosing` | Number | Slider 0–50 | `20` | nosing projection (mm): steel and timber |
| `waist` | Number | Slider 80–400 | `175` | waist and landing slab thickness (mm): concrete and precast |
| `stringer` | Text | Text field | blank | stringer depth x thickness in mm, e.g. '250x12' (blank: steel 250x12 plate, timber 290x45) |
| `risers` | Text | Dropdown | `closed` | riser boards (steel and timber; concrete steps are always closed). One of `closed`, `open` |
| `plane` | Plane | Wire | — | where the swatch sits (default: world origin) |
| `save` | Boolean | Button | — | add this type to the Alien library |

### Outputs

| Output | Type | What it gives you |
| - | - | - |
| `stair_type` | Text | stair\_type record for stairs |
| `swatch` | list of Brep | four steps and a landing edge, 1 m wide |
| `colours` | list of Colour | colour per swatch solid |
| `section` | list of Curve | the swatch cut through its middle (stringers seen beyond) |
| `info` | Text | what happened: a summary, sources and notes |

<AccordionGroup>
  <Accordion title="How it works">
    * Construction: concrete in-situ, steel stringers, timber, precast; riser and going targets (mm), tread, nosing, waist, stringer, open or closed risers.
    * NCC first-pass limits: risers 115-190 mm, goings 250-355 public / 240-355 private, 2R+G 550-700, 2-18 risers a flight, landings >= 750 mm, open-riser gaps \<= 125 mm.
    * Save adds the type to the library (kind stair\_type).
  </Accordion>
</AccordionGroup>

***

## Stairs

`stairs`

<Info>New since 0.02-alpha: arrives in the next beta.</Info>

Straight, L, U or spiral stairs fitted between two levels, with first-pass NCC checks, a plan symbol, balustrade edges and the void for the floor above.

**Cost:** Free.

### Inputs

| Input | Type | On the component | Default | What it does |
| - | - | - | - | - |
| `levels` | list of Data | Wire | — | level records (sample: 3 storeys at 3.2 m) |
| `from_level` | Text | Text field | blank | lower level: name, code or index (blank: the lowest) |
| `to_level` | Text | Text field | blank | upper level: name, code or index (blank: the level above) |
| `height` | Number | Slider 0–12 | `0` | floor-to-floor height (m); 0 = from the levels |
| `base` | list of Curve | Select in Rhino | — | base lines: each one's start is the foot of a stair, its direction the way up (sample: a line along X at the site origin) |
| `align` | Text | Dropdown | `centre` | where the base line runs across the stair (looking up). One of `centre`, `left edge`, `right edge` |
| `shape` | Text | Dropdown | `straight` | stair shape. One of `straight`, `L (quarter landing)`, `U (half landing)`, `spiral` |
| `turn` | Text | Dropdown | `left` | L, U and spiral: the way the stair turns going up. One of `left`, `right` |
| `width` | Number | Slider 0.5–4 | `1.2` | stair width (m): tread length; stringers sit outside it |
| `stair_type` | Data | Wire | — | stair\_type record from stair\_types (default: concrete in-situ, public, 175/280) |
| `landing` | Number | Slider 0–5 | `0` | landing depth (m) in the walking direction; 0 = the stair width (at least 0.75) |
| `split` | Integer | Slider 0–40 | `0` | L and U: risers in the first flight (0 = half) |
| `well` | Number | Slider 0–2 | `0.1` | U: gap between the two flights; spiral: centre column radius (m) |
| `sides` | Text | Dropdown | `both` | which stair sides get balustrade edges (the upper floor's void edges always do). One of `both`, `inner`, `outer`, `none` |
| `cut` | Number | Slider 0.2–3 | `1` | plan cut height above the lower level (m): treads above it are dashed |
| `site` | Data | Wire | — | site record (optional): drawing scale for the plan symbols; places the sample base line |

### Outputs

| Output | Type | What it gives you |
| - | - | - |
| `stairs` | list of Text | stair records |
| `solids` | list of Brep | flights (waist slab, or treads, risers and stringers), landings |
| `colours` | list of Colour | colour per solid |
| `plan` | list of Curve | plan at the lower level: treads, walking line with UP and arrow, cut line with break; above the cut dashed |
| `edges` | list of Curve | balustrade lines: open stair sides on the nosing line (flat on landings), and the upper floor's void edges; the walkable side is on each curve's left |
| `voids` | list of Curve | floor opening at the upper level, closed: for the Slabs component's openings |
| `risers` | list of Integer | risers per stair |
| `riser` | list of Number | riser height per stair (mm) |
| `going` | list of Number | going per stair (mm) |
| `info` | Text | what happened: a summary, sources and notes |

<AccordionGroup>
  <Accordion title="How it works">
    * Risers are fitted to the floor-to-floor height; flights over 18 risers get landings; L and U split at the turn.
    * Plan: treads, walking line with UP and arrow, cut line with a break, dashed above the cut.
    * edges run on the nosing line (flat on landings) with the walkable side on their left; voids is the upper-floor opening for slabs.openings.
    * Checks per rule in the records and info (first-pass, not certification).
  </Accordion>
</AccordionGroup>

***

## Balustrade types

`balustrade_types`

<Info>New since 0.02-alpha: arrives in the next beta.</Info>

Frameless glass, glass and posts, bars, rails, wires, sheet or timber, with heights, post spacing, gaps and a handrail, checked against the NCC barrier rules.

**Cost:** Free.

### Inputs

| Input | Type | On the component | Default | What it does |
| - | - | - | - | - |
| `style` | Text | Dropdown | `glass and posts` | infill. One of `frameless glass`, `glass and posts`, `vertical bars`, `horizontal rails`, `wires`, `solid sheet`, `timber` |
| `name` | Text | Text field | blank | type name (blank: from the style and height) |
| `height` | Number | Slider 0.5–2 | `1` | height to the top on floors and landings (m); NCC at least 1.0 |
| `stair_height` | Number | Slider 0–2 | `0` | height above the nosing line along stair flights (m); NCC at least 0.865; 0 = as height |
| `posts` | Number | Slider 0.3–3 | `1.2` | post spacing (m); frameless glass: the pane width |
| `post` | Number | Slider 0–200 | `0` | post size (mm), square; 0 = by style (50, timber 90) |
| `gap` | Number | Slider 10–300 | `100` | clear gap between bars, rails or wires (mm); NCC at most 125 |
| `bottom` | Number | Slider 0–300 | `50` | gap under the infill (mm); NCC at most 125 |
| `handrail` | Text | Dropdown | `by style` | handrail on top. One of `by style`, `round 50`, `round 42`, `square 50`, `rect 65x20`, `timber 70x42`, `none` |
| `infill` | Number | Slider 0–60 | `0` | glass or sheet thickness, bar or rail size (mm); 0 = by style |
| `plane` | Plane | Wire | — | where the swatch sits (default: world origin) |
| `save` | Boolean | Button | — | add this type to the Alien library |

### Outputs

| Output | Type | What it gives you |
| - | - | - |
| `balustrade_type` | Text | balustrade\_type record for balustrades |
| `swatch` | list of Brep | a sample run: 1.2 m on a floor, then up a stair pitch |
| `colours` | list of Colour | colour per swatch solid |
| `elevation` | list of Curve | the swatch's front outlines |
| `info` | Text | what happened: a summary, sources and notes |

<AccordionGroup>
  <Accordion title="How it works">
    * Styles: frameless glass, glass and posts, vertical bars, horizontal rails, wires, solid sheet, timber.
    * Height on floors (>= 1.0 m) and above the nosing line on stairs (>= 865 mm), openings \<= 125 mm.
    * Save adds the type to the library (kind balustrade\_type).
  </Accordion>
</AccordionGroup>

***

## Balustrades

`balustrades`

<Info>New since 0.02-alpha: arrives in the next beta.</Info>

Balustrades along slab edges, stair edges or any curve, following a stair's pitch, with plan and elevation linework and first-pass NCC checks.

**Cost:** Free.

### Inputs

| Input | Type | On the component | Default | What it does |
| - | - | - | - | - |
| `path` | list of Curve | Select in Rhino | — | lines to guard: slab edges, stairs' edges (they keep their slope), polylines, arcs, closed outlines (a sample when unwired) |
| `balustrade_type` | Data | Wire | — | balustrade\_type record from balustrade\_types (default: glass and posts, 1.0 m) |
| `base` | Text | Text field | blank | blank: follow each path's own z (stair edges); else a level name, code or index, or an elevation like 3.2 (m) |
| `levels` | list of Data | Wire | — | level records, for a level named in base (sample levels when unwired) |
| `height` | Number | Slider 0–2 | `0` | height override (m), floors and flights alike; 0 = the type's |
| `offset` | Number | Slider -1–1 | `0` | move off the path (m): + = to its left (stairs' edges: onto the stair), inside a closed outline |
| `end_posts` | Boolean | Switch | on | posts at the ends of open paths |
| `fall` | Number | Slider 0–100 | `0` | drop beside the balustrade (m), for the NCC climbing check on rails and wires; 0 = not checked |
| `site` | Data | Wire | — | site record (optional): places the sample |

### Outputs

| Output | Type | What it gives you |
| - | - | - |
| `balustrades` | list of Text | balustrade records |
| `solids` | list of Brep | posts, infill (glass, bars, rails, wires, sheet), handrails |
| `colours` | list of Colour | colour per solid |
| `plan` | list of Curve | plan: posts and the balustrade's faces, at each balustrade's lowest point |
| `elevation` | list of Curve | front outlines of every part, in place (seen square-on they are the elevation) |
| `handrail` | list of Curve | handrail centrelines |
| `info` | Text | what happened: a summary, sources and notes |

<AccordionGroup>
  <Accordion title="How it works">
    * Follows each path's own z (handrails parallel to the stair pitch) or sits on a level or elevation.
    * Posts at corners and at the spacing; curves faceted; offset to the path's left (onto the floor or stair).
    * fall enables the climbable-rail check (falls over 4 m).
  </Accordion>
</AccordionGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.