<!--
.. title: Quick Overview
.. slug: overview
-->

# KaZa Home Automation

KaZa is an open-source home automation platform built on Qt and QML. It connects physical devices — KNX bus, MQTT brokers, HTTP appliances — into a unified object model and serves a native, hardware-accelerated user interface to any number of phones, tablets, and desktops simultaneously.

## Key Characteristics

- **Native everywhere** — the client is a compiled Qt application for Linux, Windows, and Android. No browser required.
- **Declarative automation** — server-side logic is written in QML. Bindings, timers, and schedulers express your rules concisely.
- **Secure by design** — all client connections use mutual TLS. Every device gets its own certificate, generated by the server on demand.
- **Efficient protocol** — object value updates are binary frames of 10–20 bytes. A Raspberry Pi handles hundreds of objects and multiple clients with no measurable load.
- **Extensible** — new device types are added as Qt QML extension modules (plugins) in C++. The integrator imports the plugin in QML and uses its types immediately.

## Documentation

| Section | Audience | Description |
|---------|----------|-------------|
| [Introduction](/) | Everyone | Architecture, components, security model, existing integrations |
| [Integrator Guide](/integrator-guide/) | Integrators | Writing server-side and client-side QML for your home |
| [Plugin Development](/plugin-development/) | Developers | Creating new integration plugins in C++/Qt/CMake |
| [KaZa vs Home Assistant](/comparison-home-assistant/) | Everyone | Objective pros/cons comparison with the most popular alternative |

## Quick Overview

```
Raspberry Pi (server)              Phones & tablets (clients)
──────────────────────             ──────────────────────────
kazad daemon                       KaZa Client (native app)
  └── main.qml (your code)           └── UI from app.rcc
        ├── KnxBus (ETS project)           bound to object names
        ├── MqttClient                     updated in real time
        ├── Scheduler (cron rules)
        └── DataLogger (PostgreSQL)
              │
              └── SSL port 1756 ──────────► synchronized objects
                  (mutual TLS)               ← user actions
```

## Example: Minimal Server Application

```qml
import QtQml 2.0
import org.kazoe.kaza 1.0
import org.kazoe.knx 1.0

KaZaElement {
    KnxBus {
        knxd:    "ip:192.168.1.250"
        knxProj: "/etc/kaza/home.knxproj"
    }

    // Evening automation
    Scheduler {
        hour:   "20"
        minute: "0"
        onTimeout: {
            outdoorLights.set(true)
            livingRoomDimmer.set(60)
        }
    }

    KzObject { id: outdoorLights;    object: "light.switch.outside" }
    KzObject { id: livingRoomDimmer; object: "light.dim.lounge" }
}
```
