How it works
Security
Most apps describe privacy as a policy. This page describes it as a mechanism — what is encrypted, with what, where the key lives, and what happens when things go wrong.
Encryption
AES-256-GCM (Apple CryptoKit)
Key storage
iPhone keychain, this device only
Key escrow
None — no copy exists anywhere else
Media at rest
Encrypted + Complete File Protection
Network connections
None
Third-party SDKs
None
Accounts
None
Analytics / crash reporting
None
Plaintext never reaches storage
Every piece of a journal entry is sealed before it is written. The text you type, the transcript of a voice note, the words recognised from a photographed page, and the metadata attached to each of them are encrypted with AES-256-GCM using Apple’s CryptoKit, and only the sealed bytes are stored.
GCM is an authenticated mode, which matters for a reason beyond secrecy: if a stored value is altered, decryption fails rather than returning wrong-but-plausible text. innerstory treats that failure as a failure. It will tell you a block could not be opened, and it deliberately refuses to let the app overwrite content it could not read — so a decryption problem can never quietly become data loss.
The key is generated on your phone and stays there
One 256-bit master key is generated on first use and stored in the iPhone’s keychain with the accessibility class WhenUnlockedThisDeviceOnly. That class has two consequences worth stating plainly: the key is unreadable while the phone is locked, and it is excluded from backups — including encrypted iTunes and iCloud backups — so it cannot be restored onto a different device.
While the app is locked, the key is not merely unused. It is evicted from memory.
There is no escrow, no recovery service and no copy held by anyone else. This is the point of the design, and it is also the trade-off: nobody can be compelled to hand over a key that does not exist off your device, and equally, nobody can recover your journal for you.
Photos and recordings
Media bytes are encrypted with the same key and written with iOS Complete File Protection, so the files are unreadable while the device is locked — not by the app, and not by anything else on the system.
The filename each block points at is a random identifier that reveals nothing about its contents. Images are stripped of location and camera metadata before they are stored, so a photograph of a notebook page does not quietly record where you were sitting.
The lock fails closed
innerstory starts locked. Only a successful Face ID, Touch ID or passcode authentication moves it to unlocked. Every other outcome — cancellation, a failed match, no biometrics enrolled, no passcode set — relocks the app and evicts the cached key.
There is no “nothing is configured, so let them in” branch. On a device with no passcode at all, the journal correctly refuses to open. That is intentional.
While locked, your content is not hidden behind an overlay — it is not built into the screen at all. When the app becomes inactive, a privacy veil is drawn first, so the card iOS captures for the app switcher shows the app’s name and never a line of your writing.
The analysis is local, and it is encrypted too
The feature that surfaces an earlier passage works by analysing your entries on the device — themes, entities, sentence embeddings, and similarity between passages. All of it runs on your iPhone using frameworks built into iOS.
That derived data is also sealed at rest. Analysis of a journal is at least as sensitive as the journal, and a sentence embedding is invertible enough that it should be treated as the text it came from. So the themes, entities and embeddings are encrypted with the same key as the entries themselves.
None of it is shown to you. innerstory computes what it needs to find a relevant passage, shows you the passage, and stops there. It does not report your mood, label your thinking, or present a summary of what kind of person its analysis thinks you are.
No network connections
Version 1.0 opens no connections. Not on first launch, not for licensing, not for configuration, not for analytics. There is no cloud sync and no CloudKit container. Transcription, handwriting recognition and analysis all run against frameworks already on the device.
This is checkable rather than a promise you have to take on faith: enable airplane mode and use the app. Every feature works. A network privileges monitor will show nothing, because there is nothing to show.
The app also ships an Apple privacy manifest declaring no tracking, no collected data types, and exactly one required-reason API — reading back a preference the app itself wrote.
What this costs you
Two things, and it would be dishonest to bury them.
- There is no backup. Nothing is uploaded, so nothing can be restored. If you lose the phone, the journal is gone. The export in Settings is your only copy — it writes plain text you can keep wherever you like, and you should use it.
- There is no sync. Your journal lives on one device, because the key does.
Reporting a problem
If you believe you have found a security issue, email support@innerstory.app with enough detail to reproduce it. There is no server to attack, so the interesting surface is the device: key handling, the lock, file protection, and anything that could cause plaintext to be written unsealed. Please give us a reasonable window to fix an issue before describing it publicly.
The formal commitments are in the Privacy Policy.