This page was rewritten from a “Node Decision Guide” that described ten nodes across five
axes and instructed authors to write component source into a database. Both of those are
retired. See the helix for the model that replaced them, and
contributing for how source actually lands.
The decision tree
Is it a CSS value, colour, spacing or design token? → N1 tokens Minerals, semantic colours, spacing, typography, radius, shadow, motion, breakpoints, z-index, icon sizes, touch targets, density. N1 is the only node allowed to define a value. Is it a generic UI element — button, input, card, dialog, segmented control, toolbar? → N2 primitives- Must not import
useNyuchiHarness. - Must carry a
data-slotattribute. - Must compose classes through
cn(). - Must not reference mineral colours directly — semantic tokens only.
- 56px default and 48px minimum touch target.
- Pill-shaped categories (button, input, avatar, badge, toggle) use a
9999radius.
- Name carries a brand prefix —
nyuchi-ormzizi-in the current registry. - Imports
useNyuchiHarnessand destructures{ log, motion, LiveRegion }. - Carries an animation style that respects
prefers-reduced-motion. - ARIA,
data-slot,focus-visible, 48px touch targets.
- Must not render its own buttons, cards or badges — those are N2 and N3.
- Must use semantic CSS variables only (
bg-card,text-foreground,bg-primary). - Must accept children or slots for content.
mzizi-a11y-audit, mzizi-conformity-check, mzizi-api-probe,
mzizi-alert-engine, mzizi-chaos. The shape is a TypeScript module exporting typed
functions plus a React hook for continuous monitoring.
None of the above? It is probably a rung, not a node — and rungs are not components you
place in an application. Self-healing is N9, prose is N10, machine-facing metadata is N11,
agent skills are N12. See the helix.
Where source lives
Component source is files in the repository, undercomponents/registry/n<number>-<name>/ in
mzizi-dev/mzizi-registry, with
registry.json as the manifest. The API reads the manifest and the files on disk.
CSS rules
- All CSS values are defined at N1. Every other node consumes them through
var(). - No raw Tailwind palette classes (
bg-red-500) outside N1. - No inline hex, except documented third-party brand marks.
- N6 pages use semantic CSS variables only.
- Use logical properties (
margin-inline-start,padding-inline-end) rather than physical ones, so right-to-left layouts work without a second stylesheet.
Icon rules
- Import icons through the registry’s
lib/iconsmodule rather than reaching forlucide-reactdirectly — the indirection is what lets the icon library be swapped, and the icon library is one of the three declared fork seams on theswappablestrand. - Size from the token scale rather than ad-hoc values. See icons.
- Mark directional icons with
data-rtl-mirror="true"when they should flip in RTL contexts.