← Back to Candor for iPhone & iPad

Privacy Policy — Candor for iOS

Effective date: May 7, 2026  ·  Last updated: May 7, 2026

This Privacy Policy explains how the Candor iOS application ("Candor", the "App", "we", "us", or "our"), published by Belvantis ("Belvantis"), handles information when you install and use it on your iPhone or iPad.

Candor for iOS is built so your journal content stays on devices you own. This policy describes what that means in practice, what limited optional features may involve Apple services, and what rights you have.


1. Summary (TL;DR)

2. Who we are

The App is published by Belvantis, a sole-developer software project. References in this Policy to "we," "us," or "our" mean Belvantis.

You can contact us at: support@belvantis.com.

3. Scope of this Policy

This Policy covers:

This Policy does not cover:

4. Information we do not collect

By default, Candor for iOS does not collect, transmit, or store on any server operated by us:

The App contains no analytics SDK, no advertising SDK, no third-party tracker, and no in-app telemetry that reports to Belvantis. Apple's standard App Store Connect aggregates (download counts, anonymous crash reports through Xcode Organizer when you opt in via iOS Settings → Privacy & Security → Analytics & Improvements → Share With App Developers) are governed by Apple's privacy policy, not this one.

5. Information stored on your device

Everything you create in the App is stored on your device, inside the App's sandbox container, and encrypted at rest:

DataWhere it livesHow it is protected
Journal entries (text, titles, mood, favorites, categories)Local SwiftData / SQLite store inside the App sandboxPer-record XChaCha20-Poly1305 (libsodium) authenticated encryption + iOS Data Protection (NSFileProtectionComplete)
AI reflections (Spark, Reflect, Buddy)Same SwiftData storeSame as above
Buddy chat sessions and messagesSame SwiftData storeSame as above
Attachments (images, voice recordings)Encrypted blob files in the App sandboxEncrypted with the same vault key; .completeFileProtection on disk
Pending-draft outbox (autosave snapshots) and per-entry version historyEncrypted JSON files in the App sandboxSame vault key; .completeFileProtection
Capture Inbox queue (Siri / Widget / Share captures while locked)group.com.belvantis.candor App Group container, CaptureInbox/<UUID>.jsonPlaintext while locked (the DEK is wiped); protected by .completeFileProtection so files are unreadable while the device itself is locked. Drained into encrypted entries on next foreground unlock.
Wrapped vault key + Pro entitlement stateiOS KeychainWrapped with a key derived from your passphrase via Argon2id (32 MiB / 3 iter); Keychain accessibility set to kSecAttrAccessibleWhenUnlockedThisDeviceOnly
Downloaded on-device AI model files<AppSupport>/LLMModels/<modelDir>/ and <AppSupport>/TranscriptionModels/<modelDir>/Per-model integrity manifest (.candor.download.complete.v1) recording every file's path and size; partial / corrupted downloads are detected and re-fetched.

The vault key (DEK) that unlocks your content is generated on first launch on your iPhone. It is wrapped using your passphrase (Argon2id, 32 MiB memory cost, 3 iterations) and stored in the iOS Keychain. Optionally, you can enable Face ID / Touch ID unlock; on those flows the unwrap is gated by the Secure Enclave's biometric attestation. The unwrapped key only exists in process memory while the App is unlocked, and is wiped on background or lock.

We have no copy of your vault key, your passphrase, or your data. If you lose your passphrase and have not enabled biometric unlock, your data cannot be recovered.

6. Optional features that involve Apple services

Some features only transmit data when you actively enable them or use them. Each is described below.

6.1 iCloud / CloudKit sync (Pro, optional)

If you turn on iCloud sync in Settings → Privacy & Storage → iCloud Sync and you have an active Pro entitlement, the App stores encrypted journal records in your private CloudKit database, in the container iCloud.com.belvantis.candor. CloudKit is provided by Apple Inc. and operates under Apple's privacy practices.

What goes to iCloud:

What does not go to iCloud:

You can disable iCloud sync at any time. iCloud Drive, iCloud Backup, and CloudKit are governed by Apple's privacy policy at https://www.apple.com/legal/privacy/.

6.2 Apple Speech framework / SFSpeechRecognizer (optional)

If you tap the microphone to dictate an entry, the App by default uses Apple's on-device SFSpeechRecognizer with the requiresOnDeviceRecognition flag set where the device supports it. Whether transcription happens locally or via Apple's servers depends on your device, language, and iOS version; some languages still require server-side processing through Apple. In that case, audio is processed by Apple (not by Belvantis) under Apple's privacy practices.

If you prefer fully offline transcription regardless of language, the App offers a separate Omnilingual ASR path based on the open-source sherpa-onnx 1B model. You download it once (about 1 GB) and from then on every transcription happens entirely on-device with no Apple involvement.

6.3 On-device AI model download (optional)

