WristVitals

Privacy policy

Effective 22 October 2026 · Applies to the website wristvitals.com, the WristVitals Android app and WristVitals Cloud (cloud.wristvitals.com)

The short version

  • The app keeps your health data on your phone. It talks to your watch over Bluetooth and to nothing else unless you turn something on.
  • WristVitals Cloud stores ciphertext. Your phone encrypts your data with keys only you hold. We can see that encrypted blobs exist (which category, which day, how big), your username and whom you share with. We cannot see a single reading, and we cannot recover your data if you lose your recovery key.
  • No ads, no analytics, no trackers, no selling or sharing of data, no profiling. On the website, in the app and on the cloud.
  • You are in control. Export everything from the dashboard at any time; delete your account and it is purged immediately.
  • A self-hosted WristVitals server is run by whoever installed it, not by us. This policy covers only our own services.

1. Who is responsible

WristVitals is a personal open-source project. The controller for the website and for WristVitals Cloud is Igor Kuz, an individual located in California, USA, not a company. You can reach me at info@wristvitals.com for anything in this policy, including privacy requests.

"We", "us" and "our" below mean the operator. "You" means a person using the website, the app or WristVitals Cloud.

2. What this policy covers

Self-hosted servers are not covered. The server software is free and anyone can run it. If you use a WristVitals server run by a family member, a friend or an organisation, that person or organisation is responsible for it. The software behaves as described in sections 5 and 6, but what the operator logs, backs up or keeps is their decision. Ask them.

3. The website

wristvitals.com is a static site. It sets no cookies, loads nothing from third parties (the typefaces are served from the site itself), runs no analytics and contains no tracking pixels. The one thing the front page fetches is a small file on this site, /download/latest.json, to show the current app version.

