Privacy ๐Ÿฅฌ

Lettuce is local-first by design. It runs on your own devices โ€” the Mac app and the companion iPhone app โ€” with nothing to sign up for and nowhere for your notes to go.

The short version: No account. No Lettuce servers. No telemetry or analytics in the app. Your notes are plain files in a folder you choose, and your AI keys live in your macOS Keychain. We never see either.

Your notes

Your notes are plain Markdown (.md) files in a folder you pick. Lettuce reads and writes them on disk and nowhere else. They never leave your device unless you choose to publish a static site, sync the folder with a tool of your own (for example, keeping the vault in iCloud Drive so the Mac and iPhone apps share it), or use the optional AI features described below. There is no cloud, no database, and no Lettuce backend.

Optional AI features

Lettuce includes an optional set of AI features โ€” Ask, enhance, and semantic search (embeddings). They are off until you turn them on by supplying your own API key for a third-party provider (Anthropic, OpenAI, Google Gemini, or any OpenAI-compatible endpoint, including a local model). With no key configured, no note content is ever sent anywhere.

When you use one of these features, the relevant text is sent to the provider you configured, using your key, and handled under that provider's own privacy policy, not ours. To be specific about what "relevant text" means:

Requests go straight from your device to the provider; Lettuce runs no server of its own that stores your notes. Point Lettuce at a local model (e.g. Ollama) and nothing leaves your device at all โ€” this applies to every feature above. These features work the same way in the iPhone app, which talks to your configured provider directly from the phone.

Your API key is stored only in your device's Keychain. Lettuce never transmits the key to us and never sees your notes in transit โ€” the connection is between your device and the provider you chose.

The agent (MCP) server

Lettuce can run a local server so AI agents (Claude, OpenAI, Gemini clients, etc.) can read and write your vault. That server binds to 127.0.0.1 only โ€” not reachable from outside your Mac โ€” and every request requires a scoped API key you generate. With propose-only keys, an agent's writes are queued as reviewable diffs and never touch your files until you accept them. If you explicitly turn on Tailscale sharing, that same key-protected server also becomes reachable to your own devices on your private tailnet (and to no one else); it is off unless you enable it.

Notifications

If you set up notification rules or digests, the iPhone app can show push alerts. Delivering a push routes its contents through Apple's push service (APNs), so the alert text โ€” which by default includes the note's title and its path within your vault โ€” passes through Apple's servers, as it does for any app's notifications. No note body is sent. If that matters to you, you can leave notifications off.

No tracking in the app

The Lettuce apps contain no analytics, telemetry, or usage tracking, and never inspect what you write, how you use them, or who you are. The iPhone app uses Apple's on-device MetricKit to capture crash and hang diagnostics locally so a crash can be understood โ€” these stay on your device and are never transmitted to us or anyone else. The only network requests the apps make are ones you initiate โ€” or the once-a-day update check you can turn off (see below).

This website uses Plausible โ€” a privacy-friendly, open-source analytics tool โ€” to count aggregate page views. It sets no cookies, collects no personal data, and does no cross-site or cross-device tracking; nothing here can identify you. It's a count of how many people visit, nothing more.

Updates & downloads

The app is distributed as a notarized DMG you download from this site. Downloading it is a normal web request to our static host; we don't set tracking cookies. Apple's notarization check (a standard macOS security step) happens between your Mac and Apple, not us.

Automatic updates. To deliver fixes, the app checks our update feed about once a day. That request reveals to our static host only your IP address, a generic updater user-agent, and your current app version โ€” no system profile, no identifiers, and nothing about your notes. You can turn it off in Settings โ†’ About โ†’ Automatically check for updates.

Things you trigger. Some actions you start reach the internet: AI features call the AI provider you configured (with your key); publishing a site talks to GitHub on your behalf. Lettuce makes no such request on its own, and your notes and keys never reach us.

Questions

Email hello@drbaher.com. If a future version ever changes any of the above, this page will be updated before that version ships.