Privacy Policy

Last updated: October 18, 2026

In one sentence: LumePane has no telemetry and no analytics in the app. The app bundles no analytics SDK and never reports how you use it. Our licence service does keep a handful of aggregate counters — described in the next paragraph, and the only thing here that could be called analytics.

The counters we keep. The licence service counts six events: a checkout click, an order created, an order paid, a code claimed, a success page served, and a short code redeemed — per day and per ?src= campaign tag. The counters contain no identifier: no IP address, no cookie, no device id, nothing that could be linked to a person. They exist so we can tell which channel is worth the effort.

Abuse protection is separate. Requests to the order, success and retrieval pages are rate-limited. The rate-limit keys use a truncated SHA-256 of the client IP address and expire automatically: about 15 minutes for the success and retrieval pages, and 10 minutes for activation. Retrieval attempts also write an audit row containing that truncated hash, a truncated hash of the order id and the outcome; the row is kept for up to 30 days so abuse can be investigated. Rate-limit keys and audit rows are not part of the aggregate counters above.

1. What we collect

No usage data at all about you. No analytics, no event reporting, no crash-report uploads, no device fingerprinting, no advertising identifiers, no user profiling.

Licensing contacts the network in two situations: the one-time redemption of a short code (DP-XXXX-XXXX-XXXX), and the one-time device registration on first activation. Short-code redemption sends exactly two things:

Device registration: after an activation code verifies, the app contacts our own server once to register this Mac — it uploads only an irreversible SHA-256 digest computed locally from the board identifier and the model identifier, never a serial number or plaintext model string. The digest is stable for a given Mac, which is what makes the five-Mac limit enforceable; it is pseudonymous, not anonymous. After that, every launch is verified locally.

That request only asks the licensing service to exchange the short code for the long signed activation code belonging to that order. A code beginning with DP- (the long signed code) is then verified entirely offline with the public key embedded in the app. On first activation the app also registers this Mac once, as described above; after that, every launch is verified locally. The random identifier cannot be traced back to your device model.

Current status: checkout is live. Payment is in cryptocurrency through our own checkout and licensing service. A DP- activation code is verified offline. Two things use the licensing network: redeeming a short code, and registering the device on first activation. Both go to our own service, never to a third party.

2. What we don't collect

These are things the app uses but processes only locally on your Mac. They are never uploaded:

And these we never touch at all:

3. Only three things reach the network

Apart from the three items below, the app initiates no network requests. Everything is HTTPS; plaintext HTTP is never used.

1. Checking for updates

The app requests a version manifest from appcast.xml to see whether a newer version exists. That manifest is hosted alongside this website on GitHub Pages. The request contains no license key, no device identifier, and no usage data. It is off by default: it is only sent if you turn on automatic checking in the General panel (at most once a day thereafter), or click “Check for Updates” yourself.

The host, GitHub, sees your IP address, the request time, and a client identifier, exactly as any web server would. That is the host's ordinary access log, not something we collect on top of it.

2. Verifying a license

This only happens when you activate. A long signed code (DP-…) is verified locally, offline, with a public key built into the app — its verification never sends a request. A short code (DP-XXXX-XXXX-XXXX) is exchanged once, at redemption, with our own licensing service:

We have deliberately made this offline-first: a failed re-check, a dropped connection, or a server outage never changes your license state — it only records an error. If re-checks can't get through for a long time, there is still a 7-day grace period during which everything keeps working. Until you activate, the app sends no license request at all and asks for no account.

Current status: this is live. A long DP- code is verified offline. The only licensing requests are the one-time device registration on first activation and, if you use one, the short-code redemption above; both go to our own service. Until you activate, the app sends no license request at all and asks for no account.

3. Opening the purchase page or the website

When you click “Buy” or “Visit website”, the address opens in your default browser. Payment happens in your browser, not through the app. The purchase entry point is the order page served by our licensing service; it uses the browser you already have and installs nothing.

4. Where your data lives

To remove everything: quit the app, then delete the two directories/files above; for a thorough job, also delete that one Keychain entry in Keychain Access. The app installs no background service or daemon, and uninstalling leaves no resident component behind.

5. Third parties

Beyond these, the app and this website have no analytics service, ad network, social plugin, or third-party font.

6. Children

LumePane is a desktop tool for Mac users. It is not designed for children, and it does not knowingly collect any information from children.

7. Changes to this policy

If a future version changes the app's network behavior — for example, adding cloud sync — this policy will be updated first, and the changelog will say what changed. We will not quietly widen what we collect behind a “continued use means acceptance” clause.

8. Contact

If you have questions about this policy, or want to check which license information is held about you, please open an issue on GitHub.

← Back to home