Web server logs. Like any web server, ours may keep a standard access log (your IP address, the time, the page or file requested and the browser's identification string) to diagnose problems and spot abuse. These logs are not used for anything else and are deleted after no more than 30 days.

Contact form. When you use the form on the contact page, your browser sends your name, email address, chosen topic and message to WristVitals Cloud, which turns it into an email to us and does not store the message. Your IP address is used only to limit how many messages one address can send per hour and is kept in memory, not written anywhere. The email then lives in our mailbox for as long as needed to answer you and keep a record of the exchange. You can always write to info@wristvitals.com directly instead.

Downloads. Downloading the app is an ordinary file download; the only record is the access log above.

4. The Android app

The app is designed to work without any network connection. Everything it records from your watch and everything you enter is stored in an encrypted database on your phone, protected by the Android Keystore. No account is needed, and the app never contacts Withings.

The app makes a network connection only in the situations below. Each one is off until you turn it on, except the connection to a server you have deliberately linked.

ConnectionWhenWhat is sent
Your watch (Bluetooth)Always, to sync and control the watchWatch commands and settings; readings come back to the phone. Notifications you choose to forward go to the watch over Bluetooth only.
A WristVitals server (WristVitals Cloud or your own)Only after you link the app to oneEncrypted blobs of your data, your phone's public key, and encrypted alerts and command results. The server never receives readings in the clear. See section 5.
wristvitals.com (app updates)Only if you turn on automatic update checks, or tap "Check now"A plain request for /download/latest.json, then the APK if newer. Nothing about you or your phone is sent beyond the request itself. The download's checksum is verified before installing.
Open-Meteo (weather for walk reminders)Only if you turn on the weather checkYour location rounded to 0.1° (roughly 10 km) and nothing else, to api.open-meteo.com. Cached for 30 minutes.
OpenStreetMap (map tiles under a walk's route)Only if you switch the walk map from "private" to OpenStreetMap, or in the dashboard tick "Show map"Which map squares to draw. The route itself is never sent. The default "private" map draws the route with no map and downloads nothing.
Google Maps (open a walk in Google Maps)Only if you tap "Open in Google Maps"The start, end and a few waypoints of that walk, passed to the Google Maps app or website under Google's own privacy terms.
Webhooks (Home Assistant, ntfy, any URL you enter)Only if you add a webhookThe events you select (alerts, finished walks, logged weight), sent directly from the phone to the address you entered, optionally signed. The server is not involved.
Health Connect (on the phone, not a network connection)Only if you turn on the exportSteps, distance, calories, heart rate, HRV, SpO2, temperature, breathing rate, sleep, weight and workouts (without routes) are written to Health Connect on your phone. The app never reads from Health Connect. Other apps you allow in Health Connect can then read that data.

Notification access. If you turn on notifications on the watch, the app reads the phone's notifications (calls, messages, the apps you pick) to forward them to the watch over Bluetooth. They are not stored and never leave the phone except to the watch. You can also forward titles only, without content.

Location. GPS is used for walks you start, and Android requires the location permission to scan for Bluetooth devices on some versions. Routes are stored on the phone and, if you link a server, uploaded encrypted like everything else.

Crash logs. If the app crashes, the stack trace is kept in a file on your phone so that the Diagnostics screen can show it. It is not sent anywhere unless you choose to share it with us.

Backups. Backups you create are encrypted files that you keep and move yourself. CSV, PDF and GPX exports are plain files you create on purpose.

5. WristVitals Cloud

WristVitals Cloud is the hosted edition of the WristVitals server, for people who cannot run their own. It is zero-knowledge by design: health data is encrypted on your phone (and in your browser) with keys derived from a master key that we never receive, and the server stores and relays ciphertext. The encryption is documented in docs/crypto.md in the source code, and the service runs the published source.

What we store for an account

RecordWhat it contains
AccountUsername, a password hash (argon2id), whether the account is an admin, your public key, when it was created.
Browser sessionsA hash of the session cookie, which account, when it expires (30 days), whether it was started from a phone code.
Phones and toolsThe name you gave the device, a hash of its token, its public key, when it was added and last seen.
Encrypted data blobsThe ciphertext, which category it belongs to (heart, sleep, activity, SpO2, ECG, temperature, body, workouts, events, status, device, control), its day or time bucket, its size, when it was last updated and which of your devices uploaded it.
SharingWhom you share with, which category, the category key sealed to that person (which we cannot open), when. Family links between accounts.
Commands and alertsEncrypted command and result ciphertext for your devices, encrypted alert ciphertext for caregivers, with timestamps and whether they were delivered or seen.
Report linksThe encrypted report, whether a PIN is needed (and a hash to check it), expiry, the view limit and count, and the time of each opening. No IP addresses.
Doctor visit linksThe encrypted key box, which categories and from which date the visit may read, its time window, state, the number of wrong codes, whether we emailed the link, and for each opening the time plus the doctor's name and agreement sealed to your key (readable only by you). No IP addresses and no email addresses.
Push subscriptionsThe Web Push or UnifiedPush endpoint URL and its keys, so we can wake your browser or phone. Push messages carry no health data, only "something new".
Invites and link codesHashes of one-time codes, who made them, expiry, whether they were used.
Account eventsWhat happened to your account (signed in, device linked, share added, report link created, visit opened and similar), with a time and, for some, a short detail such as the device name you chose. No IP addresses. Shown to you on the Account page, kept one year.
Storage useThe total size of your blobs and report links, checked against the 200 MB quota.

What we do not store

6. What we can and cannot see, honestly

Encryption hides the content of your data, not its shape. Here is what the metadata could tell someone with access to our database:

We do not analyse this metadata, build profiles from it, or share it. It exists because the server needs it to route and serve your ciphertext. We wanted you to know it exists.

7. Email we send

Accounts have no email address and we send no newsletters. We send email in exactly two cases:

These emails go through an email delivery provider (section 10), which sees the recipient address and the message, as any email provider does.

If you are in the European Economic Area, the United Kingdom or another place with similar law, we process data on these bases:

9. How long we keep things

10. Who else handles data

We do not sell, rent, share or trade any data. The following parties handle data on our behalf or as a consequence of how the internet works:

11. International transfers

Our servers are in the United States. If you are outside the US, your data (ciphertext and the metadata described above) is stored and processed there. For people in the EEA, the UK and Switzerland, the United States does not have a general adequacy decision that covers an individual operator, and we cannot offer corporate transfer mechanisms. We rely on your explicit consent to the transfer (Art. 49(1)(a) GDPR), given when you create an account after reading this policy, together with the strongest safeguard we know: the data that is transferred is end-to-end encrypted with keys we never have. If that is not acceptable to you, use the app in phone-only mode or run your own server where you are.

12. Security

No system is perfectly secure. If we learn of a breach that affects you, we will tell you by the means we have (the dashboard and this site; we have no email address for you) and notify authorities where the law requires it.

13. Your rights

Wherever you are, you can:

To exercise a right we cannot serve through the dashboard, write to info@wristvitals.com. Because accounts have no email address or name, we will ask you to prove you control the account (for example, by signing in and triggering an account event we can see) before acting on a request about it. We answer within a month.

14. California privacy rights

If you live in California, the California Consumer Privacy Act as amended by the CPRA gives you rights that largely overlap with the ones above. For clarity:

15. Children

WristVitals Cloud is not for people under 16 (under 13 in the United States), and we do not knowingly hold accounts for them. A parent or guardian may wear-manage a child's watch through their own account and the app's family features; the account is the adult's. If you believe a child has created an account, tell us and we will delete it.

16. Changes to this policy

When this policy changes, the new version is published here with a new effective date, and the dashboard's sign-up form links to it. For changes that matter (new data we keep, new recipients, a new legal basis) we will also announce it on the dashboard's sign-in page for at least 30 days before it takes effect. The history of this page is in the source repository.

17. Contact

Igor Kuz · California, USA · info@wristvitals.com · contact form