Integration quality scale
The integration quality scale is a framework for Home Assistant to grade integrations based on user experience, features, code quality and developer experience. To grade this, the project has come up with a set of tiers, which all have their own meaning.
Scaled tiersโ
There are 4 scaled tiers, bronze, silver, gold, and platinum. To reach a tier, the integration must fulfill all rules of that tier and the tiers below.
These tiers are defined as follows.
๐ฅ Bronzeโ
The bronze tier is the baseline standard and requirement for all new integrations. It meets the minimum requirements in code quality, functionality, and user experience. It complies with the fundamental expectations and provides a reliable foundation for users to interact with their devices and services.
The documentation provides guidelines for setting up the integration directly from the Home Assistant user interface.
From a technical perspective, this integration has been reviewed to comply with all baseline standards, which we require for all new integrations, including automated tests for setting up the integration.
The bronze tier has the following characteristics:
- Can be easily set up through the UI.
- The source code adheres to basic coding standards and development guidelines.
- Automated tests that guard this integration can be configured correctly.
- Offers basic end-user documentation that is enough to get users started step-by-step easily.
๐ฅ Silverโ
The silver tier builds upon the โBronzeโ level by improving the reliability and robustness of integrations, ensuring a solid runtime experience. It ensures an integration handles errors properly, such as when authentication to a device or service fails, handles offline devices, and other errors.
The documentation for these integrations provides information on what is available in Home Assistant when this integration is used, as well as troubleshooting information when issues occur.
This integration has one or more active code owners who help maintain it to ensure the experience on this level lasts now and in the future.
The silver tier has the following characteristics:
- Provides everything โBronzeโ has.
- Provides a stable user experience under various conditions.
- Has one or more active code owners who help maintain the integration.
- Correctly and automatically recover from connection errors or offline devices, without filling log files and without unnecessary messages.
- Automatically triggers re-authentication if authentication with the device or service fails.
- Offers detailed documentation of what the integration provides and instructions for troubleshooting issues.
๐ฅ Goldโ
The gold standard in integration user experience, providing extensive and comprehensive support for the integrated devices & services. A gold-tier integration aims to be user-friendly, fully featured, and accessible to a wider audience.
When possible, devices are automatically discovered for an easy and seamless setup, and their firmware/software can be directly updated from Home Assistant.
All provided devices and entities are named logically and fully translatable, and they have been properly categorized and enabled for long-term statistical use.
The documentation for these integrations is extensive, and primarily aimed toward end-users and understandable by non-technical consumers. Besides providing general information on the integration, the documentation provides possible example use cases, a list of compatible devices, a list of described entities the integration provides, and extensive descriptions and usage examples of available actions provided by the integration. The use of example automations, dashboards, available Blueprints, and links to additional external resources, is highly encouraged as well.
The integration provides means for debugging issues, including downloading diagnostic information and documenting troubleshooting instructions. If needed, the integration can be reconfigured via the UI.
From a technical perspective, the integration needs to have full automated test coverage of its codebase to ensure the set integration quality is maintained now and in the future.
All integrations that have devices in the Works with Home Assistant program are at least required to have this tier.
The gold tier has the following characteristics:
- Provides everything โSilverโ has.
- Has the best end-user experience an integration can offer; streamlined and intuitive.
- Can be automatically discovered, simplifying the integration setup.
- Integration can be reconfigured and adjusted.
- Supports translations.
- Extensive documentation, aimed at non-technical users.
- It supports updating the software/firmware of devices through Home Assistant when possible.
- The integration has automated tests covering the entire integration.
- Required level for integrations providing devices in the Works with Home Assistant program.
๐ Platinumโ
Platinum is the highest tier an integration can reach, the epitome of quality within Home Assistant. It not only provides the best user experience but also achieves technical excellence by adhering to the highest standards, supreme code quality, and well-optimized performance and efficiency.
The platinum tier has the following characteristics:
- Provides everything โGoldโ has.
- All source code follows all coding and Home Assistant integration standards and best practices and is fully typed with type annotations and clear code comments for better code clarity and maintenance.
- A fully asynchronous integration code base ensures efficient operation.
- Implements efficient data handling, reducing network and CPU usage.
Keeping track of the implemented rulesโ
Integrations that are working towards a higher tier or have a tier, must add a quality_scale.yaml
file to their integration.
The purpose of this file is to keep track of the progress of the rules that have been implemented and to keep track of exempted rules and the reason for the exemption.
An example of this file looks like this:
rules:
config_flow: done
docs_high_level_description:
status: exempt
comment: This integration does not connect to any device or service.
Adjusting the tier of an integrationโ
Home Assistant encourages our contributors to get their integrations to the highest possible tier, to provide an excellent coding experience for our contributors and the best experience for our users.
When an integration reaches the minimum requirements for a certain tier, a contributor can open a pull request to adjust the scale for the integration. This request needs to be accompanied by the full checklist for each rule of scale (including all rules of lower tiers), demonstrating that it has met those requirements. The checklist can be found here.
Once the Home Assistant core team reviews and approves it, the integration will display the new tier as of the next major release of Home Assistant.
Besides upgrading an integration to a higher tier on the scale, it is also possible for an integration to be downgraded to a lower tier. This can, for example, happen when there is no longer an active integration code owner. In this specific example, the integration will be downgraded to โBronzeโ, even if it otherwise fully complies with the โPlatinumโ tier.
Adjustments to rules contained in each tierโ
The world of IoT and all technologies used by Home Assistant are changing at a fast pace; not just in terms of what Home Assistant can support or do, but also in terms of the software on which Home Assistant is built. Home Assistant is pioneering the technology in the industry at a fast pace.
This also means that new insights and newly developed and adopted best practices will occur over time, resulting in new additions and improvements to the individual integration quality scale rules.
If a tier is adjusted, all integrations in that tier need to be re-evaluated and adjusted accordingly.
One exception to this is integrations that have devices that are part of the Works with Home Assistant program. Those integrations will be flagged as grandfathered into their existing tier.
Integration quality scale rulesโ
The rules for each tier are defined down below and come with its own page with examples and more information.
๐ฅ Bronzeโ
- config-flow - Integration needs to be able to be set up via the UI
- test-before-configure - Test a connection in the config flow
- unique-config-entry - Don't allow the same device or service to be able to be set up twice
- config-flow-test-coverage - Full test coverage for the config flow
- runtime-data - Use ConfigEntry.runtime_data to store runtime data
- test-before-setup - Check during integration initialization if we are able to set it up correctly
- appropriate-polling - If it's a polling integration, set an appropriate polling interval
- entity-unique-id - Entities have a unique ID
- has-entity-name - Entities use has_entity_name = True
- entity-event-setup - Entities event setup
- dependency-transparency - Dependency transparency
- action-setup - Service actions are registered in async_setup
- common-modules - Place common patterns in common modules
- docs-high-level-description - The documentation includes a high-level description of the integration brand, product, or service
- docs-installation-instructions - The documentation provides step-by-step installation instructions for the integration, including, if needed, prerequisites
- docs-removal-instructions - The documentation provides removal instructions
- docs-actions - The documentation describes the provided service actions that can be used
- brands - Has branding assets available for the integration
๐ฅ Silverโ
- config-entry-unloading - Support config entry unloading
- log-when-unavailable - If internet/device/service is unavailable, log once when unavailable and once when back connected
- entity-unavailable - Mark entity unavailable if appropriate
- action-exceptions - Service actions raise exceptions when encountering failures
- reauthentication-flow - Reauthentication flow
- parallel-updates - Set Parallel updates
- test-coverage - Above 95% test coverage for all integration modules
- integration-owner - Has an integration owner
- docs-installation-parameters - The documentation describes all integration installation parameters
- docs-configuration-parameters - The documentation describes all integration configuration options
๐ฅ Goldโ
- entity-translations - Entities have translated names
- entity-device-class - Entities use device classes where possible
- devices - The integration creates devices
- entity-category - Entities are assigned an appropriate EntityCategory
- entity-disabled-by-default - Integration disables less popular (or noisy) entities
- discovery - Can be discovered
- stale-devices - Clean up stale devices
- diagnostics - Implements diagnostics
- exception-translations - Exception messages are translatable
- icon-translations - Icon translations
- reconfiguration-flow - Integrations should have a reconfigure flow
- dynamic-devices - Devices added after integration setup
- discovery-update-info - Integration uses discovery info to update network information
- repair-issues - Repair issues and repair flows are used when user intervention is needed
- docs-use-cases - The documentation describes use cases to illustrate how this integration can be used
- docs-supported-devices - The integration documents known supported / unsupported devices
- docs-supported-functions - The documentation describes the supported functionality, including entities, and platforms
- docs-data-update - The documentation describes how data is updated
- docs-known-limitations - The documentation describes known limitations of the integration (not to be confused with bugs)
- docs-troubleshooting - The documentation provides troubleshooting information
- docs-examples - The documentation provides automation examples the user can use.
๐ Platinumโ
- async-dependency - Dependency is async
- inject-websession - The integration dependency supports passing in a websession
- strict-typing - Strict typing
Special tiersโ
There are also 4 special tiers that are used to integration that don't have a place on the scaled tier list. This is because they are either an internal part of core, they are not in core at all, or they don't meet the minimum requirements to be graded against the scaled tiers.
The special tiers are defined as follows.
โ No scoreโ
These integrations can be set up through the Home Assistant user interface. The โNo scoreโ designation doesnโt imply that they are bad or buggy, instead, it indicates that they havenโt been assessed according to the quality scale or that they need some maintenance to reach the now-considered minimum โBronzeโ standard.
The โNo scoreโ tier cannot be assigned to new integrations, as they are required to have at least a โBronzeโ level when introduced. The Home Assistant project encourages the community to help update these integrations without a score to meet at least the โBronzeโ level requirements.
Characteristics:
- Not yet scored or lacks sufficient information for scoring.
- Can be set up via the UI, but may need enhancements for a better experience.
- May function correctly, but hasnโt been verified against current standards.
- Documentation most often provides only basic setup steps.
๐ Internalโ
This tier is assigned to integrations used internally by Home Assistant. These integrations provide basic components and building blocks for Home Assistant's core program or for other integrations to build on top of it.
Internal integrations are maintained by the Home Assistant project and subjected to strict architectural design procedures.
Characteristics:
- Internal, built-in building blocks of the Home Assistant core program.
- Provides building blocks for other integrations to use and build on top of.
- Maintained by the Home Assistant project.
๐พ Legacyโ
Legacy integrations are older integrations that have been part of Home Assistant for many years, possibly since its inception. They can only be configured through YAML files and often lack active maintainers (code owners). These integrations might be complex to set up and do not adhere to current/modern end-user expectations in their use and features.
The Home Assistant project encourages the community to help migrate these integrations to the UI and update them to meet modern standards, making these integrations accessible to everyone.
Characteristics:
- Complex setup process; only configurable via YAML, without UI-based setup.
- May lack active code ownership and maintenance.
- Could be missing recent updates or bug fixes.
- Documentation may still be aimed at developers.
๐ฆ Customโ
Custom integrations are developed and distributed by the community, and offer additional functionalities and support for devices and services to Home Assistant. These integrations are not included in the official Home Assistant releases and can be installed manually or via third-party tools like HACS (Home Assistant Community Store).
The Home Assistant project does not review, security audit, maintain, or support third-party custom integrations. Users are encouraged to exercise caution and review the custom integrationโs source and community feedback before installation.
Developers are encouraged and invited to contribute their custom integration to the Home Assistant project by aligning them with the integration quality scale and submitting them for inclusion.
Characteristics:
- Not included in the official Home Assistant releases.
- Manually installable or installable via community tools, like HACS.
- Maintained by individual developers or community members.
- User experience may vary widely.
- Functionality, security, and stability can vary widely.
- Documentation may be limited.