一句话记下,到点持续提醒
Effective date: 2026-10-19
Twnkle (the “App”) is a local-first reminder tool. Our principle is simple: your data stays on your own devices and in your own iCloud, and we do not collect any of your personal information. The only exceptions are the ones described below: “Anonymous Usage Stats” (see Section 1) sends anonymous activity records, which contain none of your content, to a statistics service we host ourselves, and you can turn it off at any time; the Android and Mac versions request a version manifest from our website when they check for updates (see Section 1); and unlocking Pro on Android requires you to email us yourself to request an activation code (see Section 4).
We do not collect personal information. The App has no account system and does not include any third-party analytics or advertising SDKs. Everything you enter in the App, such as reminder content, times, and voice transcription results, is stored only in the local database on your device and is not sent to our servers.
To learn which features people use and where things tend to go wrong, the App sends anonymous activity records to an open-source statistics service (Umami) that we deploy ourselves, without going through any third-party analytics platform. Specifically:
The Android version is not distributed through an app store, and the Mac version is downloaded directly from our website, so both check for updates on their own:
blog.peterchen97.cn/twnkle/android-latest.json. When you tap “Update Now”, the installer is downloaded from the same website.blog.peterchen97.cn/twnkle/mac-update.json. When a new version is available, the update package is downloaded from the same website.These requests do not carry your task content, account, or any device identifier. As with any network request, however, the website and its CDN receive your IP address and the time of the request, and may keep routine access logs. Updates for the iOS version are handled by the App Store, so it makes no such requests.
| Permission | Purpose | Notes |
|---|---|---|
| Notifications | Delivers local notifications when a “Notification” reminder is due | All reminders are local notifications scheduled on your device. For sync across devices, the App registers with Apple for remote notifications, used only to receive silent pushes from CloudKit (nothing is shown and nothing rings; they only tell the App to fetch the latest data from iCloud). We do not run a push server, and the push token is not sent to any of our servers |
| Alarms (AlarmKit) | Rings when an “Alarm” reminder is due, breaking through Silent mode and Focus | Carried out on your device by the iOS system alarm framework |
| Microphone, Speech Recognition | “Voice capture” turns what you say into text | Speech recognition is handled by Apple’s speech recognition service (the Speech framework), which may send audio to Apple’s servers to complete the transcription and is subject to the Apple Privacy Policy; on Android, the phone’s built-in speech recognition service is used, subject to the privacy policy of that service’s provider; the App does not save recordings |
| Photos | “My Photo” (Pro): pick one photo with the system photo picker to use as your home screen wallpaper; the App receives only the photo you pick, crops it, and keeps a copy on your device. On Android, when you tap “Save QR Code”, the WeChat Pay QR code image is also saved to a Twnkle folder in your photo gallery | The system photo picker needs no Photos permission, and the App does not request one; the wallpaper stays on your device only, is not included in the App’s iCloud backup snapshots or synced to your other devices, and is never uploaded; the App never reads or uploads your photo library (you may see a Photos purpose string in Settings because the system requires it to be declared) |
| Approximate Location (optional) | “Match the weather”: switches the home screen wallpaper based on the weather in your city, and shows the weather at the due time next to tasks | Only approximate (city-level) location is requested; the coordinates are kept to two decimal places and stored on your device (if iCloud backup is on, they are also included in backup snapshots stored in your own iCloud), and are used to look up the weather from Apple Weather (WeatherKit); the App does not upload your location to our servers; you can turn it off in system Settings at any time, after which the wallpaper goes back to random |
Each permission is requested only when you first use the feature that needs it. Declining a permission does not affect your use of other features.
When “Match the weather” is on, the App uses your approximate location to look up the local weather from Apple’s WeatherKit service, in order to switch the home screen wallpaper and show the weather at the due time next to tasks. Weather data comes from Apple Weather. Your location is used only on your device and is not uploaded to our servers.
In earlier versions, “Invite a Friend” generated an invite code for you, and a friend who entered it received Pro for a period of time. This option is currently hidden, and Pro days already claimed remain valid. Here is how the related data is handled:
Twnkle Pro subscriptions and lifetime purchases are handled by the Apple App Store. Purchases, renewals, refunds, and payment information are all managed by Apple. The App only reads from the system whether you currently have an active entitlement, and never has access to your payment information. You can manage or cancel your subscription at any time in Settings → Apple Account → Subscriptions.
The Mac version cannot make in-app purchases. So that the Mac version can follow the membership status of the iPhone signed in to the same iCloud account, the iPhone version writes your Apple-signed purchase records (issued by Apple, containing information such as the product purchased, purchase and expiration dates, and transaction identifiers) to the CloudKit private database of your own iCloud account. The Mac version retrieves them from there and verifies Apple’s signature offline on your Mac. These records do not pass through our servers, and the developer cannot access them.
The Android version has no in-app purchases. To unlock Pro, you pay by scanning a WeChat Pay QR code (the payment is handled by WeChat) and then email us yourself, including the “device code” shown on the paywall and a screenshot of the payment. After confirming the payment, we issue an activation code for that device code; you paste it into the App, and the code is verified offline on your phone.
The App is not directed at children under 13 and does not knowingly collect personal information from any child (as described above, the App does not collect personal information from anyone).
If this policy changes, we will announce it in the App’s release notes and on this page. By continuing to use the App, you accept the updated policy.
If you have any questions about this policy, please contact: peterchendone@gmail.com