KaZa Home automation

Home automation

KaZa vs Home Assistant

KaZa vs Home Assistant

This page offers an honest comparison between KaZa and Home Assistant, the most popular open-source home automation platform. Both solve the same core problem — centralizing home device control and automation — but with very different philosophies and tradeoffs.

The goal here is not to declare a winner. Both are legitimate choices depending on your background, constraints, and priorities.


Quick Summary

KaZa Home Assistant
Language C++ / Qt / QML Python
UI technology Native QML (compiled) Web browser (Lovelace)
Mobile client Native Qt app Browser or companion app
Automation language QML (declarative) YAML + automations GUI
New integrations C++ plugin (QML module) Python integration
Community Small Massive
Integrations count ~5 official 3000+
Typical hardware Raspberry Pi, any Linux Raspberry Pi, x86, HAOS VM
RAM usage (idle) ~30–80 MB ~300–600 MB (minimum)
Docker required No Yes (Supervised/Docker install)
Installation apt install (standard Debian) HAOS image, Docker, or Python venv
ARM board compatibility Native, any Debian/Armbian Docker on ARM is complex
Automatic upgrades Yes (apt/unattended-upgrades) No (separate update mechanism)
License Open source Open source (Apache 2.0)

Architecture Comparison

KaZa

KaZa is a compiled C++ daemon with a QML scripting layer. The server binary is small, starts in milliseconds, and has a fixed memory footprint regardless of how many objects are registered (objects are simple C++ structs). The client is a compiled Qt application that communicates over a compact binary protocol.

kazad (C++ binary)
  ├── QML engine (user automation logic)
  ├── KaZaObject registry (in-memory)
  ├── SSL port 1756 (binary protocol)
  └── Control port 43500 (plain TCP)

Home Assistant

Home Assistant is a Python application running on an event loop (asyncio). It loads a large number of Python modules at startup. Its web interface runs in a browser and communicates via a WebSocket API (JSON messages). The official mobile app also connects through the web interface.

home-assistant (Python process)
  ├── Core (event bus, state machine)
  ├── 3000+ integration modules (Python)
  ├── HTTP server (WebSocket + REST API)
  ├── Add-on system (Docker containers)
  └── Supervisor (HAOS only)

Detailed Comparison

Resource Footprint

KaZa wins here. Being a native compiled binary, kazad idles at 30–80 MB of RAM on a Raspberry Pi 4, even with multiple plugins loaded. CPU usage during idle is essentially zero. It starts in under a second.

Home Assistant typically requires 300–600 MB of RAM at idle on a minimal install, and more with add-ons (each add-on is a Docker container). On a Raspberry Pi 4, a full HAOS installation with a few active integrations easily uses 1–2 GB of RAM. Startup takes 30–120 seconds depending on the number of integrations.

Metric KaZa Home Assistant
RAM (idle, no DB) ~30–80 MB ~300–600 MB
RAM (with typical integrations) ~60–150 MB ~500 MB – 2 GB
Startup time < 1 second 30–120 seconds
CPU (idle) ~0% 1–5% (polling, timers)
Minimum SD card 1 GB 8 GB (HAOS recommended: 32 GB)

For very constrained hardware (older Pi, embedded Linux boards), KaZa is significantly more practical.

Integration Ecosystem

Home Assistant wins overwhelmingly. With over 3,000 official integrations and thousands more in the community store (HACS), virtually every smart home device or service is already supported: Zigbee, Z-Wave, Matter, Philips Hue, Ikea Tradfri, Shelly, Sonos, Google Home, Amazon Alexa, Apple HomeKit, Tesla, Fronius, SMA, EV chargers, weather services, and on and on.

KaZa ships with four official plugins: KNX, MQTT, Helios ventilation, and Palazzetti pellet stoves. Adding a new device type requires writing a C++ plugin — a significant barrier.

KaZa Home Assistant
KNX Yes (native plugin) Yes
MQTT Yes (native plugin) Yes
Zigbee No (needs plugin) Yes (ZHA, Zigbee2MQTT)
Z-Wave No (needs plugin) Yes
Matter / Thread No Yes
Modbus No (needs plugin) Yes
HTTP/REST devices Via custom plugin Yes (RESTful integration)
Cloud services Via custom plugin or QML HTTP Yes (many native)
Voice assistants No Yes (Alexa, Google, Siri)
Energy monitoring Yes (via KNX/MQTT + PostgreSQL) Yes (built-in dashboard)

