Ommo — breathing you feel.

A native iOS breathing app built around one idea: a session you can feel with your eyes closed. Haptics lead the rhythm; a generative orb and a synthesized soundscape follow on the same clock.

Download on the App Store

What made it interesting

Three senses have to agree, frame for frame, or the illusion breaks. The app is built around a single session clock that drives all three:

  • Haptics. Per-phase Core Haptics patterns whose tap rate rides the breath — accelerating into the inhale, easing through the exhale, with a soft thump at each turn. The sync target is ±50 ms, so it stays honest with the screen off.
  • Visual. The orb is a stateless SwiftUI view rendered frame by frame from a TimelineView off the same clock — generative, not a video, and no Metal required.
  • Audio. A warm drone synthesized live with AVAudioEngine (detuned oscillators and filtered noise that breathe with the session). No bundled audio files.

The breathing, haptic, and audio engines are Swift 6 actors; the UI stays on the main actor under strict concurrency. The technique recommendation is deterministic and rules-based — no LLM — and the app is fully offline: no accounts, no backend, no third-party SDKs.

Stack

  • Swift 6.2 · SwiftUI · SwiftData
  • Core Haptics · AVFoundation (procedural audio)
  • StoreKit 2 · iOS 26 · iPhone and iPad

Links

iOS · SwiftUI · on the App Store.