OverviewGetting startedInstallationComponentsFoundationsCore and stateTheming and layoutTheming and stylingLayoutForms and accessibilityComposition: data, templates, or bothLayout: side navigationAgent toolingAI toolingChange impactRecipesArchitectureRoadmapHelp and releasesGetting startedInstallationCore and stateGuidesRecipes

Which to use

Data, templates, or a composition document
WhenUse
The structure is known when you write itMarkup: slots and children
A list comes from an API or a CMSA data property, validated by its model
Most entries are data, a few need custom markupData plus slots (hybrid)
An agent or a server describes the interfaceA composition document

Validate external data

TypeScript types do not check JSON at run time. Data properties publish a model that does, and the same model is a JSON Schema:

JavaScript
import '@oddkin/components/define/side-nav';
import { NavigationItemModel } from '@oddkin/components/models';

const nav = document.querySelector('odd-side-nav');
const result = NavigationItemModel.validate(await (await fetch('/nav.json')).json());
if (result.ok) nav.items = result.value;

Replace the array to change entries; never mutate it. The side navigation guide shows data, markup, and hybrid side by side.

Interfaces as data

@oddkin/components/composition validates and renders a composition document: published elements, attributes, and properties only, with actions reported to your handler by name. See Agent tooling and data-composition.md §8.