If you rely on mainstream consumer devices (Ikea, Philips Hue, Shelly, Sonos…), Home Assistant is the pragmatic choice. If your installation is based on KNX — which is the professional bus standard in European buildings — KaZa's native KNX plugin offers a tight, low-latency integration.

User Interface

This is arguably the sharpest difference between the two systems.

Home Assistant: you are always inside Lovelace

No matter how much you customise a Home Assistant dashboard, the result will always look and feel like Home Assistant. The global chrome — top bar, sidebar navigation, user menu, notification panel — is fixed and not modifiable. What you can customise is the content area: which cards appear, in which order, with which data.

Cards are placed in a grid. Even with custom HACS cards (Mushroom, Mini Graph Card, ApexCharts, etc.), you are still placing rectangular blocks inside a column-based grid. The overall structure is imposed:

┌──────────────────────────────────────────────────┐
  Home Assistant  [sidebar]  [user icon]  [bell]     fixed, not yours
├──────┬───────────────────────────────────────────┤
                                                 
 Nav     [Card]  [Card]  [Card]                     grid of cards
 bar     [Card]  [Card]                          
         [Card]  [Card]  [Card]  [Card]          
(HA)                                             
└──────┴───────────────────────────────────────────┘
   this is Home Assistant's UI, always

You can pick colours, icons, and card content. You cannot move the sidebar, remove the top bar, implement a custom navigation flow, or animate a transition between views. The user will always recognise they are looking at Home Assistant.

KaZa: you write the entire UI

With KaZa, there is no imposed structure at all. The client loads a .rcc bundle containing your QML files and starts from your main.qml. Nothing else is there by default. You design everything: the navigation model, the page transitions, the layout of each screen, the colour scheme, the typography, the interaction patterns.

Qt Quick gives you access to the full QML ecosystem:

  • Qt Quick Controls 2 — buttons, sliders, dialogs, drawers, tab bars, tool bars — all styleable from scratch
  • Animations and transitionsNumberAnimation, PathAnimation, SequentialAnimation, Behavior, Transition — smooth, hardware-accelerated, 60 fps on a Raspberry Pi
  • 3DQt Quick 3D for three-dimensional scenes, floor plans, or device visualisations rendered inline in the UI
  • Canvas and ShaderEffect — custom 2D drawing and GLSL fragment shaders for effects
  • States and state machines — declarative state transitions with animated interpolation between layouts
  • Custom components — define reusable QML components once and compose them freely, with properties, signals, and animations encapsulated

A KaZa UI can look like anything:

Option A: a floor-plan touch interface
┌──────────────────────────────────────┐
                                      
   [interactive SVG floor plan]       
   tap a room  room controls slide   
   in from the right with animation   
                                      
└──────────────────────────────────────┘

Option B: a dashboard with custom widgets
┌──────────────────────────────────────┐
  22°C  ||||   4.2kW   🔋 87%       
  ──────────────────────────────────  
  [animated energy flow diagram]      
  [circular temperature gauge]        
  [scrolling power history chart]     
└──────────────────────────────────────┘

Option C: a branded product UI
┌──────────────────────────────────────┐
  [your logo]   [custom top bar]      
                                      
   [completely custom layout]         
   [your colour scheme]               
   [your icons and typography]        
└──────────────────────────────────────┘

There is no sidebar unless you create one. There is no top bar unless you place one. Navigation can be a StackView, a SwipeView, a Drawer, a tab bar at the bottom, or a completely custom gesture-driven system. Every pixel is under your control.

The trade-off is real: this freedom requires QML knowledge. Writing a good UI takes more time than placing Lovelace cards. But the result is a native application that is entirely your own — indistinguishable from a commercially developed app if that is what you want.

KaZa Home Assistant
UI technology Native QML (compiled) Web browser (Lovelace)
Overall look 100% yours — blank canvas Always looks like Home Assistant
Navigation structure Any model you design Fixed HA sidebar + top bar
Layout system Absolute freedom Card grid (column-based)
Animations Full Qt Quick animations, 60 fps CSS transitions in browser
3D rendering Qt Quick 3D Not available
Custom shaders/effects GLSL via ShaderEffect Not available
Performance Excellent (native OpenGL/Vulkan) Depends on browser + network
Mobile app Native Qt (your UI, your branding) Browser or HA companion app
Offline capability Full (bundle cached locally) Partial (local mode)
Customisation effort High — must write QML Low — GUI card editor
Result Unique, branded, pixel-perfect Recognisably Home Assistant

