This Privacy Policy explains what personal data TritonPanels (the “App”) collects, how it is used, who it is shared with, how long it is kept, and the rights you have over it. The App is published by Andrew O Riordan, trading as TritonApps (“we”, “us”), an indie studio based in the Republic of Ireland. We are the data controller for the limited personal data processed through the App.
The short version: TritonPanels is local-first. There is no TritonPanels account and no sign-up. Your library, settings, bookmarks and reading progress live on your device. When you connect a cloud-storage provider, a comic server or another source, the App reads your comics directly from your account or server — we never receive, store, or see your files. Text recognition, translation and the other image features run on your device.
1. Who we are
The App is published by Andrew O Riordan, trading as TritonApps, Republic of Ireland. For privacy matters please email privacy@tritonapps.com.
2. What we collect, when, and why
We try to collect as little as possible and only what we need to run the service. The categories below describe the data processed by the App and its service providers.
2.1 Data stored on your device
- Your library and reading data — the comics you import, covers and metadata, collections, reading lists, tags, favourites, bookmarks, notes, reading progress and stats. This is stored locally on your device and is not transmitted to us.
- App settings — reading modes, theme, cache limits and similar preferences. Stored on your device.
- Connections you add — the address of each comic server, catalogue or Substack publication you connect, and the list of what it holds, so the App can show and refresh it. Stored on your device.
- Server credentials and the content-lock passcode — usernames, passwords, API keys and tokens you enter for a comic server or network share, and your content-lock passcode, are held only in the platform secure store (see section 5). They are never transmitted to us.
- Incognito reading — while it is on, the App does not save progress, history or reading stats for that visit at all.
2.2 Cloud-storage access tokens and account email
- If you choose to connect Google Drive (Android only — see 3.1), Dropbox or OneDrive, the provider issues an OAuth access token that is stored only on your device, in the platform secure store (iOS Keychain / Android Keystore-backed storage). We use it only to read the comic files you point the App at. We never receive your files, and your token is never transmitted to TritonApps or to any third party. It is deleted from your device when you disconnect the provider.
- We also read the email address of the account you connected, and store it on your device next to the token. It exists purely so the App can show you which account it is reading from. It is never transmitted to us, never used to contact you, and is deleted when you disconnect. See section 3.1.
2.3 Subscription data
- Subscription status, plan, renewal date — received from RevenueCat (which receives it from Apple or Google) to manage your free trial and premium access. RevenueCat associates this with an pseudonymous, app-generated identifier, not your name or email.
- We do not receive your card details. Payment is handled by the Apple App Store or Google Play.
- Subscription screen views — when the App shows its subscription screen, it tells RevenueCat that the screen was shown, which screen it was, which plans it offered, and when, under the same pseudonymous identifier. We look at these views only in aggregate, to see how often the subscription screen is seen and how many people go on to subscribe. They contain nothing about your library, your comics or their names, or your cloud accounts, and they are not used for advertising or to track you across apps or websites.
2.4 Diagnostics
- Crash reports and error traces via Sentry. Only an opaque, app-generated identifier is associated with traces — never your name or email.
- Crash reports never contain your cloud files or their names. Before any diagnostic event leaves your device, the App removes cloud-storage file names, file identifiers and provider API addresses from it, as well as passwords, keys, tokens and sign-in headers for comic servers, and the addresses of Substack publications. Your comic file contents are never included in a crash report under any circumstances.
- We do not use analytics or advertising SDKs; the only usage measurement is the subscription screen views described in 2.3. We do not track you across apps or websites, and the App contains no ads. On Android, Google’s on-device ML Kit sends Google its own diagnostic data when you use text selection, translation or Lift subject (see section 2.6).
2.5 News
- The App shows short announcements from us in News. To find new ones it downloads one public file,
https://tritonpanels.tritonapps.com/news/v1/feed.json, at most about twice a day and when you pull to refresh the News screen. - The request carries no identifier: no account, no device or advertising ID, no cookies, and nothing about you or your library. Like any web request, it reveals your device’s IP address and the user agent of its networking library to Cloudflare, which serves our website (see section 4). We do not use the request to count, identify or track you.
- Which announcements you have read is stored only on your device and is never sent anywhere.
- You can turn News off in Settings → News. While it is off, the App makes no news request at all.
2.6 On-device text and image features
- Panel by Panel finds the panels on a page with a small machine-learning model built into the App. It runs entirely on your device and needs no network.
- Select text, Translate, Translate pages and Lift subject read the page you are looking at and run on your device. Page images and the text on them are never sent to TritonApps, and our own models are never trained on your comics.
- On iPhone and iPad these features use Apple’s VisionKit, Vision and Translation frameworks. Translation languages are downloaded and managed by iOS.
- On Android they use Google’s ML Kit, which runs on your device. Recognition models for Chinese, Japanese, Korean and Devanagari text, translation languages (about 30 MB each, on Wi-Fi only unless you change that in Settings → Translation) and the Lift subject component are downloaded from Google when you first use them, after the App asks you. ML Kit also sends Google diagnostic and usage data of its own: the device model, operating-system version, App package name and version, a per-installation identifier that does not identify you or your device, performance and error information, the kind of event (for example a model download or a translation) and, for translation, the languages involved. It does not send the page, its text or the translation. Google uses this data to measure and maintain ML Kit, encrypts it in transit and does not share it with third parties (Google’s ML Kit data disclosure). You can delete downloaded translation languages in Settings → Translation.
3. Cloud storage, comic servers and other sources
Every source in this section is optional — you can use TritonPanels with only on-device files. Comic servers, live libraries and Transfer over Wi-Fi are covered in sections 3.2 to 3.4. When you connect a cloud provider:
- You authenticate directly with Google, Dropbox or Microsoft through their own secure sign-in. We never see your provider password.
- Your files are downloaded from the provider straight to your device for reading. They are not routed through, copied to, or stored on any TritonApps server — we operate no server that touches them.
- Your use of each provider is also governed by that provider’s privacy policy (Google, Dropbox, Microsoft).
- You can disconnect at any time in Settings → Cloud storage, and revoke access entirely from the provider’s connected-apps settings. See Delete your data.
3.1 Google Drive
On iPhone and iPad, TritonPanels does not connect to your Google account at all. Google Drive comics are chosen through Apple’s Files app, which hands the App a copy of each file you pick. No Google sign-in takes place inside TritonPanels, no Google permission is requested, and no Google access token is stored. Google only permits an app to browse your Drive folders itself after a paid annual security review, so on iOS the Files app is the route we offer.
On Android, if you connect Google Drive, TritonPanels requests exactly three permissions — no others:
https://www.googleapis.com/auth/drive.file— access only to the individual files you pick in Google’s own file picker. This permission does not let the App see, list or search anything else in your Drive.openidandhttps://www.googleapis.com/auth/userinfo.email— your account’s email address, so the App can show you which Google account it is connected to.
In particular, we request no permission to browse your Drive, and no access to your Google profile, contacts, calendar, or any other Google service.
What Google user data we access. Three things: (1) your account’s email address, read once when you connect; (2) the name, identifier, type and size of each file you pick in Google’s file picker, which is what draws the list of chosen comics on screen; and (3) the contents of those files, downloaded when you import them. The picker itself runs on Google’s own pages; the App only receives the details of the files you selected. We do not scan, index, or read the rest of your Drive, and this permission does not allow us to.
How we use it. Solely to provide the feature you asked for: to download the comics you picked so you can read them — including offline. Downloaded comics are stored on your device and appear in your library.
How we use your email address. For one thing only: it is displayed back to you, on the Connect Storage and Settings screens, so you can see at a glance which account is connected — which matters if you have both a personal and a work Google account. It is stored on your device alongside the access token, in the platform secure store, and it is deleted when you disconnect. It is never transmitted to TritonApps, never used to contact you, never used to build a profile of you, and never shared with anyone.
Why this is the narrowest permission. drive.file grants access only to files you hand-pick, and is the least privileged Google Drive permission that can open a file at all. It is also why TritonPanels cannot show you your Drive folder tree the way it does for Dropbox and OneDrive: browsing your Drive would need a broader permission that Google gates behind an annual security review.
What we do with it — and what we never do. Google user data obtained through Drive is never transmitted to a TritonApps server, never sold or transferred to any third party, never used for advertising, profiling, credit or lending decisions, and never used to develop, improve or train any AI or machine-learning model — ours or anyone else’s. The App’s own machine-learning features (section 2.6) run on your device and are never trained on your data. No human at TritonApps reads your Drive data; we have no technical means to do so.
Downloads only. TritonPanels only ever downloads the files you pick. It never creates, uploads, renames, moves, shares or deletes anything in your Google Drive. Removing a comic from your TritonPanels library deletes only the local copy on your device; the file in your Drive is untouched.
Retention and deletion. The access token is held in your device’s secure store and is deleted the moment you disconnect Google Drive in Settings → Cloud storage. The list of files you picked is held in memory only while you are choosing and importing, and is never written to disk. Comics you import are stored on your device until you delete them, clear the App’s data, or uninstall the App. You can additionally revoke TritonPanels’ access to your account at any time at myaccount.google.com/connections. See Delete your data for step-by-step instructions.
Limited Use. TritonPanels’ use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements.
3.2 Comic servers and catalogues
You can connect a Komga or Kavita server, a Calibre library or another OPDS catalogue that you run or have access to.
- The App talks directly to the server you enter. Nothing passes through TritonApps, and we never learn the server’s address, what it holds, or your credentials.
- The username and password, API key or token you enter is stored only in the platform secure store and is sent only to that server. If a catalogue uses its own sign-in page, that page opens in your system browser and the App never sees your password there.
- Reading progress. For Komga and Kavita, the App sends the server which page you reached and when you finish or mark something unread, so the server and your other readers stay in step — that is what the connection is for. Calibre and other OPDS catalogues receive no progress.
- Connections use HTTPS. A server on your own local network can be used over plain HTTP only after the App warns you; that traffic is not encrypted.
- The server’s own privacy terms apply to what it keeps. Remove a connection in the App to delete its address, credentials and cached list from your device.
3.3 Live libraries
- Folders and drives. When you add a folder on your device, an SD card or a USB drive, the App reads it in place with the permission you grant through the system picker. Nothing is uploaded.
- Network shares (SMB). When you add a shared folder on your network, the App connects directly to that computer or NAS over SMB 2 or 3 with message signing, and only ever reads from it. The user name and password you enter are stored only in the platform secure store and are sent only to that share. Nothing passes through TritonApps.
- iCloud Drive (iPhone and iPad). A folder you choose is read through Apple’s Files system and downloaded from iCloud by iOS. Apple’s privacy policy applies.
- Dropbox folders. On Android, a Dropbox library uses the same OAuth connection described in section 2.2. On iPhone and iPad it is read through the Dropbox app’s Files integration, so a Dropbox library needs no Dropbox token in TritonPanels.
- Substack. When you add a publication, the App downloads that publication’s public feed and the images of its free posts from Substack’s servers. There is no Substack sign-in. Like any web request, this reveals your IP address to Substack, whose privacy policy applies.
3.4 Transfer over Wi-Fi
- When you start Transfer over Wi-Fi, your device serves a temporary web page on your local Wi-Fi or Ethernet network so a computer on the same network can send comics to the App. A one-time session code is required to connect.
- Files go straight from that computer to your device. Nothing passes through TritonApps or the internet. The connection is plain HTTP on your local network and the App says so before you start.
- The server stops when you stop it, when its time runs out, when the screen locks, when the App goes to the background or when the network changes. Sending comics from your device is off unless you turn on Allow downloads from this device, and protected comics are never offered.
- On iPhone and iPad, iOS asks for Local Network permission the first time.
Trial-ending reminders
If you allow notifications after starting a trial, the App can schedule a local reminder before that trial renews. Scheduling and notification delivery happen on your device; this reminder does not use a remote push-notification service. You can disable notifications in your device settings.
4. Sub-processors
We use the following sub-processors. They process the data needed for the services listed below under their applicable service and data-processing terms.
- RevenueCat (subscription state and subscription screen views, keyed to a pseudonymous identifier).
- Sentry (diagnostics — no PII linked to identity).
- Expo / EAS (build distribution and over-the-air updates).
- Cloudflare (hosts this website, including the News file the App downloads; sees the IP address and user agent of each request).
- Apple and Google (app distribution and payment processing, under their own privacy policies).
- Google ML Kit (Android only; on-device text recognition, translation and Lift subject, and the diagnostic data described in section 2.6).
Separately, the cloud-storage provider, comic server or publication you choose to connect (for example Google, Dropbox, Microsoft, Apple iCloud, Substack, or a server you run) processes your files on your behalf or under its own terms — not as our sub-processor.
5. How we protect your data
Because TritonPanels is local-first, the strongest protection is structural: there is no TritonApps server holding your library, your files, or your credentials, so there is no central store of them to breach. Beyond that:
- Credentials. Cloud-storage OAuth tokens, comic-server and network-share passwords, API keys and tokens, and the content-lock passcode are held only in the platform secure store — the iOS Keychain and Android Keystore-backed storage — which is encrypted at rest by the operating system and readable only by TritonPanels. We never see your cloud-provider password, and a comic-server password is sent only to that server.
- Data in transit. All communication with Google, Dropbox and Microsoft uses HTTPS/TLS. Sign-in uses the OAuth 2.0 authorization-code flow with PKCE, so no long-lived secret is embedded in the App, and the App never handles your provider password. Comic servers use HTTPS unless you accept a plain-HTTP server on your local network (section 3.2); Network shares use SMB 2 or 3 with message signing, and are encrypted when the share requires it (on Android; on iPhone and iPad such shares are not supported). Transfer over Wi-Fi is plain HTTP on your local network (section 3.4).
- Data at rest. Your library, comics, covers and reading data are stored inside the App’s private, sandboxed storage area, which the operating system protects from other apps and encrypts on a locked device.
- Least privilege. We request the narrowest permission each feature needs, and no permission whose result the App does not actually use. Access to Google Drive is read-only (see section 3.1).
- Diagnostics. Crash reports are stripped of cloud file names, file identifiers, provider API addresses and server credentials before they leave your device, and never contain file contents.
- Privacy screen and content lock. You can lock chosen comics and collections behind a passcode, hide them entirely while locked, and turn on a privacy screen that hides the App in the app switcher (and, on Android, blocks screenshots). On Android, the App’s data is excluded from device backups.
- Maintenance. Dependencies are kept current and the App is covered by an automated test suite that runs on every change, including tests asserting that the protections above hold.
No system is perfectly secure, but we do not hold the kind of centralised data that makes a breach damaging. If we ever become aware of a breach affecting your personal data, we will notify you and the Irish Data Protection Commission as required by GDPR Article 33.
6. How long we keep it
Data stored on your device is kept until you delete it, clear the App’s data, or uninstall the App — you are in control (see Delete your data). Subscription state held by RevenueCat persists for as long as needed to honour your entitlement and meet accounting obligations. Diagnostic events (Sentry) are retained for 90 days then deleted. Apple and Google retain payment records under their own policies; we do not control those records.
7. Your rights
If the GDPR or UK GDPR applies to you, you have the right to:
- access the personal data we hold about you,
- have inaccurate data rectified,
- have your data erased (“right to be forgotten”),
- restrict or object to certain processing,
- receive your data in a portable format, and
- lodge a complaint with your supervisory authority — for users in Ireland, the Data Protection Commission.
Because most of your data never leaves your device, you can exercise many of these rights directly in the App. Other jurisdictions may give you similar rights (CCPA, LGPD, and others). We honour requests on the same basis regardless of where you are.
8. How to exercise your rights
The fastest path is in-app: clear your data and disconnect any cloud provider (see Delete your data). For requests about data a sub-processor holds (for example, your RevenueCat subscription record), email privacy@tritonapps.com. We respond without undue delay and normally within one calendar month. If a request is complex or you make several requests, the law may allow up to two additional months; we will explain any extension within the first month. We may request proportionate information to verify your identity and will explain any lawful exception.
9. Children’s data
TritonPanels is not directed to children under 13 (or 16 in jurisdictions where GDPR Article 8 sets that as the threshold). We do not knowingly collect personal data from children below the applicable age. Comics you add are your own content; please ensure material is age-appropriate for whoever uses the device. If you believe a child has provided us personal data, contact privacy@tritonapps.com and we will delete it.
10. International transfers
Some of our sub-processors (RevenueCat, Sentry, and Google for ML Kit on Android) may process data outside the European Economic Area. Where they do, transfers rely on the European Commission’s Standard Contractual Clauses or an equivalent transfer mechanism. Your data continues to be protected to the standard required by the GDPR.
11. Changes to this policy
If we change this policy in a way that affects your rights, we will update the effective date above and notify you in-app before the change takes effect. Older versions are kept on file and are available on request.
12. Contact
Questions, complaints, or requests under this policy:
- Email: privacy@tritonapps.com
- Postal address: available on request via the email above.
For cookies on this website, see the shared TritonApps Cookie Policy. Within the App itself we do not use cookies.