Direct answer: Do not delete the working integration first. Open the Home Assistant Core log immediately after reproducing the error and find the import exception that appears before “Invalid handler specified.” The popup is a wrapper: the actionable cause is usually an incompatible custom component, a missing Python dependency, a duplicate package, or a Core-version regression in the integration’s config flow.
This guide covers the frontend message “Config flow could not be loaded” with “Invalid handler specified” when adding, reconfiguring, or authenticating an integration. It is not a guide for ordinary invalid credentials or a device that is merely offline.
Symptoms and affected scope
- Adding an integration opens a popup containing Invalid handler specified.
- A previously working integration cannot reconfigure after a Core update.
- The log reports an import error, missing module, incompatible constant, duplicate package, or exception in config_flow.py.
- The official integration name matches a custom_components folder installed earlier.
These symptoms can look similar even though their causes sit in different layers. The safest approach is to preserve the current working state, identify the first failing layer, and change one variable at a time. This prevents a recoverable Config flow could not be loaded Invalid handler specified problem from turning into lost pairings, lost entities, or an inaccessible installation.
Ranked likely causes
- 1. A HACS or manually installed custom integration shadows the built-in integration domain.
- 2. The custom component is not compatible with the installed Home Assistant Core version.
- 3. A dependency failed to install or two incompatible copies of a Python package are loaded.
- 4. Home Assistant Core or the official integration has a confirmed regression.
- 5. Browser cache is stale, but only after server-side logs show no import failure.
- 6. The integration files are incomplete after a failed update or restore.
Before changing anything
Make a current backup, record versions and installation type, capture the exact first error, and remove secrets from any notes. Do not delete integrations, reset devices, erase databases, or reflash firmware as an opening move. If equipment is hot, swollen, wet, arcing, smoking, or connected to mains wiring that must be opened, stop and use qualified help.
Least-destructive diagnostic order
- 1. Create a current backup before changing integration files. Do not remove the config entry, device registry records, or entities merely because the setup dialog failed. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 2. Open Settings → System → Logs. Clear the view if needed, reproduce the error once, and return immediately to the log. Expand the first traceback associated with homeassistant.config_entries, homeassistant.loader, or the integration domain. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 3. Record the exact integration domain and the first import or module error. The last line “Invalid handler specified” is less diagnostic than the earlier exception that prevented the config-flow handler from loading. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 4. Check whether /config/custom_components contains a folder with that domain. A custom integration can shadow an official integration even when the UI label looks identical. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 5. If a matching custom component exists, read its release notes and compatibility statement. Update it through its supported manager, or disable it reversibly by renaming the folder and restarting Home Assistant. Do not delete its files before a backup. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 6. Restart Home Assistant once and retry the flow. If the built-in integration now loads, the shadowing custom component was the cause. Preserve its configuration until you decide whether migration is needed. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 7. If no custom component matches, compare the installed Home Assistant Core version with the integration documentation and current upstream issues. A regression tied to one Core release should be handled with the official patch or a supported backup restore, not random package installation. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 8. For dependency errors, do not use pip inside Home Assistant OS or a managed container. Managed installations rebuild dependencies and unsupported manual packages can make the environment less reproducible. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 9. Check available Core updates and release notes. Install a stable patch only after a backup. If the error began immediately after an update and no fixed patch exists, restore the pre-update backup using the official recovery path. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 10. Test in a private browser window only after server-side import errors are resolved. Browser cache cannot repair a Python import exception, but it can retain stale frontend flow state. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 11. Reconfigure or reauthenticate through the integration’s flow instead of deleting it. Modern integrations may support a reconfigure flow that updates address or credentials without losing device/entity associations. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
- 12. If the traceback identifies a genuine official-integration bug, collect sanitized diagnostics, Core version, installation type, and the minimal traceback. Remove tokens, API keys, hostnames, GPS data, and account identifiers before sharing an upstream report. After this step, stop and interpret the result before moving on. A positive result narrows the fault to this layer; a negative result preserves the current configuration and justifies the next check.
Choose the correct branch
- Matching custom_components domain: treat shadowing or incompatibility as the leading cause.
- Error began with a Core patch: inspect official release notes and upstream issue status before altering files.
- Missing third-party Python module: update or remove the component that declares it; do not modify managed Python manually.
- Only one browser fails and logs are clean: clear site data or test a private window after confirming the backend flow works.
How to interpret the results
If the evidence points to a HACS or manually installed custom integration shadows the built-in integration domain. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.
If the evidence points to the custom component is not compatible with the installed Home Assistant Core version. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.
If the evidence points to a dependency failed to install or two incompatible copies of a Python package are loaded. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.
If the evidence points to Home Assistant Core or the official integration has a confirmed regression. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.
If the evidence points to browser cache is stale, but only after server-side logs show no import failure. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.
If the evidence points to the integration files are incomplete after a failed update or restore. Correct only that layer, then repeat the smallest relevant test. If the result does not change, restore the prior value and continue; do not stack speculative fixes.
Verified repair and final checks
The integration dialog should open, complete without a server exception, and preserve or create the expected config entry. Confirm related entities load, no new import traceback appears after restart, and reauthentication or reconfiguration works without deleting the entry.
A repair is not verified merely because an error banner disappears. Confirm the underlying connection or service, observe fresh state data, and test after a controlled restart where appropriate. Keep the previous configuration until the new state has remained stable.
Rollback and recovery
Keep the backup and the original custom component folder until the fixed integration is verified. If a patch worsens the site, restore the supported prior backup. Do not restore only selected database tables unless official recovery instructions require it.
Write down each change before making it. Reversibility matters: a documented URL, service setting, serial path, integration state, or firmware version is much easier to restore than a configuration changed in several places at once.
Prevention
Review custom integrations before Core updates, avoid duplicate domains, keep HACS components current, retain pre-update backups, and test reconfiguration before an urgent credential change is needed.
Review this setup after platform, firmware, router, certificate, or host changes. Backups should exist off the device and should be periodically checked for visibility and required encryption material.
Privacy and safety
Never publish access tokens, API keys, encryption keys, Wi-Fi credentials, public IP addresses, precise locations, camera URLs, door-lock states, alarm details, or complete unsanitized diagnostics. Do not weaken TLS, firewall rules, authentication, or network isolation simply to make an error disappear.
Testing disclosure
This guide is based on the current official documentation and linked upstream reports. Troubliq did not physically test every device, adapter, network, phone, host, or installation variant described. Device-specific behavior can differ; preserve backups and follow the manufacturer’s safety instructions.
Sources
- Integration reconfigure flow guidance
- Test a connection in config flow
- 2026.7 Google config-flow regression
- 2026.2 LIFX config-flow regression
- Home Assistant common tasks and backups
Last reviewed: September 27, 2026.
Next: use the Home Assistant Error Decoder to match the exact message, or return to the current Home Assistant problems hub.
Detailed diagnostic reference
Read the traceback in order
The popup is produced after Home Assistant cannot obtain a valid config-flow handler. Find the first exception for the domain. Later wrapper messages repeat the consequence and can distract from the missing module, import name, dependency, or component error that caused it.
Check domain shadowing
Home Assistant resolves integrations by domain. A custom_components folder with the same domain can override the bundled integration. Record the folder and version, then disable it reversibly and restart once to test the official component.
Identify stale custom code
Search the traceback for removed constants, renamed helpers, or imports from old Home Assistant APIs. Those are compatibility failures in the custom component, not credential problems. Update the component or keep it disabled until its maintainer supports the installed Core release.
Avoid managed-environment package edits
Home Assistant OS and official containers manage Python dependencies. Installing packages manually with pip can create a temporary success that disappears on restart or conflicts with the next update. Repair the integration declaring the dependency.
Separate backend and frontend faults
If the log contains an import traceback, browser cache is not the cause. Use a private window only after the backend flow loads without errors. This prevents repeated cache clearing from hiding the actionable server evidence.
Protect an existing config entry
Do not delete a working or partially working entry before testing reconfigure or reauthenticate. Deletion can remove device/entity associations and automation references while leaving the broken flow code unchanged.
Handle a confirmed regression
Compare the exact Core version, installation type, and integration domain with the official issue. Prefer a fixed stable patch. If no fix exists and the failure is critical, restore the complete supported pre-update backup rather than mixing component files.
Sanitize diagnostic evidence
Share the integration domain, version, minimal traceback, and reproduction steps. Remove tokens, API keys, email addresses, hostnames, GPS coordinates, camera endpoints, and account identifiers. Do not upload a complete configuration archive publicly.
Verify after the repair
Open the flow, complete a harmless reconfiguration when possible, restart Home Assistant, and confirm the domain loads without import warnings. Check that entity identifiers and automations remain intact.
Completion criteria
The config flow opens reliably, the entry configures or reauthenticates, no related traceback returns after restart, and the fix does not depend on an unsupported manual package or deleted registry data.