Automation Language

Both systems use declarative approaches, but they feel very different in practice.

KaZa automations are written in QML — a reactive, signal/slot language with JavaScript expressions. If you know QML, automation is natural: bind a Scheduler to fire an action at a given time, or use onValueChanged to react to a sensor reading. Complex logic (state machines, multi-condition rules) is just JavaScript.

// KaZa: motion light with auto-off timer
KzObject {
    id: motion
    object: "knx.sensor.hallway.motion"
    onValueChanged: {
        if (value) {
            hallwayLight.set(true)
            lightTimer.restart()
        }
    }
}
Timer {
    id: lightTimer
    interval: 120000
    onTriggered: hallwayLight.set(false)
}

Home Assistant automations are configured via the GUI or written in YAML with Jinja2 templates. The trigger/condition/action model covers most use cases without any code. Complex logic requires Jinja2 templates or Node-RED (a separate add-on).

# Home Assistant: motion light with auto-off
automation:
  - alias: "Hallway light on motion"
    trigger:
      - platform: state
        entity_id: binary_sensor.hallway_motion
        to: "on"
    action:
      - service: light.turn_on
        entity_id: light.hallway
      - delay: "00:02:00"
      - service: light.turn_off
        entity_id: light.hallway
KaZa Home Assistant
Automation language QML + JavaScript YAML + Jinja2
GUI automation editor No Yes
Learning curve High (QML required) Low to medium
Complex logic Natural (JS) Awkward (Jinja2 templates)
Code reuse QML components Blueprint templates
Debugging journalctl + console.log Logbook + trace viewer

Development: Adding New Integrations

This is where the difference is sharpest.

KaZa requires writing a C++ Qt plugin. You need a working Qt 6 development environment, knowledge of C++17, Qt's signals/slots and QObject model, and CMake. The barrier is real but the result is performant, type-safe, and ships as a standard Debian package.

Home Assistant requires writing a Python integration following the HA architecture (config entries, entities, coordinator pattern). Python is far more accessible than C++. The HA developer documentation is extensive, and thousands of existing integrations serve as templates.

KaZa Home Assistant
Language for new integrations C++17 / Qt 6 Python 3
Development difficulty High Medium
Build system CMake + Qt pip / poetry
Packaging Debian .deb HACS or PR to core
Community support Very limited Extensive (forum, Discord)
API stability Stable Evolves with HA releases

Security

KaZa enforces mutual TLS for every client connection. Every device has its own X.509 certificate signed by a private CA that the integrator controls. There is no anonymous access, no API key fallback, and no shared secret. The certificate authority stays on the server; compromising one client certificate does not compromise others.

Home Assistant offers several authentication modes: a trusted networks mode (IP-based, no credentials), API long-lived tokens, and the default username/password flow. The Nabu Casa cloud integration adds remote access. Security quality varies significantly with configuration — it is possible to expose Home Assistant to the internet with weak security, which has been the source of real-world incidents.

KaZa Home Assistant
Default auth Mutual TLS (mandatory) Username/password
Per-device identity Yes (X.509 certificates) No (shared credentials/tokens)
Anonymous access Not possible Possible (trusted networks)
Remote access Manual (VPN or port forward) Nabu Casa cloud (paid) or VPN
Security setup difficulty High (certificate generation) Low

Installation and Maintenance

This is where the comparison is more nuanced than it first appears. The "easy" label for Home Assistant depends heavily on which install method you use and what hardware you are running.

Home Assistant installation reality

