Privacy policy
This page covers the HA Desktop Widget desktop app, this website, and the Cloud Sync service.
The desktop app
The app has no accounts and does not send telemetry, analytics or crash reports. The one exception is an anonymous install count that stays off unless you turn it on (see below). Otherwise the app talks only to your own Home Assistant server, to GitHub, and, if you donate by card, to Stripe, as described below. Your settings, layout and logs stay on your computer.
Home Assistant
The app connects to the Home Assistant address you enter and shows what that server reports: entities, cameras and media. You sign in on Home Assistant's own page in your browser, so the app never sees your password. It keeps the sign-in it receives, or a long-lived access token you paste, encrypted with your operating system's secure storage (Windows, the macOS Keychain, or a Linux keyring such as GNOME Keyring or KWallet). Where secure storage is not available, the app does not save the sign-in.
Update checks (GitHub)
The app asks GitHub Releases for new versions about 30 seconds after it starts, about every six hours, and when the computer wakes up if a check is due. The Windows installer and the Linux AppImage download and install updates themselves. The portable, macOS, .deb and Arch builds show one notice for each new version and link to the download on GitHub. Beta releases are included only if you turn on Receive beta updates in Settings. GitHub sees your IP address and the request, as with any download. The app adds no account or device identifier of its own.
Language packs (GitHub)
English and German are built in. Other languages are packs that the app downloads from raw.githubusercontent.com when you choose them, and it fetches the list of available packs when Settings shows them. Installed packs are checked for a newer version about 30 seconds after the app starts and then daily, with no request when none is installed. Each download is checked against a SHA-256 hash from the list before it is used.
Artwork from other websites
A media player can point to album art on another website. The app downloads that picture itself and refuses addresses on your own network or other private or reserved ranges. The site that hosts the picture sees your IP address. Your Home Assistant sign-in is sent only to your own Home Assistant server.
Links and Profile Sync
Report an issue, Releases, Sponsor and Profile Sync help open GitHub pages in your default browser, and that site's own policy applies from there. Profile Sync, if you turn it on, writes one file to a folder you choose. The app does not contact Dropbox, OneDrive, iCloud Drive, Google Drive or Syncthing; whichever service syncs that folder handles the file. You can encrypt the file with a passphrase.
Card donations (Stripe)
If you choose Donate by card in Settings, the app sends the amount you picked and the app's language to a small donation service hosted on Cloudflare. That service asks Stripe for a checkout page, which opens in a separate app window. Your card details, email address and any name you give for the sponsors list go from that window to Stripe, whose privacy policy applies to them. The app never sees them, and the donation service stores nothing. Your IP address is used only for a short-term limit on how many checkouts one address can start. We see the donations Stripe receives, so we can say thank you and list donors who asked to be listed.
Anonymous install count (off unless you turn it on)
Release download counts include every update, so they cannot say how many people use the app. If you turn on Settings → Advanced → Count this install, the app sends one small request a day to a counter hosted on Cloudflare. It contains a random install ID created on your computer, the app version, and your operating system family (Windows, macOS, or Linux). It contains nothing about you, your Home Assistant, your entities, or your settings.
The counter stores only the install ID, the days it was first and last seen, and its latest version and operating system. It does not store IP addresses or browser or app identifiers, and we use it only to count installs. Turning the setting off stops the requests, and the DO_NOT_TRACK=1 environment variable stops them even when the setting is on. The install ID is kept in usage-ping.json in the app's settings folder; deleting that file gives the app a new, unrelated ID.
This website
This website has no accounts, cookies, analytics or advertising, and loads no third-party scripts or fonts. It is hosted by Vercel, which receives your IP address and the usual details of each request, as any web host does.
- The home, Companion and Download pages ask GitHub (api.github.com) from your browser for the latest release, to show the current version and link the right file. The Download page also asks for the list of recent releases, to offer a beta. GitHub sees your IP address and the request. Your browser keeps the answers in session storage and reuses them for ten minutes, so moving between pages does not repeat the requests.
- The demo on the home page keeps your choices (accent color, light and switch states, pinned tiles) in your browser's local storage, under names that start with
hdw-. They never leave your browser. Clear them with your browser's site data settings. - Download buttons and other links go to GitHub, which has its own policy.
Cloud Sync service
Cloud Sync is an optional service for HA Desktop Widget. It keeps the settings you choose to sync available across your computers. You can use the desktop app without Cloud Sync. Free folder Profile Sync writes to a file you choose and does not create a hosted Cloud Sync account.
Information we handle
- When you sign in with Google or GitHub, we receive your verified email address and that provider's user ID. We use these to identify your Cloud Sync account. We do not receive your provider password.
- We store your synced profile and a revision number. A profile may include your widget appearance, Quick Access layout, alerts, and connection or media preferences. If you enable the app's profile encryption, the service stores the encrypted profile and cannot read its contents. Without it, the service can read the profile.
- We store a hash of each Cloud Sync session token, the device name supplied during sign-in, and session creation and last-use times. The app encrypts its local copy of the token using Electron's secure storage API.
- If you subscribe, we store your Stripe customer and subscription IDs, subscription status, and billing period information. Stripe handles payment details; Cloud Sync does not store your card number.
- When an account is deleted, we keep a keyed hash of each sign-in method's provider and user ID with the date the trial began. This prevents a deleted account from starting a new trial by signing up again. No email address or raw provider ID is stored.
- Service providers may process network and account information needed to deliver Cloud Sync.
How we use it
We use this information to sign you in, sync your settings, prevent conflicting saves, determine whether your account can save changes, manage subscriptions, and respond to support or security issues. Google and GitHub sign-in is used for identity and email only. We do not use Google or GitHub account data for advertising.
Providers and sharing
Cloudflare hosts the Cloud Sync service and database. Google or GitHub provides sign-in, and Stripe processes subscriptions. We share information with these providers as needed for those functions. We may also disclose information when required by law or to protect the service and its users. Each provider may handle data under its own privacy policy.
Retention and your choices
A device's service session is removed on sign-out, and sessions expire after 180 days without use. The Delete Account action first tries to cancel an active subscription. If cancellation fails, the account stays in place so billing is not left running without an account. After successful cancellation, the service deletes your identities, sessions, profile, and subscription record from its active database. To stop a deleted account's free trial from starting over, we keep a keyed hash of each sign-in method's provider and user ID, with the date the trial began, but not your email address or the user ID itself. Copies may remain temporarily in Cloudflare backup and recovery systems, and Stripe may retain payment records under its own legal obligations.
If your trial or subscription ends, you can still download your stored profile. Saving new changes requires an active entitlement. You can also use the app's free folder sync instead of Cloud Sync.
Security
The service uses HTTPS, stores only hashes of service session tokens, and checks profile revisions before accepting changes. Optional profile encryption is available in the app.
Requests and changes
To request access, correction, account deletion help, or to report a privacy or security issue, email robertgordon761@gmail.com.
We will post changes to this page and update its date. We will give additional notice when required by applicable law.