Privacy and local data
DevSweep scans and hashes files locally. It requires no account. The app includes no advertising, telemetry or crash-upload SDK.
Licence activation — what is sent, once
This page used to say no activation server was ever contacted. That is no longer true, and the change is deliberate. A licence now covers a set number of Macs, and seats cannot be counted without somewhere to count them.
The first time you activate a licence, DevSweep sends three things to devsweep.app:
- the licence key you were emailed;
- a SHA-256 hash of this Mac's hardware UUID — not the UUID itself. We cannot reverse it, and could not identify your machine from our own records without already knowing the answer;
- the name of this Mac, as it appears in System Settings, so that you can tell your own machines apart when you need to free a seat.
What comes back is the same licence, re-signed to include that hash. It is stored on your Mac and checked locally from then on. After activation the app never contacts the licence server again — not on launch, not periodically, not at all. DevSweep works with no network.
Releasing a seat, from Settings under Plan, sends the same key and hash so the seat can be freed. Nothing else is stored: no IP address is retained, no scan results, no paths, no filenames.
One exception, stated up front: DevSweep can check for its own updates. That check is off until you enable it, and it is described in full under Network behaviour.
What is stored
- Preferences, configured project folders, protected paths and the optional licence key: macOS UserDefaults for com.devsweep.DevSweep.
- Cleanup receipts: ~/Library/Application Support/DevSweep/history.json. Receipts contain paths, item identifiers, dates, classifications, actions, results and regeneration guidance. They remain until you remove the history file. Corrupt history is preserved and blocks new cleanup rather than silently resetting the record.
- Storage trends: one local capacity sample per day, retained for 90 days. Samples contain dates and free/total byte counts, not filenames. Use Settings → Clear trend to delete them.
- Duplicate hashes and candidate paths: memory only for the current view; they are not uploaded or written as a scan database. Approved duplicate removals produce normal cleanup receipts.
- Update preferences: whether automatic checks are enabled, and the date of the last check, in the same UserDefaults domain. The update signing key stored in the app is a public key only.
- macOS may retain its own local crash reports according to system policy. DevSweep does not collect or transmit them.
Network behaviour
DevSweep itself does not upload scan results, paths, hashes or source code. Git inspection uses local refs and does not fetch or verify the current remote state. Installed tools invoked by the app retain their own behaviour. Homebrew auto-update and analytics are disabled for DevSweep commands. Some tool operations and subsequent regeneration may access their registries; offline regeneration is not guaranteed.
Update checks — the one exception
DevSweep can check whether a newer version exists. This is the only request the app makes, and it is the only part of DevSweep that is not local.
- It is off until you turn it on. Settings → Updates. Nothing is checked before that.
- What is sent: an ordinary HTTPS GET for the release feed. No identifier, licence key, scan result, path or machine profile is attached. System profiling is disabled in the bundle. As with any web request, the host sees your IP address and the app version in the user agent.
- Where it goes: the release host named in Settings, which is the same host the app was downloaded from.
- What comes back: a signed list of releases. Every update is verified against DevSweep's Ed25519 update key before it is allowed to replace the app; an update that fails verification is discarded.
- Nothing installs itself. Automatic download and automatic installation are both disabled in the bundle. An update is applied only when you choose to apply it.
This exists because DevSweep is not distributed through the App Store. Without an update channel, a safety defect in a tool that deletes files could not be corrected on a machine that already had it installed.
Remote crash reporting is not enabled. Any future network feature requires explicit configuration and an updated disclosure. Optional macOS notifications are local notifications, with no DevSweep push server.
Permissions and exclusions
Full Disk Access is optional. Skipped locations and incomplete measurements are shown. Choosing a folder for duplicate detection authorises local inspection only; moving copies to Trash requires a separate confirmation. Protected personal locations and source trees are excluded from duplicate cleanup. Do not share receipts or exported screenshots unless you intend to disclose the paths they contain.
Who is responsible for your data
The controller is Marcelo Martins, trading as DevSweep, in Portugal. Anything on this page, and any request about your data, goes to support@devsweep.app.
The sections above describe the application, which is the part that handles almost nothing. The sections below describe the website and the licence system, which is where your data actually is.
What the website and licence system process
- Issuing and delivering your licence. Your email address, the purchase timestamp and the order reference. Legal basis: performance of the contract — you bought a licence and this is how it reaches you. Your name and billing country stay with the payment provider; we do not copy them.
- Counting seats. Your email address, the licence date, a SHA-256 of a machine identifier your Mac computes locally, and a machine name you chose. Legal basis: performance of the contract — the seat limit is a term of the licence. The hash cannot be turned back into a serial number, and no IP address is stored.
- Diagnosing failures. Server logs with timestamps, status codes, error messages and order references. Legal basis: legitimate interest in a working service. Email addresses are not written to logs; a non-reversible pseudonym stands in so two lines of the same incident can be matched without identifying anyone.
- Counting visits. See the cookies and device storage page. Nothing is stored on your device and no IP address is collected, so there is nothing here that identifies you.
Who else touches it
Running a shop means using other companies. Each acts on our instructions under a data processing agreement, and none may use your data for their own purposes.
- Creem — takes the payment and holds the billing details we never see in full.
- Resend — delivers the licence email.
- Neon — the database holding licences and activations.
- Vercel — hosts the site and the licence endpoints, and keeps their logs.
- PostHog — website analytics, on European infrastructure in Frankfurt.
Some of these are companies based outside the European Economic Area. Where data reaches them, the transfer relies on the European Commission's standard contractual clauses. Our full record of processing, including which agreements are in place, is kept alongside the source code.
How long it is kept
- Licence and activation records — for as long as the licence is valid, then erased on request.
- Analytics — twelve months, and attributable to nobody in any case.
- Server logs — the hosting platform's retention period.
- Invoices — as long as Portuguese tax law requires, typically ten years. This one overrides a deletion request, and we will say so if you make one.
Your rights
You can ask for a copy of your data, correct it, have it erased, receive it in a portable format, or object to the processing we base on legitimate interest — which here is only the server logs. Write to support@devsweep.app. We verify identity against the email address the purchase was made with, and answer within one month.
Erasing your licence data means the licence stops working: seat counting has nothing left to count against. We will say so before doing it, not after.
If you think we have handled your data badly, please tell us first — but you are entitled to complain directly to your national supervisory authority. In Portugal that is the CNPD.
Automated decisions
None. Nothing here profiles you, scores you, or decides anything about you automatically.