Home Assistant offers several installation paths, and their complexity varies enormously:

  • HAOS (Home Assistant OS): A dedicated image that replaces your entire OS. Easy on a Raspberry Pi 4 or a dedicated x86 machine — but it means you cannot use the board for anything else. No Armbian, no standard Debian, no existing services alongside it.
  • Docker / Supervised: Requires Docker and Docker Compose. Installing Docker on a standard Debian system is straightforward on x86. On ARM boards running Armbian or a minimal Debian image (common for SBCs like Orange Pi, Banana Pi, Odroid, or older Raspberry Pi models), Docker installation is significantly more involved: the right repository must be added for the specific architecture, kernel module compatibility must be verified, and cgroup v2 support may need to be explicitly enabled. The Home Assistant Supervised install adds further constraints — it requires a specific OS configuration and actively warns if anything deviates from its expected environment.
  • Python venv: Closest to a standard install, but requires manually managing a Python virtual environment, pip dependencies, and a systemd unit — with no official support or upgrade path.

On ARM boards in particular, Docker is not a one-liner: it requires matching the CPU architecture to the correct Docker package repository, and some boards have historically had kernel limitations that prevent Docker from running correctly at all.

KaZa installation

KaZa is distributed as standard Debian .deb packages hosted in an APT repository. Installation is identical on x86, Raspberry Pi, Armbian, or any other Debian-based system:

# Add the KaZa repository once
echo "deb https://repo.kazoe.org/kaza stable main" | \
    sudo tee /etc/apt/sources.list.d/kaza.list
sudo apt update

# Install server and plugins — works the same on any architecture
sudo apt install kaza-server-bin kaza-knx kaza-mqtt
sudo systemctl enable --now kazad

There is no container runtime to install, no architecture-specific repository to locate, no kernel feature to verify. The packages follow Debian standards: dependency declarations are correct, the systemd unit is installed automatically, and postinst scripts handle initial setup. KaZa installs alongside any existing services on the machine — it is just another daemon.

Upgrades are fully automatic with Debian's standard unattended-upgrades or a manual apt upgrade. No separate update mechanism, no web UI required, no container image to pull. This is a significant operational advantage on headless ARM boards that run 24/7 and are not regularly accessed directly.

# Upgrade KaZa the same way as any other Debian package
sudo apt update && sudo apt upgrade

The trade-off compared to HAOS is that initial configuration (SSL certificates, server QML, client bundle) still requires manual steps and QML knowledge — there is no graphical setup wizard.

KaZa Home Assistant
Installation method apt install (standard Debian) HAOS image, Docker, or Python venv
Works on Armbian / minimal Debian ARM Yes, natively Docker install is complex on ARM
Requires Docker No Yes (Supervised/Docker installs)
Replaces existing OS No — runs alongside anything HAOS: yes. Others: no
Systemd integration Native (kazad.service) Via Docker or HAOS supervisor
Upgrades apt upgrade — automatic, standard One-click in web UI (HAOS) or manual
Per-integration install apt install kaza-<plugin> Add-on store / HACS
Unattended upgrades compatible Yes No (HAOS manages itself)
Backup Manual (files + DB dump) Snapshot system (HAOS)
Monitoring journalctl -u kazad Built-in logbook + statistics
Community support Very limited Large forum, Reddit, Discord

Pros and Cons

KaZa

Pros: - Extremely small resource footprint — runs well on a Raspberry Pi 3 or any constrained Linux board - No Docker required — a single apt install from the Debian repository gets the server running; each plugin is an additional .deb package. Standard Debian package management, no container runtime, no special OS image - Complete UI freedom — blank canvas in QML: any navigation model, any layout, any animation, any colour scheme. No imposed structure, no Home Assistant chrome, no card grid. The result can look like anything — a custom branded product, an interactive floor plan, or a professional dashboard - Full Qt Quick ecosystem: animations, 3D (Qt Quick 3D), custom shaders (ShaderEffect), Qt Quick Controls 2, hardware-accelerated rendering at 60 fps on a Raspberry Pi - Native, hardware-accelerated UI — no browser, no network latency for the interface - Tight KNX integration — professional bus, bidirectional, reads ETS project directly - Binary protocol — object value updates are 10–20 bytes; a Pi handles hundreds of objects with no measurable load - Mutual TLS mandatory — strong security model out of the box - Fully custom UI — any layout, any animation, any interaction pattern - No cloud dependency — runs entirely locally - Clean separation: server logic in QML, client UI in QML, plugins in C++ - Fits into any existing Debian/Raspberry Pi OS system — no dedicated hardware or OS image needed

