Journaling only works if you trust the medium. InnerApple replaces trust with cryptography — every entry is encrypted on-device before it leaves, and the server only ever stores ciphertext it cannot read.

The stack is Flutter on the front end, FastAPI on the back end, and Rust via FFI for the cryptographic heavy lifting. AES-256-GCM encrypts content, RSA handles key exchange for selective sharing, and Argon2id derives keys from credentials.

What sets it apart is the AI layer. Emotion detection runs through Fully Homomorphic Encryption using Zama’s TFHE-rs — the model performs inference on ciphertext directly, so neither the server nor the model ever sees plaintext. You get emotional tracking without giving up the privacy that makes a journal worth keeping.

The project is deliberately educational, built as a companion to a blog series. It ships with BLOG NOTE comments marking where production code would diverge from the teaching implementation. The goal is to make the cryptographic architecture legible, not to ship to an app store.

InnerApple asks a question more software should be asking: what if the server simply could not read your data?

Source: github.com/afonsomota/e2ee-journal