Journal
6 min read

Zero server: why Souffle knows nothing about you

No account, no tracking, no backend. How and why Souffle runs entirely on your iPhone — and what that actually changes.

Souffle has no server. No remote database, no authentication system, no user accounts. You install the app, you breathe. Your data stays on your iPhone. That's it.

This isn't an oversight. It's a design choice made on day one and upheld at every decision since. This article explains why, what it means technically, and what we lose.

The choice

When I started designing Souffle, the natural reflex was to plan for a backend. A server for user profiles, a database for session history, auth to identify users. That's how most apps are built.

But Souffle is a breathing app. You open it, pick a program, breathe for five minutes, close it. What would a server add here? Cross-device sync? Nobody in the beta asked for it. Global analytics? I don't need them. A user account? For what — you don't need a password to breathe.

Every feature that justified a backend came with a cost disproportionate to the benefit. So I went the other way: SwiftData locally, full stop.

What "local" actually means

All persistence goes through SwiftData, Apple's local storage framework. Your session history, preferences, favorites — everything lives in the app's sandbox on your iPhone.

No network call is ever made by Souffle. Ever. The app works entirely in airplane mode. No "connecting" spinner, no "please sign in" screen, no degraded experience when you're in the subway or on a mountain. You open it, it works. That's a UX argument as much as a philosophical one — a breathing app that asks you to wait for a server is an oxymoron.

On the tracking side: zero. No Mixpanel, no Amplitude, no Firebase Analytics, no Sentry, not even MetricKit. No custom events are sent to anyone. The only data that exists about Souffle outside your phone are the aggregated metrics from App Store Connect — which Apple collects by default on every App Store app, anonymized, and which developers can't disable, though users can opt out via iOS Settings. I'd rather say it than claim an "absolute zero" that would be dishonest.

The honest flip side: without crash reporting, I learn about production bugs through user feedback or App Store reviews. It's slower, but it's consistent.

What about HealthKit?

Souffle writes mindfulness sessions to Apple Health via HealthKit. Technically, data leaves the app. That needs to be said.

But it doesn't leave your ecosystem. Health data is encrypted on-device and synced via iCloud with end-to-end encryption as soon as Apple two-factor auth and a device passcode are enabled. It never passes through a Patolabs server or any third-party server. It's the natural extension of local: Apple Health is your vault, not ours.

And this write is optional. HealthKit authorization is requested on first launch, and you can decline it. Souffle works exactly the same without it.

Changing phones

This is the most common question when you say "everything is local": what if I switch iPhones?

Your data survives through iOS's standard backup. When you restore a new iPhone from an iCloud backup or via Quick Start (direct iPhone-to-iPhone migration), Souffle's sandbox is included. Your history, preferences, everything is there.

What doesn't survive: deleting the app and reinstalling without a backup. In that case, local data is lost. This is different from real-time CloudKit sync — there's no remote copy that saves you automatically.

We could add CloudKit for multi-device sync. If the demand exists someday, it's an option — private CloudKit works without a Patolabs server, data stays in the user's personal cloud. But so far, nobody has asked. And adding CloudKit would mean requiring an active iCloud account, which breaks the "no account" principle.

What it costs — or rather, doesn't

A minimal backend for an app like this — hosting, managed database, authentication, monitoring — runs between $130 and $930 per year depending on free-to-paid tier thresholds of common services. Nothing astronomical.

But the real cost isn't infrastructure. It's time. One to two days per month of backend maintenance — updates, monitoring, incidents. And above all: the GDPR compliance surface that explodes the moment you store an email server-side. Processing records, DPAs with every subprocessor, access and deletion request procedures, retention policies. For a solo dev coding in the evenings, that's a second part-time project.

With Souffle, GDPR compliance is trivial: we don't collect personal data. The privacy policy fits on one page and essentially says "we know nothing about you." That's liberating.

What we lose

Let's be honest about the trade-offs.

No cross-device sync. If you have an iPhone and an iPad, your sessions aren't shared. Each device lives its own life.

No social features. No leaderboard, no challenges with friends, no "your Souffle coach missed you this week" push notification. These features need a server to coordinate users with each other.

No cloud personalization. We can't adapt the experience based on a server-side user profile — no recommendations based on global history, no built-in A/B testing.

No recovery without backup. If you lose your phone and don't have an iCloud backup, your data is gone. There's no "sign in to recover your history."

These trade-offs are consistent with what Souffle is. A breathing app is a personal, quiet tool. Not a wellness social network. The solitude of the experience is a feature, not a bug.

Why it's a product argument

"No data leaves your phone" isn't just a technical stance. It's an argument users understand in one sentence, and it reassures them instantly.

In a world where every app asks for an account, an email, a tracking authorization, and a cookie consent, asking for nothing is differentiating. You open Souffle, you breathe. No popup, no form, no "accept the terms." The first screen is the breathing program, not a login screen.

For an indie dev with no marketing budget, it's also a competitive advantage. The well-known meditation apps — Headspace, Calm, Petit Bambou — are SaaS products with monthly subscriptions. They need accounts, servers, tracking to measure retention and justify the price. Souffle doesn't have that model. No subscription, no account, no server. The marginal cost of an additional user is zero.

This isn't viable for everyone. A product targeting rapid growth needs data, metrics, cohorts. But for an indie project whose goal is to help people breathe — not to raise funds or optimize a funnel — it's exactly the right trade-off.

— Pato