Cons: - QML knowledge required for UI and server logic — significant learning curve - C++ required for new integrations — high barrier for adding unsupported devices - Very small ecosystem — ~5 official integrations, no community store - No installation wizard — setup requires Linux skills and manual configuration - No GUI for configuration or automation rules - Small community — very limited resources for help, no active forum - No voice assistant integration - No energy dashboard, history graphs, or statistics UI out of the box (must be built in QML) - Certificate management is manual

Home Assistant

Pros: - Enormous ecosystem — 3000+ integrations, virtually any device is already supported - No coding required for most use cases — GUI automation editor, card editor - HAOS image provides a fully guided first-run experience on supported hardware - One-click updates from the web UI (HAOS) - Large, active community — extensive documentation, forum, YouTube tutorials - Built-in energy monitoring dashboard, statistics, history graphs - Voice assistant integration (Alexa, Google, Siri via HomeKit bridge) - Mobile companion app with notifications, GPS presence, widgets - Node-RED integration for complex automation without code - Active development — frequent releases, rapidly expanding feature set - Nabu Casa cloud for easy remote access (paid subscription)

Cons: - High resource usage — not suitable for very constrained hardware - Slow startup — not ideal if the server restarts frequently - UI is always recognisably Home Assistant — the global chrome (sidebar, top bar, user menu) is fixed and not modifiable; only card content is customisable - Layout constrained to a column-based card grid — no arbitrary positioning, no custom navigation flows, no full-screen interactive elements outside of cards - Python-only integrations — slower than native C++ for latency-sensitive protocols - Security defaults are weaker — easy to misconfigure remote access - YAML can become complex and hard to maintain for large installations - Dependency on HA release cycle — integrations break on major HA updates - Cloud features require subscription (Nabu Casa) - Less suitable for KNX-centric professional installations - Docker installation on ARM boards (Armbian, minimal Debian) is complex and not always reliable — kernel and cgroup compatibility must be verified per board - HAOS requires a dedicated machine — cannot share the board with other services - No standard Debian package integration — upgrades cannot be automated through apt or unattended-upgrades


When to Choose KaZa

  • Your installation is KNX-centric (professional European bus standard)
  • You (or someone on your team) know Qt/QML and want full control over the UI
  • You are running on an ARM board with Armbian or standard Debian and do not want to deal with Docker
  • You want to share the board with other services — KaZa is just another systemd daemon
  • You need to run on very constrained hardware (old Pi, embedded ARM board)
  • You want native apps on all platforms with no browser dependency
  • You want a UI that does not look like Home Assistant — your own navigation, layout, animations, and visual identity with no imposed structure
  • You want to use the full Qt Quick ecosystem: Qt Quick 3D, custom animations, interactive floor plans, ShaderEffect, or any visual design that cannot be expressed as a grid of cards
  • You want strong security by default (mutual TLS, no anonymous access)
  • You want standard Debian package managementapt upgrade, unattended-upgrades, reproducible installs
  • You are building a custom product where the UI must be pixel-perfect and branded
  • You are comfortable with C++ and want to write tight, performant protocol integrations

When to Choose Home Assistant

  • You need broad device compatibility without writing code
  • You (or the end user) are not developers — YAML and the GUI editor are enough
  • You rely on mainstream consumer devices (Ikea, Philips Hue, Shelly, Z-Wave, Zigbee, Matter)
  • You have a dedicated x86 or Raspberry Pi 4 machine available for HAOS
  • You want voice assistant integration (Alexa, Google, Siri)
  • You want a large community for help and ready-made automations
  • You need built-in energy monitoring and statistics dashboards
  • You are comfortable with the cloud features (remote access, mobile notifications)

Can They Coexist?

Yes. KaZa's MQTT plugin makes it straightforward to bridge KaZa objects to Home Assistant via a Mosquitto broker. This lets you use KaZa for KNX (where it excels) and Home Assistant for everything else (cloud integrations, voice assistants, energy dashboard), with both systems sharing state through MQTT topics.

KNX bus
  └── knxd
        └── KaZa (kaza-knx plugin)
              └── MQTT broker (Mosquitto)
                    └── Home Assistant (MQTT integration)

In this setup, KaZa handles the KNX side (fast, bidirectional, ETS-native) while Home Assistant provides the ecosystem, voice control, and mobile notifications. The KaZa native client handles the day-to-day mobile UI; Home Assistant is accessible from any browser for administration and monitoring.