IFMachine

Privacy policy

Effective date: 2026-05-23
Last updated: 2026-08-28

IFMachine is an Android app for playing interactive-fiction games (Z-machine and Glulx story files) published by Guppy Interactive LLC ("we", "us"). This policy explains, in plain language, what data the app touches and what it does with it.

The short version: IFMachine contains no advertising, marketing, or behavioural-analytics SDKs. The app uses Sentry for crash and error reporting, always-on, so we can diagnose issues you encounter. It also sends short gameplay-diagnostic reports recording how the app worked out the way to map a game, but only for games you agree to when it asks. What Sentry receives, of both kinds, is described in §5. Otherwise, the app stores your game progress and settings on your device, optionally syncs your per-story content (saves, transcripts, maps, and game-managed sidecar files) to your own Google Drive if you turn that on, and contacts the Interactive Fiction Database (IFDB) only when you explicitly search for a game, view cover art, or download a story file. Reading aloud uses on-device voices unless you accept the separate disclosure for online voices described in §7.

If you want the long version, read on.

1. What we don't do

We do not operate any servers that collect data from IFMachine. We do not transmit any of the following to any server we operate, and the app does not include any third-party library that would transmit them on our behalf:

The app does not include Firebase Analytics, Firebase Crashlytics, Google Analytics, AdMob, the Facebook SDK, Bugsnag, or any comparable behavioural-tracking library. Crash and error data the app does send (to Sentry) is described in §5.

Note that Android itself also collects basic crash and ANR (application-not-responding) telemetry for apps installed via Google Play; that data goes to Google as part of the Play platform under Google's own privacy terms, not under this policy.

The situations in which information does leave your device are described in §3 (optional Google Drive sync of your per-story content), §4 (optional IFDB lookups), §5 (Sentry crash reporting, always-on, and gameplay-diagnostic map-learning reports, only for games you agree to), §6 (problem reports you choose to send), and §7 (optional online voices for reading aloud). §3, §4, and §7 are off by default and require an explicit action by you; §6 happens only when you press Send on a report whose full contents are shown to you first, and the map-learning report only for a game you have said yes to. Section 2 lists what the app stores locally on your device — including the Google account name once you connect Drive sync, which is kept on-device so the Settings screen can show you which account is linked.

2. What is stored on your device

