---
title: "Concepts"
description: "The GlassHome mental model. Dash, Hub, addon, widget, tunnel. What each piece is, where it runs, and how they connect."
canonical: https://glasshome.app/docs/concepts
section: "Getting started"
updated: 2026-06-09
---
# Concepts

A handful of terms come up across the docs. Skim this once and the rest reads faster.

## The pieces

  ### Dash (glasshome-dash)

The app you actually interact with. Runs on your hardware (Pi, NUC, NAS, HAOS). Talks directly to Home Assistant over WebSocket. Contains one or more dashboards (named screens you configure).
  ### Hub (this site)

Cloud service at glasshome.app. Hosts the widget registry, your account, organizations, and tunnel provisioning. Optional for using Dash.
  ### Addon

A packaging of Dash for Home Assistant OS or Supervised. Installed via the HA Add-on Store. Same app, easier install.
  ### Widget

A tile on a dashboard bound to one or more HA entities. Built-in or installed from Hub. SolidJS component + Zod config.

## Where things run

```
Your network                              Internet
─────────────────────────                 ──────────────────
Home Assistant ◄──WS──┐                   glasshome.app
                       │                  (account, widget CDN,
Dash ──────────────────┴───── browser     tunnel provisioning)
  + optional cloudflared ───── tunnel ──────▲
```

Dash does not need Hub to run. Hub is only required if you want to install community widgets, publish your own, or use the managed remote-access tunnel.

## Glossary

### Everyday terms

- **Dashboard.** A named screen inside Dash. You can have multiple dashboards, each with its own layout and widget set.
- **Breakpoint.** Layout slot keyed by screen width (`lg`, `md`, `sm`). Each dashboard stores one layout per breakpoint. See [Layouts](/docs/layouts).
- **Tunnel.** A `cloudflared` process that exposes Dash to the internet via Cloudflare's edge. Provisioned by Hub. See [Remote Access](/docs/remote-access).

### Publishing terms

- **Scope.** Publishing namespace. `@username` for personal, `@org-slug` for an [organization](/docs/organizations). Widget IDs look like `@scope/widget-name`.
- **Manifest.** The `manifest.json` (or inline metadata in `defineWidget`) that describes a widget: name, icon, size limits, SDK version.
- **configVersion.** Integer on a widget manifest. Bumped when the config shape changes in a breaking way. Drives [migrations](/docs/widget-migrations).
- **Trust badge.** `Official` (verified, installs without prompt) or `Community` (user-published, asks for consent). See [Publishing](/docs/widget-publishing).

## Data flow

1. Browser loads Dash from your local server (e.g. `http://192.168.1.x:3123`).
2. Dash opens a WebSocket to Home Assistant for live entity state.
3. When you add a community widget, Dash fetches its bundle from Hub's CDN once, then caches it locally.
4. Dash config (layouts, themes, connections) is stored in a local SQLite database. No sync to Hub.

> **What never leaves your network:** Entity state, your layouts, your HA URL, your devices. Dash talks to HA directly. Hub never sees any of it.

## Hub vs. Dash accounts

You sign into Hub (this site) to publish widgets or provision a tunnel. Dash itself doesn't require an account. It authenticates to Home Assistant via HA's own OAuth.