Custom components via vendir
A single vendir.yml manifest declaratively pins every custom component, custom Lovelace card, ESPHome library and AppDaemon app your config consumes — directly from upstream GitHub release tags. vendir downloads them into the right subdirectories on demand; Craftama Smart Home parses the same file to populate the catalog.
Minimal example
apiVersion: vendir.k14s.io/v1alpha1
kind: Config
directories:
- path: custom_components
contents:
- path: adaptive_lighting
githubRelease:
slug: basnijholt/adaptive-lighting
tag: 1.27.1
includePaths: ["custom_components/adaptive_lighting/**/*"]
newRootPath: custom_components/adaptive_lighting
- path: frigate
githubRelease:
slug: blakeblackshear/frigate-hass-integration
tag: v5.6.0
includePaths: ["custom_components/frigate/**/*"]
newRootPath: custom_components/frigate
- path: www/custom_lovelace
contents:
- path: button-card
githubRelease:
slug: custom-cards/button-card
tag: v4.1.2
includePaths: ["dist/button-card.js"]
newRootPath: ""
Recognized directory paths
Craftama maps the directory.path of each entry to a component type:
| Path | Component type |
|---|---|
custom_components | Custom Component (also creates a stub kind=custom integration in the catalog) |
www/custom_lovelace | Lovelace Card (also creates a kind=custom Lovelace card row) |
esphome/components · esphome/includes | ESPHome Component |
esphome/packages | ESPHome Package |
themes | Theme |
blueprints | Blueprint |
appdaemon/apps/<name> | AppDaemon App (one per <name>) |
Syncing the catalog
Run on your dev box / CI:
vendir sync --chdir /path/to/your/hass-config
And on Craftama:
python manage.py sync_components \
--vendir /data/import/<repo>-hass-config/vendir.yml
Every custom_components/<name> entry creates or refreshes a HomeAssistantComponent, a per-tag HomeAssistantComponentVersion, and a stub HomeAssistantIntegration(kind=custom, integration_domain=<name>) linked back to the component. The same name across multiple vendir files is merged into one component with multiple version rows.
→ Browse the resulting catalog at /integrations/?kind=custom.