Privacy Policy
Last updated: October 16, 2026
In one sentence: DisplayPilot has no telemetry, no analytics, and no usage statistics. The app bundles no analytics SDK, and there is no request that reports how you use it. Below is exactly what it reads locally, and the only three things that ever reach the network.
1. What we collect
No usage data at all. No analytics, no event reporting, no crash-report uploads, no device fingerprinting, no advertising identifiers, no user profiling.
The only network request related to licensing is the one-time redemption of a short code (DP-XXXX-XXXX-XXXX). It sends exactly two things:
- The short code — the 12-character code shown on the order page after payment;
- A randomly generated device identifier — created locally as a UUID the first time you activate, and stored in the macOS Keychain. It contains no hardware serial number, MAC address, display EDID, machine name, Apple ID, or account information.
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 — no request is sent, now or later. The random identifier cannot be traced back to you or 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 and never contacts a server; only redeeming a short code makes one request, and it is made to our own service, not 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:
- display model, vendor ID, product ID, the full EDID, and physical color gamut;
- resolution, refresh rate, the current gamma table, brightness, and color temperature values;
- disk capacity, cache directory sizes, scan results, and cleanup records;
- window titles and positions (needed for window layout and session restore; readable only after you grant Accessibility permission);
- scroll wheel events and hotkey keystrokes (needed for scroll smoothing and mouse mapping).
And these we never touch at all:
- we don't upload your display model, EDID, or serial number — no such code path exists;
- we don't upload session length, feature click counts, or launch counts;
- we don't record keystrokes. Scroll smoothing reads only the displacement of scroll-wheel events; the keyboard is used solely to determine the single state “⌘ is held, bypass smoothing”;
- we don't request microphone, screen recording, or Full Disk Access permission. Storage scanning is read-only, and system-protected directories are skipped according to macOS rules;
- we don't capture screen or audio. There is no camera or microphone call anywhere in the app. (
Info.pliststill carries a legacy camera usage description left over from an early white-point comparison experiment; it has no corresponding implementation.)
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 — no request leaves your Mac, at activation or ever. A short code (DP-XXXX-XXXX-XXXX) is exchanged once, at redemption, with our own licensing service:
- Redeeming a short code: sends the short code plus the random device identifier described above, and receives the long signed code back;
- Long signed code: verified offline with the embedded public key. No account, no server, no periodic phone-home — the license never lapses because you were offline.
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 needs no network at all. The short-code redemption above is the only licensing request the app ever makes, and it goes 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
- License record (license key, instance ID, activation and re-check times): the macOS Keychain, under the service name
com.neeson.displaypilot.license. Not a plaintext plist. - App settings (trial start date, interface preferences, hotkey bindings, automation rules, eye-care schedule):
~/Library/Preferences/com.neeson.displaypilot.plist. - Cleanup quarantine and operation log:
~/Library/Application Support/com.neeson.displaypilot/Clean/. Files are moved into quarantine here first and can be restored for 30 days. - System permissions: Accessibility authorization is managed by macOS and can be revoked at any time in System Settings → Privacy & Security → Accessibility.
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
- Our licensing service (Cloudflare Workers): serves the order page, matches your payment against the blockchain, issues the activation code, and answers a short-code redemption. It sees the order number, the on-chain transaction hash and amount, and the random device identifier; it does not see your name or account, and it keeps no profile of you. If you buy through a channel that collects an email address, or if you use the recovery form, it also handles that address: stored with the order record (which we keep, so that recovery keeps working) so your code can be re-sent, and a truncated SHA-256 hash of it is stored and embedded in the signed code so the form can match your order without comparing raw addresses.
- Public blockchain APIs (for example TronGrid and public RPC endpoints): the licensing service reads public chain data to confirm your transfer. No personal data is sent to them.
- GitHub: hosts this website, the update manifest, and the download. As the host it keeps ordinary access logs (IP address, time, request path).
Beyond these, the app and this website have no analytics service, ad network, social plugin, or third-party font.
6. Children
DisplayPilot 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