Remote Integration Execution

RFC: Running Integrations on Separate Machines

Hello! I'd like to propose an idea to enable Home Assistant integrations to run on different machines while keeping the Core in control.

The Problem

Currently, all integrations run in the same Home Assistant process. This means:

  • :red_circle: No isolation: One crashing integration can bring down the entire system
  • :red_circle: Resource bottleneck: Need a powerful single machine for everything (cameras, AI, many integrations)
  • :red_circle: Can't use specialized hardware: Want to run AI on a machine with GPU, or Zigbee on the machine with the USB dongle
  • :red_circle: Expensive upgrades: When a Raspberry Pi isn't enough, you need to buy a much more powerful single machine

The Idea

Let integrations run on separate machines (workers) while keeping all the control and configuration in Core:

  • Core decides when integrations update (like today)
  • Core manages all configuration (no split configs)
  • Users choose where each integration runs (local by default, or on a specific worker)
  • Workers are just "executors" - they have no autonomous behavior

Example Use Cases

Budget-conscious setup:

  • Core on Raspberry Pi 4 (critical integrations only)
  • Old laptop as worker (cameras, AI, non-critical stuff)

Performance-focused:

  • Core on NUC (stable, UPS-backed)
  • NAS as worker (resource-intensive integrations)
  • Dedicated machine with GPU (vision/AI integrations)

Security-conscious:

  • Core on trusted hardware
  • Untrusted/community integrations isolated on separate worker

Hardware-specific:

  • Zigbee integration on machine with USB dongle
  • Everything else on a different, more powerful machine

How It Would Work (High Level)

  1. Configure workers in configuration.yaml:
    workers:
      - name: my-nas
        type: docker
        host: tcp://192.168.1.50:2375
    
  2. When adding an integration, choose where to run it:
  • Local (default, works exactly like today)
  • Remote on "my-nas"
  1. Core stays in control:
  • Core starts/stops the integration on the worker
  • Core triggers updates (same DataUpdateCoordinator as today)
  • Core receives entity states from worker
  • Worker is "dumb" - just executes what Core tells it
  1. Integration code unchanged (this is key!):
  • Existing integrations work without modification
  • Developer doesn't need to think about "local vs remote"

What I've Built (POC)

I have a working proof-of-concept with Pi-hole:

  • :white_check_mark: Pi-hole integration code runs UNMODIFIED on a separate process
  • :white_check_mark: Communication via gRPC (bidirectional)
  • :white_check_mark: Everything works: states sync, services (turn_on/turn_off), polling

What I'm Asking

Before I invest more time, I'd like feedback on:

  1. Does this solve a real problem for you? What's your use case?
  2. What concerns do you have? Security? Complexity? Performance?
  3. Which integrations would you run remotely? Which must stay local?
  4. Better name? "Remote Integrations"? "Distributed Integrations"?
  5. Would you actually use this? Be honest - cool idea vs actually useful
old and wrongs things

Things I guess

  • Won't work remotely:

    • USB/Serial integrations (Zigbee dongles, Z-Wave, Anything requiring direct hardware access, etc.) - unless worker is on the machine with the hardware ??
  • Probably fine:

    • Cloud APIs (Nest, Spotify, Weather, etc.)
    • Local HTTP APIs (Pi-hole, ESPHome, etc.)
    • MQTT integrations
    • Most sensors

Your thoughts?

Is this something you'd want? What am I missing? What could go wrong ?

Can’t this

This sounds like docker.

Are you mixing apps and integrations? All apps can be run separately in docker.

Integrations cannot but an integration is mostly an api connection. I’m thinking integrations like backup, mobile app, sun, etc . These don’t take down the server generally

Apps like matter, zwavejs, mqtt, etc. these are applications that can take down HA server. Not these specific apps just app in general. But these can already run seperate

Not worried about power consumption?
Because of that, i’m trying to reduce the amount of hardware running :wink:

You can use Zigbee2Mqtt or Zwave2Mqtt to move these off the Home Assistant Server.

Feature requests are made here: home-assistant · Discussions · GitHub

1 Like