Skip navigation

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:

PathComponent type
custom_componentsCustom Component (also creates a stub kind=custom integration in the catalog)
www/custom_lovelaceLovelace Card (also creates a kind=custom Lovelace card row)
esphome/components · esphome/includesESPHome Component
esphome/packagesESPHome Package
themesTheme
blueprintsBlueprint
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.

theme