Integration Manifest
Every Home Assistant integration requires amanifest.json file that describes its metadata, dependencies, and capabilities. This file is essential for integration discovery and loading.
Basic Structure
The manifest file must be namedmanifest.json and placed in the root of your integration directory:
Required Fields
domain
The unique identifier for your integration:The domain must match your integration’s directory name and be lowercase with underscores only.
name
The human-readable name displayed in the UI:codeowners
GitHub usernames responsible for maintaining the integration:Code owners are automatically notified of PRs affecting their integration.
documentation
URL to the integration’s documentation:Integration Metadata
integration_type
Defines the integration’s purpose:loader.py:250:
- entity - Provides entity platforms
- device - Represents physical devices
- hardware - Interfaces with hardware
- helper - Utility functions
- hub - Central hub connection (default)
- service - External service connectivity
- system - Core functionality
- virtual - Virtual/computed entities
iot_class
Describes how the integration communicates:local_push- Device pushes updates locally (best)local_polling- Polls device locallycloud_push- Device pushes updates via cloudcloud_polling- Polls cloud APIcalculated- Calculated values, no external source
quality_scale
Indicates code quality level:- platinum - Highest quality, comprehensive tests, excellent code
- gold - High quality, good test coverage
- silver - Good quality, basic tests
- internal - Core Home Assistant integrations
- custom - Custom integrations (automatic for custom components)
Dependencies
dependencies
Integrations that must be loaded first:homeassistant/components/mqtt/manifest.json:7):
after_dependencies
Integrations that should load first if present (soft dependency):homeassistant/components/mqtt/manifest.json:4):
Unlike
dependencies, these are optional. Your integration loads even if they’re missing.Python Requirements
requirements
Python packages required by your integration:homeassistant/components/mqtt/manifest.json:12):
Always pin exact versions to ensure reproducible installs.
Configuration
config_flow
Enables UI-based configuration:config_flow.py.
From MQTT (homeassistant/components/mqtt/manifest.json:6):
Config Flow Implementation
Learn how to implement config_flow.py
single_config_entry
Restricts integration to one configuration entry:homeassistant/components/mqtt/manifest.json:13):
Discovery
These fields enable automatic discovery of devices:zeroconf
Zeroconf/mDNS service types to watch:ssdp
SSDP discovery patterns:bluetooth
Bluetooth device matchers:dhcp
DHCP discovery patterns:mqtt
MQTT discovery topics:usb
USB device matchers:homekit
HomeKit device models:Advanced Options
version
Required for custom integrations:import_executor
Controls where the integration is imported:true (imports in executor thread for better performance).
From loader.py:864:
Set to
false only if your integration must be imported in the event loop. This is rare.issue_tracker
URL for reporting issues:loggers
List of Python loggers used:disabled
Reason the integration is disabled:Complete Examples
MQTT Integration (Platinum Quality)
Real manifest fromhomeassistant/components/mqtt/manifest.json:
HTTP Integration (System)
Real manifest fromhomeassistant/components/http/manifest.json:
Demo Integration (Testing)
Real manifest fromhomeassistant/components/demo/manifest.json:
Manifest Validation
Home Assistant validates manifests at startup. Common errors:Manifest Type Definition
Fromloader.py:239:
Next Steps
Creating Components
Build your integration’s main component
Config Flow
Implement UI-based configuration