Privacy Policy
Effective: August 20, 2026
Mighty separates app telemetry from purchase and license records. Anonymous app analytics and crash/performance diagnostics start disabled and run only after explicit opt-in. Both have independent controls in Mighty → General → Privacy & Diagnostics and can be enabled or disabled at any time. Anonymous identifiers can still be pseudonymous data under privacy law; I therefore apply the safeguards, retention limits, and data-subject process described below.
Which versions this applies to. The analytics and diagnostics code described in section 1 exists only in Mighty 2026.8.1 and later. Releases up to and including 2026.7.16 contain no analytics or diagnostics code at all and cannot send telemetry under any setting. 2026.7.16 is the current stable release, and it is what brew install --cask mikezamayias/mighty/mighty installs today. Mighty 2026.8.1 is currently available on the mighty@beta channel. Everything else in this policy, including the licensing, purchase, and website sections, applies to all versions.
1. What I Collect
When you opt in on a version that includes them, Mighty collects these data categories:
- Anonymous product analytics — via PostHog, using EU ingestion and hosting. Mighty sends explicit events for app startup and navigation, onboarding and permission outcomes, device discovery and responsiveness, setting outcomes, low-battery notifications shown, paywall-configuration fetch outcomes, profile and mapping adoption, license-flow outcomes, Launch at Login, updates, and support actions. PostHog assigns a random persistent device-level identifier so events can form one anonymous app session history; opt-out and re-enable reset it. Properties are fixed categories, booleans, bounded counts, coarse buckets, and capped durations. Every event name and every property is checked against a closed allowlist before it leaves your Mac, and anything not on that list is dropped. Person profiles are disabled and Mighty forces geolocation lookup off on every event; the EU project is configured to discard client IP addresses. Your IP address is still visible to PostHog at the network layer, as it is for any request, before it is discarded. Mighty never identifies, aliases, or groups a user.
- Crash and performance diagnostics — via Sentry, using EU-region projects. Mighty sends crashes, app hangs, release health (so I can see a crash-free rate per release), sanitized operation failures, and manual performance spans. In production only a sample of performance spans is sent. Default PII, request and response data, profiling, logs, network and automatic breadcrumbs, screenshots, and view hierarchy are disabled. Before an event is sent, Mighty strips the user, request, context, and extra fields, clears your Mac's machine name, replaces every exception message and type with one of two fixed strings, and keeps only two tags. Breadcrumbs are rebuilt from a closed catalogue of fixed messages, so no free-form text reaches a crash report.
- User-requested update availability — when you choose “Download Latest Version,” Mighty opens its download page and fetches a small version manifest from mighty.mikezamayias.com. That request sends no version number and no identifier; the comparison happens on your Mac. The site and its delivery provider may process standard connection data, including your IP address, to return that file. Mighty sends PostHog only the check outcome, duration, a boolean saying whether a newer version exists, and the fact that you opened the download page; it never sends the manifest, your installed version, the request URL, the response body, or your IP address through app telemetry.
- Purchase and license data — only if you buy Mighty Pro through Polar. Mighty stores the minimum license, order email, and order records needed for license validation, support, refunds, and abuse prevention. Activating a license also sends a per-Mac identifier derived from your Mac's hardware UUID. This data is not anonymous and is described in section 4. It is kept entirely separate from the anonymous telemetry above.
- Device data — Mighty reads the local mouse information needed to display battery status and apply settings, such as device name, vendor/product identifiers, connection state, battery level, DPI, polling-rate, button, and profile settings. This device data is processed locally unless you choose to send diagnostics for support.
2. What I Do NOT Collect
Except where noted, these statements are about app telemetry. The separate licensing path in section 4 is described there.
- No account is required to use Mighty, on any tier
- No advertising, cross-product tracking, person profiles, or telemetry tied to a license/customer identity
- No data is sold, and none is disclosed to anyone other than the providers named in this policy
- No third-party ad networks or trackers, in the app or on this website
- No license keys or fragments, customer email, Polar IDs, machine names, or usernames in app telemetry
- No device or receiver serials, runtime IDs, slot IDs, raw product identifiers, or model names in app telemetry
- No profile names, bound application bundle IDs, application names or paths, exact DPI, exact polling values, or exact battery percentages in app telemetry
- No button presses, key sequences, HID packets, support report/email contents, raw errors, URLs, query strings, authorization headers, request bodies, or response bodies
- No keystrokes, file contents, browsing activity, clipboard contents, or personal documents
- No Session Replay, screen or mouse-movement video, screenshots, text-field capture, or view hierarchy. Mighty does not enable or use any of these.
- No data is sent to Logitech. Mighty makes no network request to Logitech under any circumstances.
Support reports are a separate case. When you choose to send a support report, Mighty composes a message containing your active device details, DPI and polling readback, capability list, and battery level, and either copies it to your clipboard or opens it in your mail client. Nothing is sent until you send it yourself, and none of that content goes to PostHog or Sentry.
3. Payment Data & Merchant of Record
If you purchase the Pro tier, Polar handles all payment processing as the Merchant of Record. This means Polar is the seller of record for your purchase and collects and remits applicable sales tax and EU VAT. The division of consumer-protection responsibility between Polar and me is set by Polar's Merchant-of-Record terms, linked below; this policy does not enlarge or reduce it, and it does not remove any right you have against me as the developer.
I do not receive, store, or have access to your payment details (credit card numbers, billing address, etc.). Polar is the data controller for your purchase data and processes it under their own privacy policy: polar.sh/legal/privacy. Their MoR + tax disclosures are published at polar.sh/legal/terms.
4. License Keys & Activation Data
When Polar issues you a license key for Mighty Pro, a webhook delivers the key, the email address you used at checkout, and the order metadata to my Cloudflare Worker (mighty-api) so I can fulfil and validate your license. I store the following in Cloudflare Workers KV:
- A masked form of the license key (the last six characters only) and its current state: active, expired, deactivated, or refunded. Some older records still hold the full key.
- The order email address, used to look up your license if you contact support. It is stored in plain text, and also forms part of the storage key for an email-to-licence index.
- Order records containing the order ID, amount, currency, timestamps, and your email address.
- An audit log entry for each admin action and each Polar webhook. These are stored in plain text and are chained together by hash so that later edits are detectable.
These records are stored as plain JSON. Cloudflare encrypts data at rest at the platform level, but I do not add any encryption of my own on top of that. Cloudflare Workers KV is a global service and I do not use a region-restricted namespace, so I cannot promise that these records stay inside the EU.
When the Mighty app calls /api/activate, /api/validate, or /api/deactivate, those requests go to mighty-api, which forwards them to Polar. Each call includes your license key and a per-Mac identifier: a shortened SHA-256 hash of your Mac's hardware UUID, which is not reversible back to the UUID but is stable for that Mac and is therefore linked to your licence. That identifier is stored by Polar as the activation label. My Worker does not store it. The Worker never sees your card number or full billing address.
If you request a refund, the corresponding Polar webhook marks your license as revoked in my storage, and the next activation or validation check refuses it.
Audit log entries record the calling IP address and the first 100 characters of the User-Agent, and are deleted automatically after 365 days. These entries cover admin actions and Polar's webhook calls; the app's own activation and validation calls are not audit-logged. Your IP address is used briefly as a request-throttling key with a 60-second lifetime, and is processed by Cloudflare in its normal edge logs.
Order, license, and email-index records are currently kept without an automatic expiry, and there is no scheduled clean-up job. In practice that means they are retained until deleted by hand, including in response to a deletion request under section 7.
5. This Website
The Mighty website sets no cookies of its own, not even essential ones, and reads nothing from your browser's storage. There are no tracking cookies and no advertising cookies, so there is no consent banner to click. Website analytics is not enabled: the analytics plugin is a stub that collects nothing, and both the browser and server error-reporting configurations are disabled with no destination configured. Session Replay is not used. The privacy controls in the macOS app are separate and do not switch on any website telemetry.
Fonts are served from this site, not from a third-party font service, so loading a page does not reveal your visit to any font provider. The site loads no third-party scripts, tag managers, embeds, or images.
The site is hosted on Cloudflare Pages. As with any website, Cloudflare processes your IP address and request metadata in order to serve the page and keep it available. The home and pricing pages also fetch current pricing from my own Cloudflare Worker; that request carries no identifier beyond the connection metadata any HTTP request necessarily includes.
The Polar checkout is not embedded in this site. The purchase button is an ordinary link that opens the checkout on a Polar domain in a new tab. Polar sets its own cookies there, required for the checkout to function and for fraud prevention, governed by Polar's privacy policy. No Polar cookie is ever set on this site.
6. Controls, Withdrawal & Retention
PostHog analytics is opt-in. Its current EU project plan allows delivered analytics events to be retained for up to 84 months (seven years). I should be plain about what that figure is: it is the ceiling permitted by the plan, not a deletion schedule. No automatic deletion is currently enforced on that project, so you should assume delivered analytics events persist until the ceiling is reached or I delete them by hand. This retention exception is approved for Mighty 2026.8.1; later releases require a new review. Sentry diagnostics is retained no longer than 90 days, and the EU projects are currently configured for 30-day retention.
Disabling either switch immediately stops future collection by that system. Mighty deletes queued, undelivered PostHog batches, along with the stored anonymous identity, before analytics can restart; it cannot remove events already delivered. Re-enabling starts a fresh SDK session and a fresh anonymous PostHog identity. Telemetry preferences never change app functionality, device access, licensing, Pro features, or support access. License and order records are retained as described in section 4, for as long as needed to validate purchases, handle refunds, support customers, keep audit history, and meet legal or accounting obligations.
7. Legal Basis, GDPR & Deletion
Mighty is built and operated from the EU (Greece). Both analytics (PostHog) and crash reporting (Sentry) use EU projects. I rely on your consent for this optional collection. Both controls start disabled, and you can withdraw consent at any time by disabling either control. Depending on context, anonymous identifiers may be pseudonymous personal data, so GDPR rights are not dismissed merely because Mighty does not intentionally collect direct identifiers. Note that the licensing and website infrastructure described in sections 4 and 5 runs on Cloudflare, which is not EU-restricted.
For Pro purchases, Polar is the data controller for the order, billing, and tax data required to issue your receipt. As an EU consumer you have the right to access, correct, and delete that data, and a 14-day right of withdrawal under Directive 2011/83/EU. That right can be lost for digital content only where you gave prior express consent to immediate delivery and acknowledged losing the right; whether that happened is determined by Polar's checkout, which I do not operate. Independently of that, the 30-day money-back guarantee in the Refund Policy is offered to every buyer. Polar applies the VAT rate for your country at checkout and remits it to the relevant tax authorities; no additional VAT is charged by me. Refunds and chargebacks are described in the Refund Policy.
To request access, correction, objection, restriction, portability, or deletion for data I control, contact support@mikezamayias.com. Include only enough information to locate the relevant license or support record. Truly anonymous telemetry may not be technically linkable back to you; if a vendor identifier is available, I will use the vendor's approved deletion process. Polar remains separately responsible for purchase, billing, and tax data.
8. Children's Privacy
Mighty is not directed at children under 13. I do not knowingly collect data from children. Paid purchases and license management should be handled by an adult.
9. Changes to This Policy
I may update this Privacy Policy from time to time. Changes will be posted on this page with an updated effective date. Continued use of Mighty constitutes acceptance of the revised policy.
10. Contact
Questions or concerns about this Privacy Policy? Reach out:
support@mikezamayias.com
Purchases and refunds are processed by Polar (merchant of record); Polar's registered business details appear on your receipt.