If you turn on on-device AI in Settings → AI, the App downloads an open-weights language model (default depends on your device's RAM — Gemma 3 1B for 4–6 GB iPhones, Gemma 3 4B or larger for 8 GB+ devices) over HTTPS. The download is a normal HTTPS request for publicly hosted files. The App does not send any of your journal data to the model host; it simply fetches the model.

The App also has an Azure Blob Storage mirror as automatic fallback for transient host failures. The mirror is a passive file source — your journal data is never sent to the mirror or to anyone else; only file requests for the model itself.

6.4 App Intents, Siri, and Shortcuts (optional)

The App registers App Intents (AppendToCandorIntent, OpenCandorWritingIntent, StartCandorVoiceIntent) so you can quick-capture by saying "Hey Siri, add to Candor" or by running a Shortcut. Siri's interpretation of your phrase happens via Apple's Siri service under Apple's privacy practices. The captured text is then enqueued by the App into a local App Group inbox; nothing is sent to Belvantis.

6.5 In-App Purchase (optional)

If you choose to unlock Candor Pro, the purchase flow runs entirely through Apple's StoreKit. We use Apple's Transaction.currentEntitlements and Transaction.updates APIs to detect whether your Apple ID owns the non-consumable IAP com.belvantis.candor.pro. Apple handles the receipt; we never see your payment information, your Apple ID, or your billing address. The App stores only a local boolean ("hasPro") derived from Apple's StoreKit response.

6.6 No external AI / no third-party LLM

Candor for iOS does not integrate a third-party LLM provider, does not send any text to a remote model, and does not include cloud-AI plumbing. All language-model inference happens on-device via Apple's MLX framework on the Metal GPU.

7. Permissions the App requests

The App requests the following iOS permissions, each only at the point you use the relevant feature:

PermissionWhy it is requested
NSMicrophoneUsageDescriptionVoice journaling — only when you tap the microphone
NSSpeechRecognitionUsageDescriptionApple Speech framework dictation (optional; Omnilingual offline path does not require this)
NSPhotoLibraryUsageDescription / NSPhotoLibraryAddUsageDescriptionAttaching a photo to an entry, when you choose
Notifications (optional)Daily reminder, if you enable it
Face ID / Touch ID (NSFaceIDUsageDescription)Unlocking the encrypted vault, if you enable biometric unlock
iCloud / CloudKit entitlementSyncing encrypted journal records across your iPhone and iPad, if you enable iCloud sync
App Group group.com.belvantis.candorCross-process capture inbox shared between the main app, the Widget Extension, and the Share Extension
Increased Memory Limit entitlementRequired by Apple's MLX framework to load on-device language models above the default jetsam limit

The App does not request location, contacts, calendar, SMS, call log, camera (other than the system gallery picker if you attach an image), HealthKit, or any health-data permissions.

8. Children

Candor is not directed to children under 13 (or the equivalent minimum age in your jurisdiction). We do not knowingly collect personal information from children. If you are a parent or guardian and believe a child has used the App in a way that requires action by us, contact us at the email above.

9. Data retention and deletion

Because we do not store your content on our servers, there is no server-side retention period.

On your device:

10. Security

We use the following technical safeguards:

No security measure is perfect. You are responsible for keeping your passphrase, your device passcode, and your backups secure.

11. International users and our role under data-protection law

The App can be installed and used worldwide. Because content stays on your device and on storage you control (your private CloudKit container, accessed only by you), there is no cross-border transfer of your journal data to or by us. If you use iCloud, Apple may transfer and store data in regions in accordance with its own policies.

Our role under the GDPR and similar laws. Because the App processes your journal content locally on your device and Belvantis does not receive that content, Belvantis is not a "controller" or "processor" of your journal content under the EU/UK General Data Protection Regulation, the Swiss Federal Act on Data Protection, the California Consumer Privacy Act, or comparable laws. To the extent any jurisdiction nonetheless treats Belvantis as a controller of any limited information (for example, an email you send us at the support address), our legal bases for processing under Article 6 GDPR are: (a) the performance of a contract with you, namely these Terms (Article 6(1)(b)); (b) our legitimate interests in operating, securing, and improving the App and in defending legal claims (Article 6(1)(f)); and, where applicable, (c) your consent, which you may withdraw at any time (Article 6(1)(a)). We do not engage in profiling or solely-automated decision-making about you under Article 22 GDPR.

No HIPAA / no health-data framework. Belvantis is not a HIPAA "covered entity" or "business associate," is not subject to the HITECH Act, and does not handle "protected health information" as that term is used in U.S. or EU health-data regulation. The App is not a regulated medical device under any framework. Do not use the App to store information you intend to be treated under any such framework.

12. Your privacy rights

Depending on where you live, you may have rights under laws such as the EU/UK General Data Protection Regulation (GDPR), the California Consumer Privacy Act (CCPA/CPRA), or similar laws.

Because we do not collect or hold your personal information on our servers, most of those rights — for example, the right to access, correct, delete, port, or restrict processing of personal data — are exercised by you directly on your device, using the App's built-in features:

If you believe we hold personal information about you and you would like to exercise a right, contact us at support@belvantis.com. If you are in the EU/UK and we cannot resolve your concern, you have the right to lodge a complaint with your local data protection authority.

13. Apple-specific disclosures

The App is distributed through the Apple App Store. The following Apple services may interact with the App; their handling of your data is governed by Apple's privacy policy:

Apple's privacy policy is at https://www.apple.com/legal/privacy/. Apple's role under the App Store EULA, the Apple Media Services Terms, and the iCloud Terms applies independently of this Policy.

14. Privacy nutrition label (App Store)

The App's App Store privacy disclosure is, in plain English: "Data Not Collected." The Pro IAP is processed by Apple StoreKit; we do not collect any data from that flow ourselves. iCloud sync moves only ciphertext to a container you own. App Intents inputs are queued locally to an App Group inbox.

15. Changes to this Policy

We may update this Policy from time to time. When we do, we will revise the "Last updated" date at the top and, where appropriate, surface the change in the App. Material changes that affect optional features will be disclosed before those features start handling new data.

Continuing to use the App after changes take effect means you accept the updated Policy.

16. Contact

Questions, requests, or complaints: support@belvantis.com.

You can also reach us at:

Belvantis  ·  Attn: Privacy  ·  support@belvantis.com