IFMachine stores the following on your device only (in the app's private storage area, not accessible to other apps):

This data lives in the app's private storage and is removed when you uninstall the app.

3. Cloud sync with Google Drive (optional)

If you enable cloud sync in Settings, IFMachine syncs your per-story content to a folder of your choice in your own Google Drive. The synced content for each game you play includes every file the app or the running game writes for that story:

Because game commands are free-form text, any of the above can contain personal information if you type it into a game. We do not inspect or filter the content.

To make sync work:

We do not run any servers that receive this content. Files go directly between your device and your own Google Drive.

How the transfer is secured: all network connections to Google Drive use HTTPS (TLS). Sign-in is handled by Google's official Android libraries and the system account picker; IFMachine never sees your Google password. The OAuth credential the app holds afterwards is limited to the drive.file scope (it can only touch files the app itself created) and is managed by the Android AccountManager. Locally, all of the files listed in §2 — including any not-yet-uploaded saves, transcripts, maps, and sidecars — live in the app's private storage area, which other apps on the device cannot read.

4. IFDB integration (optional)

When you search for a game, view cover art, or download a story file from the Interactive Fiction Database (ifdb.org), IFMachine fetches that content over HTTPS. The request contains only what's needed to fulfill what you asked for — the search term you typed, the IFDB identifier of a specific game, or the URL of a story file — plus a generic User-Agent header of IFMachine-Android/0.1. It does not include your name, email, account, device identifier, or any other information about you. IFMachine never writes, posts, rates, comments, uploads, or modifies anything on IFDB; these are read-only requests.

Story files you download from IFDB may be hosted on third-party archives (such as the Interactive Fiction Archive). Downloading a game causes IFMachine to retrieve the file from that host using a standard HTTPS request. We do not control ifdb.org or the archives it links to; their respective terms and privacy practices apply to data they receive (which from IFMachine is limited to the request information above).

5. Crash reporting and map-learning diagnostics (Sentry)

IFMachine ships with the Sentry error-tracking SDK (sentry.io, US region, operated by Functional Software, Inc.) enabled at app launch. Sentry collects crash and error data and forwards it to us so we can diagnose and fix problems. It also carries one other kind of event, the gameplay-diagnostic map-learning report described further down, which is sent while the app is running normally rather than when something has gone wrong. The two differ in who decides. Crash reporting is always-on: there is no in-app toggle to disable it, and to stop sending crash data you uninstall the app. The map-learning report is sent only for games you agree to, and the app asks you before the first one goes.

Crash and error reports. When the app crashes or hits an unhandled error, Sentry receives:

The map-learning report (gameplay-diagnostic). IFMachine draws you a map as you explore a game. To do that it has to know where inside that particular game the player's current room is recorded, and games do not agree on where that is. For a game we have not already worked out, the app watches how the game behaves as you play and tries to work it out on its own. When it reaches an answer, it sends that answer to us so we can build it into a later version of the app, which is the only way the result ever becomes a map for you or for anyone else playing that game.

Nothing is sent until you say it may. When the app has worked out how to map a game, it asks you once, naming that game. If you say no, nothing about that game is ever sent and you are not asked about it again. If you say yes, that covers that game from then on: if a later session sharpens the answer, or finds it was wrong and takes it back, that follows without asking you a second time. The question is asked per game, so agreeing about one game says nothing about the next.

Once you have agreed, one report goes when the app has an answer for that game. A later session sends another if it improves on that answer, by narrowing it or settling something the first one left open, or if it arrives at a different answer that contradicts it. One can also take an answer back, if it turns out to be wrong, so that we do not build a mistake into the app. There is no stream of them: a weaker answer is never sent, and the app stops after four different answers for a game. They go only over an unmetered connection, so they never use your mobile data.

The report contains:

The report does not contain anything you typed, any game text you were shown, your transcripts, saves, or maps, the debug log described in §2, or the IFMachine install identifier. The breadcrumb trail described above is deliberately cleared from this event before it is sent, so breadcrumbs still leave your device only with a crash. The device and app information listed above, and Sentry's own installation identifier described below, do ride along with this event, because it goes through the same Sentry client.

Sentry does not receive your name, contact details, the Google account you may have connected for Drive sync, an advertising ID, IMEI, MAC address, location, or the contents of the debug log described in §2, with either kind of event. The IFMachine install identifier (the UUID described in §2) is not sent with either. IP address is also stripped: IFMachine initialises the Sentry SDK with sendDefaultPii = false, so Sentry does not store your IP address with the crash report.

Sentry's own SDK generates and attaches a random installation identifier of its own (separate from the IFMachine UUID), so it can group multiple reports from the same device; that identifier is not derived from your name, account, or any other personal information.

Both kinds of report are sent over HTTPS (TLS) to Sentry's US-based servers and retained by Sentry for 90 days, after which Sentry automatically deletes the raw events (aggregated, de-identified counts may be retained longer). Sentry's own privacy policy is at sentry.io/privacy/.

Individual deletion of past reports is not supported. IFMachine does not transmit any identifier you or we could use to isolate your specific reports, and we do not store anything that maps your install to your identity. This is a deliberate privacy-protective choice: the data Sentry receives is pseudonymous from our perspective, and the trade-off is that individual deletion requests cannot be honoured. To stop sending future crash data, uninstall the app; a map-learning report goes only for a game you agreed to. Existing reports auto-expire after 90 days.

6. Problem reports you choose to send

Settings → About → "Report a problem" lets you send us a diagnostic report. Nothing on this screen is sent automatically or in the background — a report goes out only when you press Send, and the contents of the report are shown on screen first.

A problem report contains:

Reports are posted to a channel in the IFMachine community Discord server, using Discord's webhook service over HTTPS. That channel is visible to the development team and to other members of that server, so anything in your report — including the attached log, which may contain text you typed into a game — can be seen by other members, not only by us. The report screen tells you this before you send, and the "View your report" link shown after sending opens the post in Discord. Discord, Inc. processes the message under its own privacy policy (discord.com/privacy). Reports remain in the channel until we delete them and are used only to diagnose and fix problems.

The report screen also offers a "Share" option that hands the same report to the Android share sheet instead; as with the Debug-tab export in §2, the content then goes to whatever destination you pick.

7. Reading aloud (optional online voices)

IFMachine's read-aloud feature speaks game text using the text-to-speech engine built into Android — the same one your device uses for TalkBack and other apps, which you choose and configure in Android's own settings. By default IFMachine uses only on-device voices, and the text being read never leaves your device.

Some text-to-speech engines also offer online (network) voices, which sound better because the speech is generated on the engine provider's servers rather than on your phone. Using one means the text being read has to be sent to that provider. IFMachine will not use an online voice until you have been shown a disclosure and accepted it. That consent is the switch that matters: until you accept, read-aloud stays entirely on-device, and if no on-device voice is available for your language the app declines to speak rather than quietly going online.

Once you have accepted, and while your device is online, the text sent to the engine is the game text being narrated. That is the story's prose, and also the commands you typed, because games echo your commands back into the text they display. So the text sent can include anything you typed into a game. We do not send your name, account, device identifiers, or any other information about you along with it.

Trying out a voice in Settings also speaks, and so also sends text. What it sends is only a fixed sample phrase built into the app ("This is how read aloud will sound."), never your game text. Note that picking a voice in the list plays that sample straight away, so selecting a voice is enough to trigger it.

The engine is a separate app that you selected in Android's settings, not a service we operate or contract with. We hand it text through Android's standard text-to-speech interface; we never see its network requests and we never receive the text back. The privacy policy of whichever engine you have selected — Google Speech Services, or another you installed — governs what that provider does with it.

Two details worth knowing, because they are easy to assume otherwise:

8. Permissions

IFMachine requests two Android permissions:

PermissionPurpose
INTERNETCloud sync to your Google Drive (if enabled), IFDB requests (when you initiate them), Sentry crash reporting (always-on) and gameplay-diagnostic map-learning reports (only for games you agree to, §5), problem reports you choose to send (§6), and online read-aloud voices (if you accepted the disclosure in §7).
ACCESS_NETWORK_STATEDetect whether you are on Wi-Fi vs. cellular, so cloud sync can respect a Wi-Fi-only preference.

We do not request location, camera, microphone, contacts, phone, calendar, or sensor permissions.

9. Children's privacy

IFMachine is not directed at or appropriate for children. The app does not show advertising and does not knowingly collect or transmit personal data from children. The one piece of age data it asks for — the date of birth entered at the IFDB age screen — stays on your device only, is never transmitted, and exists solely to keep under-18 users out of the catalogue (see the next paragraph). Any crash or gameplay-diagnostic data collected via Sentry (described in §5) is limited to the listed diagnostic and device data and is used only for debugging and for improving the app's maps; we do not attempt to identify individual users.

Some interactive-fiction games available through IFDB are written for adult audiences. Because that catalogue is open and unmoderated, the in-app IFDB browser is kept behind an age screen: the first time you open it, IFMachine asks for your date of birth and an acknowledgement before the catalogue is shown, and keeps it hidden from anyone under 18. The date of birth is stored on your device only and is never transmitted to us or anyone else — it lets the app remember you have passed the age screen and, if you were under 18 when you entered it, unlock the catalogue automatically once you turn 18. You can clear it by uninstalling the app or clearing its data in Android Settings. Parents and guardians should still supervise downloads of third-party game files as they would any other internet content.

10. Data sharing

We do not sell, rent, trade, or transfer your data for advertising, marketing, profiling, or behavioural analytics. We do not run any servers that receive data from IFMachine.

The third parties that receive information from your use of IFMachine are:

11. Your choices

12. Changes to this policy

If we change this policy, we'll update the "Last updated" date at the top and publish the new version at this URL. Material changes — for example, adding usage analytics, changing how crash reporting or gameplay-diagnostic reporting works (e.g. adding an in-app toggle, attaching save files to reports, or widening what a map-learning report carries), or any other change to what data leaves the device — will be called out in the app's release notes. Where any such change adds a data type, the Google Play Data Safety disclosure for the app will be updated to match.

13. Contact

Questions about this policy can be sent to:

privacy@guppyinteractive.com

Guppy Interactive LLC
10938 Vivaracho Way
San Diego, CA 92124
United States