Everything else is optional. Add section components only when the page needs them.
minimal.yaml
version: 1
page:
name: Northstar
title: Northstar — Ship with confidence
description: Release software without release-day surprises.
hero:
heading: Know what breaks before you ship.
text: A focused explanation of the product and its value.
actions:
- label: Start free
href: "#start"
sections:
- type: cta
id: start
heading: Ship your next release calmly.
action:
label: Contact us
href: mailto:hello@example.com
— Grammar before styling
Composition rules
01
Use YAML 1.2 with one document and two-space indentation.
02
Start every file with version: 1. Unknown keys are errors.
03
Quote same-page fragments such as "#pricing"; an unquoted # starts a comment.
04
Section order in the sections array is the rendered page order.
05
Section ids must be unique lowercase slugs and make fragment links possible.
06
Aliases, merge keys, custom tags, raw HTML, CSS, Markdown, and scripts are rejected.
01 Global blocks
Document shell
One page identity, one hero, and optional global presentation blocks.
01.01
design
optional
Selects the fixed art direction and its single safe color input.
preset
editorial
Fixed layout preset. Editorial is the only v1 value.
accent
#RRGGBB
Six-digit hexadecimal accent color.
design.yaml
design:
preset: editorial
accent: "#E94F37"
01.02
page
required
Defines identity, browser metadata, language, and the canonical URL.
namerequired
string
Site or product name. Maximum 80 characters.
titlerequired
string
Browser and search title. Maximum 160 characters.
description
string
Search description. Maximum 2,000 characters.
language
language tag
BCP 47 language tag; defaults to en.
canonical
HTTPS URL
Absolute canonical URL without credentials.
page.yaml
page:
name: Northstar
title: Northstar — Ship with confidence
description: Release software without release-day surprises.
language: en
canonical: https://northstar.example
01.03
navigation
optional
A compact link list plus one emphasized destination.
The page promise: one heading, supporting copy, actions, and optional image.
eyebrow
string
Short context label. Maximum 80 characters.
headingrequired
string
The page’s single h1. Maximum 160 characters.
text
string
Supporting prose. Maximum 2,000 characters.
actions
action[]
Up to 2 hero action objects.
image
image
One HTTPS raster image with meaningful alt text.
hero.yaml
hero:
eyebrow: Release intelligence
heading: Know what breaks before you ship.
text: A focused explanation of the product and its value.
actions:
- label: Start free
href: "#start"
style: primary
01.05
footer
optional
Closing text and a short list of policy or contact links.
Place up to 12 typed components inside sections. Array order is page order.
02.01
features
repeatable
A heading and up to 6 icon-supported product benefits.
typerequired
features
Selects this component.
id
slug
Unique fragment target.
heading
string
Section heading. Maximum 160 characters.
text
string
Section introduction. Maximum 2,000 characters.
itemsrequired
feature[]
Up to 6 items with title, text, and optional icon.
features.yaml
- type: features
id: features
heading: Built for calm releases
text: Everything needed between merge and production.
items:
- icon: shield
title: Risk detection
text: Find dangerous changes before deployment.
02.02
stats
repeatable
A compact proof band containing up to 6 value-and-label pairs.
Additive optional fields may remain in v1. Renaming, removing, or changing meaning requires v2. New section types ship with schema, renderer, documentation, accessibility review, and security fixtures together.