Canonical definition
A Canvas component is a package of:
- A React implementation (
index.jsx)
- Canvas metadata/schema (
component.yml)
- Naming and structure compatibility (
machineName, folder path, story path)
- Canvas-compatible props/slots modeling
All four parts are required for the component to be usable in Drupal Canvas.
Minimum contract (MUST)
Every Canvas component MUST satisfy all checks below:
- Component folder exists at
<components-root>/<machine-name>/ (use the
repository's configured components root, which may be defined in .env)
- React implementation exists at
<components-root>/<machine-name>/index.jsx
- Metadata exists at
<components-root>/<machine-name>/component.yml
component.yml includes required top-level keys (name, machineName,
status, required, props, slots)
- Folder name exactly matches
machineName in component.yml (kebab-case)
- A matching story exists at
<stories-root>/<machine-name>.stories.jsx (use
the repository's configured stories root)
- Props/slots follow Canvas rules (for example, avoid unsupported
array-of-object prop shapes; use slots for repeatable complex content)
If any item is missing, the component is incomplete for Canvas usage.
Naming guidance
Use references/naming.md for naming rules and examples.
Skill coordination
Evaluate using companion skills in this order.
canvas-component-metadata
- Use when creating/changing
component.yml, props/slots, enums, or fixing
prop validation errors.
canvas-component-composability
- Use when designing prop/slot structure, decomposing large components,
deciding props vs slots, or modeling repeatable list/grid content.
canvas-styling-conventions
- Use for all styling work: new components, style props, Tailwind token
usage, CVA variants, class changes, and prop changes that affect styles.
canvas-component-utils
- Use when rendering formatted HTML text or media via
FormattedText and
Image.
canvas-data-fetching
- Use when fetching/rendering Drupal content with JSON:API, SWR, includes,
and filter patterns.
canvas-component-upload
- Use after implementation is complete and validated, when uploading and
recovering from upload failures.
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: acquia-nebula-canvas-component-definition3description: Canonical definition4---56## Canonical definition78A Canvas component is a package of:9101. A React implementation (`index.jsx`)112. Canvas metadata/schema (`component.yml`)123. Naming and structure compatibility (`machineName`, folder path, story path)134. Canvas-compatible props/slots modeling1415All four parts are required for the component to be usable in Drupal Canvas.1617## Minimum contract (MUST)1819Every Canvas component MUST satisfy all checks below:2021- Component folder exists at `<components-root>/<machine-name>/` (use the22 repository's configured components root, which may be defined in `.env`)23- React implementation exists at `<components-root>/<machine-name>/index.jsx`24- Metadata exists at `<components-root>/<machine-name>/component.yml`25- `component.yml` includes required top-level keys (`name`, `machineName`,26 `status`, `required`, `props`, `slots`)27- Folder name exactly matches `machineName` in `component.yml` (kebab-case)28- A matching story exists at `<stories-root>/<machine-name>.stories.jsx` (use29 the repository's configured stories root)30- Props/slots follow Canvas rules (for example, avoid unsupported31 array-of-object prop shapes; use slots for repeatable complex content)3233If any item is missing, the component is incomplete for Canvas usage.3435## Naming guidance3637Use `references/naming.md` for naming rules and examples.3839## Skill coordination4041Evaluate using companion skills in this order.42431. `canvas-component-metadata`44 - Use when creating/changing `component.yml`, props/slots, enums, or fixing45 prop validation errors.462. `canvas-component-composability`47 - Use when designing prop/slot structure, decomposing large components,48 deciding props vs slots, or modeling repeatable list/grid content.493. `canvas-styling-conventions`50 - Use for all styling work: new components, style props, Tailwind token51 usage, CVA variants, class changes, and prop changes that affect styles.524. `canvas-component-utils`53 - Use when rendering formatted HTML text or media via `FormattedText` and54 `Image`.555. `canvas-data-fetching`56 - Use when fetching/rendering Drupal content with JSON:API, SWR, includes,57 and filter patterns.586. `canvas-component-upload`59 - Use after implementation is complete and validated, when uploading and60 recovering from upload failures.6162---63> Converted and distributed by [TomeVault](https://tomevault.io/claim/acquia) — claim your Tome and manage your conversions.64<!-- tomevault:4.0:skill_md:2026-04-11 -->