WLED Max Privacy Policy
Last Updated: October 12, 2026
MeowScript LLC
This WLED Max Privacy Policy supplements our Company Privacy Policy. It explains, in plain language, what the WLED Max app for iOS and Android (version 1.1.2 and later; features marked 1.1.4 arrive with that version) sends to MeowScript, what stays on your phone, and the choices you have.
The Short Version
- Controlling your lights happens directly between the app and your WLED devices on your own network. Your device names, IP addresses, presets, colors and Wi-Fi details stay on your phone and your own devices (on iOS, your lights, groups and app presets also sync through your own iCloud account unless you turn Sync with iCloud off). We receive them only if you choose to send us a diagnostics report.
- WLED Max does use MeowScript servers for a few things: usage and purchase stats (which you can turn off), error reports (which you can turn off), support conversations you start and, only while you have one, checking for replies to it and reply notifications. Starting with 1.1.4, usage stats also include the words you search for in the in-app guides and, on iOS, Apple Ads attribution for new installs.
- Usage stats are daily counts of which features and screens you use, plus a few events such as onboarding, adding devices, purchases, firmware updates and error codes. They also include your country, which Cloudflare determines from the network address the stats are sent from. They never include the names of your effects, palettes, presets or devices, or anything you type, except guide searches, which the app cleans first (Section 2). They are stored on your phone and sent at most once a day.
- Usage stats are tied to a random install ID, not to your name or your Apple/Google account. If you give us your email in Contact Us, see Section 2 for how to keep the two apart.
- Usage stats are on by default, except in the EEA, UK and Switzerland, where they stay off unless you say yes. You can switch them off (or on) anytime in Settings.
- We do not sell your data or share it for advertising, we don't show ads, and we don't use advertising IDs or third-party tracking or analytics SDKs. On iOS we use Apple's own ad attribution only to measure our own Apple Ads campaigns (Section 2). We use a few service providers to run the app (Section 7).
1. What Stays on Your Device
The following is stored on your phone or tablet (and, on iOS, some of it in your own iCloud account, see Section 8). We do not receive it, unless you choose to send a diagnostics report (Section 3):
- Your WLED devices' IP addresses, names, groups and room assignments
- Presets, favorites, colors, effect settings, segments and other light settings
- Your Wi-Fi network name and password (sent only to your WLED device during guided setup, see Section 8, and included in device backups you create, which stay on your phone)
- App preferences
Deleting the app removes this local data from that phone (on iOS, lights, groups and presets synced to your iCloud account stay there). Reset All Data in Settings also deletes it from the phone, but on iOS not from your iCloud account (the app turns Sync with iCloud off first, so your other Apple devices keep their copy). Neither one deletes data already on our servers (see Section 7), and on iOS neither removes the install ID kept in your iCloud key-value storage (see Section 2).
Android: backup and moving to a new phone
If backup is turned on in your Android phone's settings, Android's Auto Backup copies part of WLED Max's data to your Google account, and the same part is copied when you move to a new phone with Android's transfer tool. Google describes Auto Backup like this: "Android preserves app data by uploading it to the user's Google Drive, where it's protected by the user's Google Account credentials", and "The backup is end-to-end encrypted on devices running Android 9 or higher using the device's PIN, pattern, or password." MeowScript does not receive this backup.
- Included: your saved WLED devices (name, IP address and port, hardware (MAC) address, firmware version, LED count, product and chip type, and the status the app last saw, such as on/off, brightness, color, effect and palette), groups, global presets, favourites and recent colors, Quick Effect settings, Matrix Studio designs, the preset strip and preset icons you chose for each light, and selected app settings (theme, haptics, whether help buttons are shown, brightness display, notification choices, extra subnets you added for device search, whether you've seen the welcome guide and What's New, your Quick Effect list, your Circadian city and its coordinates, and widget colors).
- Not included: the WLED device configuration backups you create (they contain your Wi-Fi, MQTT and update passwords), your stats ID and install ID, your stats and error-report choices, support conversations, the notification token, your upgrade status, the free-plan re-add waiting times, and widget placements.
- After a restore or transfer, WLED Max starts with a new stats ID, and your stats setting starts like a new install: in the EEA, UK and Switzerland you are asked again; elsewhere stats are on by default, even if you had turned them off on your old phone. Send Error Reports is on again (its default). The app checks your upgrade with Google Play again. Support conversations from the old install are not shown on the new one.
Android: Export and Import
Under Settings > Backup & Restore > App Data you can export your devices (without the status the app last saw), groups, global presets, Matrix Studio designs, favourites, Quick Effect settings and the app settings listed above to a file, which you save with Android's file picker wherever you choose. The same things are left out as in Android backup, including passwords and your upgrade status. The file is not encrypted and contains your devices' IP and hardware addresses; as the app says, "The file isn't encrypted, so keep it somewhere private." The app does not send the file to MeowScript. Import reads such a file back, either adding what's new (Merge) or replacing the matching data on the phone (Replace).
iOS: WLED Max for iOS has no in-app export or import of its data. On iOS, the install ID is kept in your iCloud key-value storage (Section 2), so it can survive reinstalling the app.
2. Usage and Purchase Stats ("Help shape WLED Max")
Default setting and your choice
- In the European Economic Area (EU countries, including their outermost regions, plus Iceland, Liechtenstein and Norway), the United Kingdom and Switzerland, or if the app can't determine your country: stats are off until you agree. The app shows a one-time card: "WLED Max grows with its community. May we collect usage and purchase stats tied to a random ID? It shows us what to improve and build next. Nothing that identifies you by name, never sold and never used to show you ads. You can change this anytime in Settings." with two equally prominent buttons, Count me in and No thanks. The card can't be closed without choosing. Nothing is collected or sent, not even the one-time registration, unless you tap Count me in.
- Everywhere else: stats are on by default from when you first open the app (as soon as the app has determined your store country). There is no card or notice. You can turn them off anytime in Settings. This includes the one-time registration described below, so your stats ID and country are stored on our server from your first use of the app unless you turn stats off.
- If you turn stats off (in Settings, or with No thanks on the card), they stay off in every region and you are not asked again. This includes a "Turn off" choice made on the notice shown by earlier builds of the app.
- To decide which rule applies, the app checks the country of your App Store or Google Play account on your device. The app does not send that store country to us for this decision (on iOS, the App Store country is part of the upgrade purchase details described below), and the app does not send your phone's region or language setting either. If the app can't determine it, it treats you as being in the EEA and asks first.
- You can change your choice anytime in the app under Settings > App Preferences > Help shape WLED Max. If you turn stats off, the app stops sending them and discards any not-yet-sent stats stored on your phone. Stats already sent stay on our server until they are deleted as described in Section 7; to ask for them to be deleted sooner, use Reset stats ID (below) or contact us (Section 9). If you turned stats off in an earlier version, they stay off.
What is collected when stats are on
The app only reports from a fixed list of events and counts. Most activity is not sent as it happens: it is counted on your phone and sent as a daily total.
- A random stats ID. The app generates a random identifier (a UUID). It is not your Apple ID, Google account, email, name, or any advertising or hardware identifier. On iOS, this ID is also saved in your iCloud key-value storage, so it survives deleting and reinstalling the app and is shared with your other Apple devices signed in to the same iCloud account. On Android, it is stored in the app's private storage and is never included in Android backup, phone-to-phone transfer or the app's Export file (Section 1), so a new ID is created if you reinstall the app or move to a new phone. Until you reset it, the same ID is also used for Contact Us (Section 4).
- A one-time device registration ("hello"), sent when stats are first switched on for a stats ID: app version, operating-system version, device model (for example "iPhone17,2" or the phone's manufacturer and model on Android), and whether it is a test or store build. On Android (1.1.4 and later), it also includes the package name of the app store that installed WLED Max (for example "com.android.vending" for Google Play), or "none" if Android reports none; our server uses it only to label the internal notification below (for example "Google Play" or "sideloaded") and does not store it. When a new install registers, our team receives an internal notification with these details. Our server stores only the registration record (the stats ID, the platform, when it was first and last seen, the country at the first registration and at the most recent registration, and whether the app proved it was genuine, see below), not the device model or OS version. The internal notification also includes the country, if known.
- With every daily package: the app version and build number, and a random ID for the package so a resend isn't counted twice.
- Your country (a two-letter code such as "US"), stored with the registration record and with each stats event, under your stats ID. The app does not send it: our stats server sits behind Cloudflare, and Cloudflare's IP geolocation adds "a two-character country code of the originating visitor's country" to each request, based on the IP address the request comes from. Our server stores only that code. It does not use or store your IP address to determine it. When Cloudflare can't tell the country (or the request comes through Tor), no country is stored. The country is deleted with the rest of your stats (Section 7 and Reset stats ID below).
- Sessions: a random session ID for each time the app is in the foreground, the start and end of the session, the number of events recorded in it, and which screen (from the fixed list below) was showing when you left the app.
- Feature use, counted per day: for each of these features, how many times you opened it and how many times you used it that day: devices, control, effects, colors, presets, palettes, segments, music, schedules, groups, matrix, firmware, backup, widgets, Siri shortcuts (iOS only), guides, settings and contact. Only the feature and the two numbers are sent, never which effect, palette, preset, segment or device it was.
- Screen-to-screen counts, per day: how many times you went from one screen to another, using a fixed list of screen types (for example "devices", "effects", "settings", plus "launch" and "exit" for opening and leaving the app); at most 60 pairs a day, the rest are combined into one "other" count.
- Welcome guide: which pages you viewed, and whether you skipped or completed it.
- In-app guides (1.1.4 and later): how many times you opened each guide that day, where you opened it from (the list, search, a help button, a tip or a link) and whether you were offline; when you tap a button in a guide that opens a part of the app, which button, in which guide, and whether it worked (for example "no device"); and whether you turned the help buttons on or off.
- Guide searches (1.1.4 and later): when you finish a search in the guides (you tap a result, clear the field or close the guides), one entry with the words you searched for, how many results there were (0, 1-3 or 4+), whether you tapped a result, and the length of the text (1-3, 4-10 or 11+ characters). Before anything is stored, the app removes emails, web links, website and network names, IP addresses, phone numbers and any number with 5 or more digits, then lowercases the text and cuts it to 60 characters. Searches shorter than 2 characters are not sent. One entry per search, never every keystroke. We use guide searches only to find guides that are missing and to improve the guides. Like the rest of your stats, they are tied to the random stats ID, not to your name, and never used for advertising.
- Adding devices: that a search for devices started, the search method and the number of devices found, whether a device was added and how (for example "manual" or "setup"), a short failure code if adding failed (for example "probe_fail"), and the number of devices you have when you reach the free-version limit.
- Upgrade and purchase: that the upgrade screen was shown and from where (for example "add_device"), that a purchase was started, cancelled, failed or completed, the product ID, how the upgrade was activated (for example "direct" or "restore"), and, if it failed, a short error code (for example "user_cancelled" or "network"), not the error message shown to you. On iOS (1.1.4 and later), when the upgrade becomes active the app also sends the purchase date, price, currency, App Store country, whether it was a test purchase, whether it was bought or shared through Family Sharing, and a one-way hash (SHA-256) of the transaction IDs, so we can match it to Apple's sales record and to the ad attribution below. This event contains only these hashes, not the transaction IDs themselves.
- Rating prompt: that it was shown and how you answered it.
- Policy updates: that you saw an updated version of this policy or agreed to updated Terms, and that document's version number.
- WLED firmware updates: that an update started, completed or failed, the WLED firmware version number involved, and, if it failed, a short error code (for example "WLEDOTAError:3"), not the error message.
- Errors: when the app shows you an error, a short error code (for example "NSURLErrorDomain:-1001"), not the error message.
- Your setup, once a day: whether the upgrade is active, whether help buttons are shown, the number of saved WLED devices as a range (0, 1, 2-3, 4-9 or 10+), and how many of them run each WLED firmware version (major and minor number only, for example "0.15") and each chip type (esp32, esp32-s2, esp32-s3, esp32-c3, esp8266 or "other"). No device names, IP or hardware addresses, or LED counts.
- Timestamps for these events.
When the app sends stats
- Stats are stored on your phone first. The app sends them as one package at most once every 24 hours, and only when you open the app or move it to the background. The very first package of a new install is sent the first time you leave the app. There are no background wake-ups or timers.
- The one-time registration (above) is sent right away when stats are switched on, and is retried when you open the app or when your connection comes back while the app is open.
- If you are offline or sending fails, nothing is lost or resent in a loop: the stats stay on your phone and the app tries again at a later open or move to the background (not sooner than one hour later). At most 500 events are kept waiting; beyond that the oldest are dropped.
Checking that stats come from the real app
Because anyone could try to send fake stats to our server, WLED Max 1.1.2 proves that its stats come from a genuine copy of the app, using the platform's own service:
- iOS: Apple App Attest. In Apple's words, the app creates "a hardware-based, cryptographic key that uses Apple servers to certify that the key belongs to a valid instance of your app". The private key stays in your device's Secure Enclave. To certify a new key, the app contacts an Apple server once; after that, each stats request is signed with the key on your device. Our server stores, per stats ID, the key's identifier, its public key, a counter and when it was created and last used. We do not receive your Apple ID or any hardware identifier from App Attest. Apple's documentation does not list what else Apple processes during this check; Apple's privacy policy applies. If your device doesn't support App Attest, the app does not send stats at all.
- Android: Google Play Integrity. In Google's words, it helps "check that user actions and server requests are coming from your genuine app, installed by Google Play, running on a genuine and certified Android device." Google's data disclosure for Play Integrity says Google collects the request information from the app, app metadata (package name, version number, signing certificate), "the app's Google Play license status for the signed in user accounts on the device", and device information including "a key attestation certificate and a device attestation token generated by Google Play services", uses it to verify app and device integrity and licensing, does not transfer it to third parties, and deletes it after a fixed retention period. Our server sends the resulting token to Google, checks that the app is recognized by Google Play, that the device meets Google's device integrity check, and that the token belongs to this exact request. We do not store the result for your install (only the daily counts described below), and we do not receive device identifiers or account details from it. If no token can be obtained (for example on a phone without Google Play services), the app does not send stats.
These checks run only when the app sends stats, and on iOS also when the app asks our server to delete the stats of a reset stats ID, to prove the request comes from the same device.
Counting genuine installs and upgrades
To measure how many copies of WLED Max in use are genuine and how many upgrades are valid purchases, our server also uses the stats requests as follows. This is measurement only: the result is never sent back to the app and never changes what the app does or unlocks. It happens only while stats are on.
- Proof of your upgrade. With the first request of each daily package, the app says whether the upgrade is active. If it is, the app also includes the store's own record of your purchase, read from the App Store or Google Play on your phone:
- On iOS, the App Store's signed transaction for the upgrade (in Apple's words, "the transaction signed by the App Store"). Apple's documentation lists its contents, which include, for example, the transaction ID, purchase date, price, currency and App Store country. Our server checks Apple's signature on it itself, without contacting Apple.
- On Android, the Google Play purchase token and product ID. In Google's words, a purchase token is "a unique identifier that represents the user and the product ID for the one-time product they purchased". Our server asks Google (the Google Play Developer API) whether this purchase is valid.
- How the app was installed. From the App Attest or Play Integrity check above, the server sorts each install into a category. On iOS: attested, failed, no proof, or not checkable. On Android: installed from Google Play, genuine app not installed from Google Play, modified app, or not checkable. The Android categories are based on the verdicts Google returns (whether Google Play recognizes the app, the app's Google Play license status, and the device integrity result).
- What is kept: only daily counts per platform and app version: how many installs fell into each category, the Google verdict counts, and how many had a verified upgrade. These counts contain no stats ID. So that each install is counted only once a day, the server keeps, while that day is open, a keyed hash of your stats ID made with a random key that changes every day. The hashes and the key are deleted when the day is over, or earlier for your install if you reset your stats ID.
Apple Ads attribution (iOS, 1.1.4 and later)
We advertise WLED Max with Apple Ads. To see whether that pays off, a new install on iOS asks Apple's AdServices framework for an attribution token. This does not use an advertising ID (IDFA), Apple does not require a tracking permission for it, and the app shows no App Tracking Transparency prompt.
- When: only if usage stats are on, only for a new install, and only once. If sending fails, the app tries again on later opens for up to 7 days, then stops. Turning stats off cancels it. Installs that had already sent stats before updating to 1.1.4 never send it.
- What is sent: the token, your random stats ID, and the app version, build number and build type, to our stats server. The request is checked with App Attest like other stats requests.
- What our server does: it sends the token to Apple's attribution service once, which answers whether the download came from one of our Apple Ads campaigns and, if so, the campaign, ad group, keyword and ad IDs, the country or region, the date you tapped or saw the ad, where the ad was shown, and how the download happened (for example a new download or a re-download). We store that answer under your stats ID and delete the token as soon as Apple answers (it expires after 24 hours anyway). If you later buy the upgrade, we link that purchase (Section 2, Upgrade and purchase) to the answer so we can see which campaigns lead to upgrades.
- What we use it for: only to measure our own ad campaigns and decide where to spend on ads. We don't use it to show you ads, we don't share it, and we don't combine it with data from other companies' apps or websites.
- The record is deleted 13 months after it was last updated (for example when Apple answered or when an upgrade was linked to it), or when you reset your stats ID.
Your stats ID
Under Settings > App Preferences > Your stats ID you can copy the ID your stats are stored under (for example, to ask us to delete them) or tap Reset stats ID. Resetting gives your stats a new random ID, discards stats not yet sent, and asks our server to delete the stats stored under the old ID (its registration record and usage events, including the stored country and guide searches, its entry in the current day's install counts, and on iOS its App Attest key record and any Apple Ads attribution record). If your phone is offline, the app keeps asking on later app opens for up to 7 days, even if stats are turned off. Your Contact Us conversations are not affected. On iOS, a reset stats ID is kept only on that device, not in iCloud.
Your Contact Us conversations are stored with the install ID. If you include your email in a conversation, your stats (until you reset your stats ID) and that conversation share the same ID on our server.
What stats do NOT include
- Your name, email, Apple ID or Google account
- Advertising identifiers (Apple IDFA, Google Advertising ID) or the Android ID. The Apple Ads attribution token (iOS) is not an advertising ID, see above
- Names of effects, palettes, presets, segments, groups or devices; WLED device IP addresses; colors, brightness levels or other light settings
- Anything you type, except the cleaned guide search words described above (for example, never text from Contact Us, device names or city searches)
- Error messages (only short error codes)
- Your Wi-Fi network name or password
- Your IP address. Our server uses the IP address of each request only in memory, to limit request rates and block repeated invalid requests, and does not store it with your stats
- Your phone's location (GPS or location services). The only location-related data in stats is the country described above
- Location, contacts, photos, or browsing history
- Microphone audio (see Section 8)
We use these stats only to understand how the app is used, fix problems, decide what to improve and build next, improve our guides, and on iOS measure our own Apple Ads campaigns as described above. We do not use them to show you ads or for targeted advertising, and we do not combine them with data from other companies. Stats are sent over encrypted connections (HTTPS) to our own server; the iOS app also verifies our server's certificate (certificate pinning). We do not use any third-party analytics service.
3. Error Reports and Diagnostics
Automatic error reports
When something goes wrong (for example a device stops responding or a firmware update fails), the app can send a short error report so we can fix the problem. This is on by default in all countries and can be turned off under Settings > App Preferences > Notifications > Data & Privacy > Send Error Reports. This setting is separate from usage stats. An error report contains:
- Error type, error message and a short context string, with IP addresses and local network hostnames (such as "living-room.local") replaced by "[redacted]"
- "[redacted]" in place of the WLED device's IP address when a device was involved (the app does not send the address itself)
- WLED firmware version (when known)
- App version, operating-system version and a generic device type: "iPhone" or "iPad" on iOS, "Android phone" or "Android tablet" on Android (never the manufacturer or model)
- Timestamp
- Technical details about the failure: which part of the app and which action failed (for example "Presets / save preset"), the device's HTTP response code, the WLED request path (for example "/json/state", never an address), a system error code, how long the request took, how many times in a row it failed, and whether the light still answered; for firmware updates, the current and target firmware version, release channel, file size, the step that failed, and whether the device's update lock or passphrase was on; WLED hardware details reported by the device (firmware build number, chip type such as ESP32, number of LEDs and LED outputs, and whether it has white or color-temperature LEDs); the app's build number and whether it is a test build; the connection type (for example Wi-Fi, cellular, wired, VPN or none, never the network name); and how many identical reports were held back since the last one.
If a light stops responding, the app sends at most one report for that light per day. When your phone is on mobile data only or has no network, the app does not report lights that don't answer.
On Android, if setting up a new light through its own Wi-Fi hotspot fails, the report also includes the step that failed, the attempt number, a failure code, how long it took, whether the light answered on its hotspot, whether Wi-Fi was on, how many times the app checked for the light and rejoined its hotspot, the network type, the WLED request path, the error message, whether the light's hotspot had its default name or a custom one (never the name itself) and the light's firmware version.
On Android, if the app crashes, it saves a crash report (the error and a shortened technical stack trace, with IP addresses and hostnames removed) and sends it the next time you open the app, only if Send Error Reports is on.
Error reports do not include the install ID or any other persistent identifier, your email, your device names, or your Wi-Fi network name. The app sends the same error at most once every 10 minutes and counts any repeats into the next report.
When an error report arrives, our server derives a one-way, keyed code from your network address for that day, so we can count how many different users hit the same error. The address itself is never stored, the code changes every day, and it is deleted from the report after 2 days.
Diagnostics you choose to send
If our support team asks you to, you can send a diagnostics report from the app's hidden troubleshooting screen. It is only sent when you tap send and does not include the install ID. Depending on your platform, it can include: your WLED device names, firmware versions, LED counts, online and on/off status, brightness and current effect, Wi-Fi signal details reported by each WLED device, shortened one-way hashes of device hardware (MAC) and access-point (BSSID) addresses, your phone model and network type, connection response times, recent connection logs (with IP addresses and local hostnames removed), your message, and on iOS also your favorite effects, palettes and presets, recent colors, and a screenshot if you capture one.
Apple and Google crash reports
If you have enabled sharing with app developers in your iOS or Android settings, Apple or Google may provide us with standard crash reports (crash logs, app and OS version, device model) through App Store Connect or Google Play Console. This is controlled by your phone's settings, not by WLED Max.
4. Feedback and Support
When you send feedback or start a conversation from Settings > Contact Us, we receive your message, the category you picked, your email address only if you enter it and turn on "Can we contact you via email?", the install ID (so your conversation and our replies stay together), app and OS version, device type (on iOS only "iPhone" or "iPad"; on Android the phone's manufacturer and model), and the number of WLED devices in the app. We use this only to answer you and improve the app. We reply inside the app; if you gave us your email and allowed us to contact you, we may also use it to reach you by email when needed. If you leave that switch off, the app does not send your email to us.
Checking for replies: only if you have a support conversation (you have sent us a message and have not deleted every conversation), the app asks our server for replies when you open the app (and, on Android, the Settings screen), using the install ID. It also loads your conversations when you open Contact Us. If you have never contacted us, or have deleted all your conversations, the app does not check for replies. This works the same on iOS and Android, whether or not usage stats are on.
Deleting a conversation: you can delete a conversation in the app. We then erase it from our servers within 8 days (our deletion job removes it on its first nightly run after 7 days).
To help us answer faster, we may use Anthropic's Claude API to draft a reply. When we do, only the category and the text of your first message are sent to Anthropic, not your email or install ID, and a person on our team reviews every reply before it is sent.
Reply notifications: if you have a support conversation and have allowed notifications for WLED Max, the app registers a push token with our server together with the install ID, the app and operating-system version and a generic device name ("iPhone" or "iPad" on iOS, "Android" on Android), so we can notify you when we reply. Allowing notifications for other alerts (for example firmware or offline alerts) does not by itself register a push token with us, and an install that has never contacted us does not create one. On iOS, notifications are delivered through the Apple Push Notification service. On Android, they are delivered through Google Firebase Cloud Messaging, and the app creates its push token with Google only once you have a support conversation and allow notifications. The notification itself only says that we replied, never what we wrote; the reply is loaded in the app. If you delete all your conversations, the Android app also deletes its push token. You can turn notifications off in your phone's settings.
Email: if you email us instead, your email is received through Cloudflare Email Routing into our Google (Gmail) mailbox, and we reply by email through Resend.
5. In-App Purchases
Purchases are processed entirely by Apple (App Store) on iOS and by Google (Google Play Billing) on Android, and the app checks your purchase with Apple or Google on your device. We never receive your name, email, payment card or Apple ID / Google account. We receive purchase and refund notifications so we know about sales and refunds: from Apple, including the product, price and transaction ID, which appear in our server logs; from Google, our server looks up the order's product, price and country with Google Play and sends our team an internal notification. We do not keep these notifications in a database. If usage stats are on, purchase events are also recorded with your install ID as described in Section 2.
6. Accounts and Community Presets
WLED Max has no user accounts and no public preset sharing. If we add such features later, we will update this policy before they launch.
Earlier iOS versions: WLED Max 1.1.0 and 1.1.1 for iOS let you share presets with the community under a username you chose. That feature has been retired, and our server no longer accepts new shared presets, usernames, likes or reports. If you used it, we still hold what you shared: your username, the presets you shared (name and light settings), and any likes or reports you made, stored with a one-way hash of your install ID. This data is not covered by the automatic deletion in Section 7. To have it deleted, email or send a request from Contact Us in the app.
7. Where Data Is Stored, and for How Long
Data the app sends to our servers (Sections 2 to 5) is stored on servers we run with DigitalOcean in the United States (New York region). An automatic job on our servers runs every night and deletes this data as follows:
- Raw usage events (including guide searches) and per-install usage summaries: deleted after 90 days.
- The record that an install ID is registered: deleted 13 months after we last receive data from that install.
- Apple Ads attribution records (iOS, Section 2): deleted 13 months after the record was last updated, or when you reset your stats ID. The token itself is deleted once Apple answers, at most about 24 hours after it arrives.
- App Attest key records (iOS, Section 2): deleted when the key has not been used for 396 days (about 13 months), or when you reset your stats ID.
- Totals that contain no install ID (for example "N sessions on day X", "N active installs in country Y on day X", or the daily counts of genuine installs and upgrades in Section 2): may be kept longer, because they no longer relate to you.
- Upgrade check results (a one-way hash of the purchase record or token and the result, Section 2): deleted after 90 days, or 30 days if the purchase was not valid.
- Error reports and diagnostics: deleted after 90 days. The daily network code in error reports (Section 3) is removed after 2 days.
- Support conversations: deleted 13 months after the last message, or within 8 days after you delete the conversation in the app, or when you ask us to.
- Push tokens (iOS and Android): deleted 13 months after the app last registered the token or we last received data from that install (or earlier if Apple or Google reports the token as no longer valid, for example after you uninstall the app), or when you ask us to.
Some data is not covered by that nightly job:
- Emails you send us are kept in our support mailbox (Section 4) for as long as we need them to handle your request and keep a record of our support, and are deleted when you ask us to.
- Purchase notification details that appear in our server logs (Section 5) are kept only as long as our hosting provider keeps those logs.
- Data from the retired community preset feature is kept until you ask us to delete it (Section 6).
- Internal notifications to our team (for example about a new install, a purchase or a new support message) stay on our team's phones until we clear them.
Service providers and other recipients
We use a small number of providers to run WLED Max:
- DigitalOcean (United States): server hosting and storage
- Cloudflare: DNS, network delivery and protection for our servers and website, determining the country of requests to our stats server from their IP address (Section 2), and routing of email sent to our addresses
- Apple: App Store purchases and purchase notifications, iCloud key-value storage (your own iCloud account, including Sync with iCloud), AdServices (Apple Ads attribution for new iOS installs, Section 2), App Attest (checking that stats come from the genuine app, Section 2), push notifications (including internal notifications to our team), city search for the Circadian feature, optional crash reports
- Google: Android Auto Backup of app data to your own Google account, only if backup is on (Section 1), Google Play purchases and purchase checks (including our server checking an upgrade purchase with the Google Play Developer API, Section 2), Play Integrity (checking that stats come from the genuine app, Section 2), Firebase Cloud Messaging (delivering support reply notifications on Android, Section 4; Google processes the push token and a Firebase installation ID for this on our behalf), in-app update and review prompts, city search for the Circadian feature on Android, optional crash reports, and our support mailbox (Gmail)
- Anthropic: optional AI drafting of support replies (Section 4)
- Resend: sending our email replies, only if you email us
When you check for or install WLED firmware updates, your phone also contacts GitHub directly (Section 8).
We Do Not Sell Your Data or Use It for Advertising
- We do not sell your personal information, and we do not "share" it for cross-context behavioral advertising
- No ads in the app, no ad networks and no advertising SDKs. On iOS we use Apple's built-in AdServices framework only to measure our own Apple Ads campaigns (Section 2)
- No advertising identifiers (IDFA, Google Advertising ID), no Android ID, and no App Tracking Transparency prompt, because we don't track you across other companies' apps or websites
- No third-party analytics SDKs (such as Google Analytics, Firebase Analytics or Mixpanel). The Android app includes only Firebase Cloud Messaging, to deliver reply notifications (Section 4).
8. Permissions and Platform Features
Microphone (Music-Reactive Effects)
If you use music-reactive effects, the app asks for microphone access. Audio is processed on your device and only the resulting sound levels are sent to your WLED devices over your local network. The app does not record or store audio, and does not send audio to MeowScript or anyone else. You can revoke microphone access anytime in your phone's settings.
Local Network Access
WLED Max needs local network access (Bonjour/mDNS and direct HTTP/WebSocket connections) to find and control WLED devices on your Wi-Fi. This traffic stays on your local network.
Guided Wi-Fi Setup for New Devices
If you use guided setup to bring a new WLED device onto your Wi-Fi, your phone connects to the device's own Wi-Fi hotspot (on iOS the app does this for you; on Android you join it in your Wi-Fi settings), and the app sends your Wi-Fi network name and password directly to that device. The app sends your Wi-Fi password only to your WLED device, not to MeowScript.
Sync with iCloud and iCloud Key-Value Storage (iOS)
On iOS, WLED Max uses Apple's iCloud key-value storage in your own iCloud account for these things:
- Sync with iCloud (1.1.4 and later): keeps your lights, groups and app presets the same on every iPhone and iPad signed in to your Apple Account. For each light it syncs the name, IP address or host name, port, hardware (MAC) address, whether it's a favorite, its place in the list and when it was first added; for each group its name, icon, color, order and members; and your app presets. It also stores a random code that tells your devices apart. Passwords and PINs are not synced. Sync is on by default, including when you update from an earlier version, and you can turn it off under Settings > Sync with iCloud. Turning it off stops syncing but leaves the last synced copy in your iCloud account.
- The random install ID described in Section 2.
- If you created a community preset username in an earlier version, that username.
MeowScript cannot read your iCloud data. You can also turn off iCloud for WLED Max in iOS Settings; the install ID may then no longer survive a reinstall.
Photos, Camera, GIFs and Matrix Images
When you pick a photo to extract colors or create matrix images, the app uses the system photo picker, so it only sees the photos you choose. With Snap a Palette you can also take a photo; the camera is used only when you tap Take Photo. Photos are processed on your phone and are not sent to MeowScript or anyone else. Only the resulting colors (a palette) are sent to your WLED device over your local network, and on Android the temporary photo is deleted afterwards. Images or GIFs you upload go only to your WLED device, not to MeowScript.
Light Alerts
Light Alerts (1.1.4 and later) flash or color your lights when you run them, for example from Shortcuts on iOS or from Tasker or MacroDroid on Android. They run on your phone and talk only to your WLED devices over your local network. Nothing about your alerts is sent to MeowScript.
In-App Guides
The in-app guides are downloaded from our website (meowscript.com, delivered by Cloudflare) when you open the app, at most every 12 hours for the guide list, and stored on your phone so they also work offline. These requests contain no install ID, cookies or other identifier; as with any website visit, Cloudflare receives your phone's IP address. Guides open on your phone without loading other websites. What you search for and which guides you open are part of usage stats only if stats are on (Section 2).
City Search (Circadian Lighting)
WLED Max does not use your phone's location (the country stored with usage stats comes from Cloudflare, see Section 2). If you search for your city to set up Circadian lighting, the text you type is sent to Apple's map search (iOS) or your phone's geocoding service (Android; provided by Google on most phones) to find its coordinates, which are stored on your phone. Sunrise and sunset coordinates you enter for a WLED device are written only to that device.
App Version Check and Rating Prompt
To tell you when an update is available, the app asks the public App Store (itunes.apple.com) or Google Play's in-app update service for the latest version. This request contains no personal information from us. Rating prompts use Apple's and Google's standard review features.
Checking for Policy and Terms Updates
When you open the app, it downloads the current version numbers of this policy and of the WLED Max Terms from our website (meowscript.com, delivered by Cloudflare), and the full text when a document has changed, so it can tell you about updates. These requests contain no install ID or other identifier; as with any website visit, Cloudflare receives your phone's IP address. The versions you have seen or agreed to are stored on your phone.
WLED Firmware Updates
To check for and install WLED firmware updates, the app downloads release information and firmware files directly from GitHub (the public WLED project releases). The Android app also checks GitHub for new releases periodically. GitHub receives a standard request from your phone (including its IP address), and GitHub's privacy policy applies. The firmware is then sent from your phone to your WLED device over your local network.
On the free plan, a device you remove cannot be added again for 24 hours. To check this reliably, the app asks a public internet time server for the current time: Apple's time server (time.apple.com) on iOS and Google's time server (time.google.com) on Android. This only happens for free-plan users when removing or re-adding a device. The time server receives a standard time request from your phone, including its IP address; no other information is sent. The removal record (the device's hardware address, network address, name and removal time) stays on your phone and is deleted after 24 hours.
In-App Effect Previews
Live effect previews run bundled code inside the app. They do not load third-party scripts, cookies, or remote content.
9. Your Choices and Rights
- Usage and purchase stats: Settings > App Preferences > Help shape WLED Max (on/off anytime)
- Stats ID: Settings > App Preferences > Your stats ID (copy or reset)
- Error reports: Settings > App Preferences > Notifications > Data & Privacy > Send Error Reports
- Support conversations: delete them in Contact Us
- Sync with iCloud (iOS): Settings > Sync with iCloud
- Notifications, microphone, camera, local network, iCloud, Android backup: your phone's system settings
- Export / Import (Android): Settings > Backup & Restore > App Data
Access and deletion
You can ask for a copy of, or deletion of, the server data linked to your install ID. The easiest way is to send the request from Settings > Contact Us in the app, which lets us match your install ID automatically, or to include your stats ID from Settings > App Preferences > Your stats ID. You can also email ; because we don't know who you are, we may ask you for your stats ID or to send a message from the app so we can find your data. Error reports carry no ID, so we cannot link them to you. We respond without undue delay and within one month. If a request is complex, or we receive many, the law may allow us to extend this; if so, we will tell you within the first month.
EEA, UK and Swiss users (GDPR / UK GDPR / Swiss FADP)
The controller of this data is MeowScript LLC, 5900 Balcones Dr, Austin, TX 78731-4257, United States (contact details in Section 13). Our legal bases are:
- Consent (Art. 6(1)(a)) for usage and purchase stats, including guide searches and, on iOS, Apple Ads attribution. You can withdraw it anytime in Settings without affecting earlier processing.
- Legitimate interests (Art. 6(1)(f)) for error reports, which we need to keep the app working and secure and which contain no identifier, and for checking for replies to support conversations you started and registering for reply notifications while you have one. You can object by turning error reports or notifications off, or by contacting us.
- Contract (Art. 6(1)(b)) for purchases and for answering support requests you send.
We do not make decisions about you based solely on automated processing. You have the rights of access, rectification, erasure, restriction, portability and objection, and the right to complain to your data protection authority. We are based in the United States, and the data described here is sent directly from the app to our servers and providers there (some providers, such as Cloudflare's network, may also handle it in other countries where they operate).
You are not required by law or by contract to give us any of this data. Usage stats and error reports are optional and can be turned off. In Contact Us, your email is optional; without it, we can reply only in the app.
California and other US state residents
Depending on the state you live in, you may have the right to know what personal information we collect, to request its deletion or correction, and not to be discriminated against for exercising these rights. We accept these requests from any user, wherever you live. We do not sell personal information or "share" it for cross-context behavioral advertising, and we do not use it for targeted advertising. To make a request, use Contact Us in the app or email .
10. Children
WLED Max is not directed to children under 13, and we do not knowingly collect personal information from children under 13. If you believe a child has sent us personal information, contact and we will delete it.
11. Security
Data sent to our servers is encrypted in transit (HTTPS; the iOS app also uses certificate pinning). Access to stored data requires our administrator credentials. No system is perfectly secure; if a breach affecting your data occurs, we will notify you and the authorities as required by law.
12. Changes to This Policy
We may update this policy. We will post the new version here with a new "Last Updated" date, and for material changes we will also tell you in the app or in its release notes.
13. Contact
MeowScript LLC (a Texas limited liability company)
5900 Balcones Dr
Austin, TX 78731-4257
United States
Privacy:
Support:
Website: meowscript.com