Eat Smart, Live Better
Snap, speak, or type your food — AI handles the rest.
Open-source, privacy-first calorie tracker for iOS and Android. Bring your own AI provider — 13 supported including Gemini, OpenAI, Claude, Grok, Groq, Hugging Face, Fireworks AI, DeepInfra, Mistral, and any custom OpenAI-compatible endpoint. Capture or import up to 10 food photos with an optional note, scan a barcode, ask your AI coach how to hit your goal, speak your lunch, or use Siri Shortcuts on iOS to log food and weight. On supported iPhones, food-description analysis for text, voice-transcribed, and Siri food logs can use Apple Intelligence on-device as the final fallback after BYOK provider/fallback attempts fail. No accounts, Fud AI cloud sync, tracking, or ads — completely free.
iOS 5.1 build 31 prepares the next update with a grouped add menu, multi-photo Camera and Photos flows with optional notes, retryable analysis errors, optional local water tracking and a separate Water widget, six clearer activity levels, customizable Breakfast/Lunch/Dinner/Snack boundaries, complete image previews, consistent weekly-change units, and health-permission management. It keeps the Workouts tab, redesigned Home, Coach voice input, meal-share links, diary export, AI meal reprocessing, theme colors, and Apple Health restore introduced in 5.0.
Android 3.1 (versionCode 32) prepares the matching update: grouped logging actions, up to 10 camera or imported photos in one analysis with optional notes, optional local water tracking plus a dedicated Water widget, six activity levels, customizable Breakfast/Lunch/Dinner/Snack boundaries, complete image previews, corrected unit-aware weekly-change controls, and a Health Connect Manage Access path. Existing local data and Health Connect data are preserved during a normal update.
App Store · Google Play · Website · Report an Issue · Request a Feature
- Photo & Scan menu — a focused submenu for Camera, Photos, and Barcode
- Multi-photo Camera — keep taking photos, review them horizontally, add an optional note, then analyze up to 10 separate images together
- iOS Share Extension — send a food photo from Photos or another app directly into Fud AI for review and logging
- Barcode lookup — scan packaged foods on iOS and Android and fill nutrition from Open Food Facts when product data is available
- Multi-photo library import — select up to 10 existing images, add an optional note, and analyze them together
- Text input — type food descriptions
- Voice input — speak your meals hands-free (6 STT options with per-provider language selection, see below)
- iOS Siri Shortcuts — say phrases like "Log food in Fud AI", "Calories today in Fud AI", or "Log my weight in Fud AI"; the phrase guide lives under + → Describe Meal → Siri Phrases
- Manual Entry — log known calories and macros without AI
- Smart serving units — AI can show slices, pieces, cups, ml, or other visible serving units while grams stay the source of truth
- Review nutrition unlock — correct calories, macros, and detailed nutrients before logging, then lock again so serving changes scale from your edits
- Meal What if? — preview how a reviewed meal changes today's calories and macros, then ask AI for a practical suggestion before logging
- Saved Meals — Recents, Frequent, and Favorites with safer swipe actions, search, and drag-to-reorder
- Retryable analysis — failed image analysis offers Retry and Cancel without limiting the number of retries
- AI Coach tab — multi-turn chat with memory. Coach sees your profile, weight history, food log, today's date/timezone, and richer meal details, then answers questions like "what's my expected weight in 30 days?" or "how do I lose 2 kg?". Coach also supports camera/photo attachments on Android. Memory persists across launches; Reset button starts a fresh conversation. Long-press any reply to copy.
- AI Access — free Bring Your Own Key: pick provider, model, fallback, custom instructions, and speech language directly on device. (The optional Fud AI Premium proxy from earlier iOS versions has been discontinued.)
- Apple Intelligence fallback — on supported iPhones, food-description analysis for text, voice-transcribed, and Siri food logs can use Apple Intelligence on-device as the final fallback after BYOK provider/fallback attempts fail.
- AI optional nutrient goals — estimate detailed nutrient goals from profile data without changing calorie/protein/carbs/fat formulas.
- Goal-aware prompt chips — suggested questions change based on whether your goal is Lose / Gain / Maintain
- Thermodynamic weight forecast — expected weight at 30/60/90 days, predicted vs observed weekly change, days-to-goal, under-logging detection. Surfaced through Coach as live context on every turn.
- Resilient requests — transient provider overloads (503 / 529 / 429) auto-retry with 1s / 2s / 4s exponential backoff across both food analysis and Coach chat, so short spikes resolve invisibly
- Expanded nutrients per entry — macros plus sugar, fiber, fats, cholesterol, sodium, potassium, calcium, iron, magnesium, zinc, vitamins, folate, omega-3, and more when available
- Custom Home nutrient cards — swap the top cards from protein/carbs/fat to fiber, sodium, vitamin D, calcium, or other tracked nutrients
- Optional nutrient goals — set or AI-estimate goals for the non-macro nutrients; these stay separate from the calorie and macro calculator
- Scrollable week calendar — swipe to any past week, configurable start day
- Food log sorting — keep the default grouped view, or sort meal sections by latest logging order from the Home screen
- Progress charts — weight trends, calorie history, macro averages (1W to All Time)
- Progress summaries — weight and body-fat ranges show average and net change for the selected week, month, or longer window
- Decimal nutrition totals — macros and detailed nutrients preserve decimal precision in logs, Home, widgets, and View More
- Weight History — tap-to-delete past entries, syncs deletion to Apple Health
- Goal tracking — set target weight, BMR/TDEE auto-calculation; goal-reached alert fires from both manual logs and Apple Health reads
- Adaptive Goals — weekly calorie correction from observed weight trend; pinned macros stay pinned and unlocked macros auto-balance. On by default for new installs (stays off if you hand-edit your plan during onboarding)
- Six activity levels — Sedentary, Light, Moderate, Active, Very Active, and Extra Active use work and training descriptions instead of step-count requirements
- Custom meal times — choose when Breakfast, Lunch, Dinner, and Snack begin; the app uses those boundaries for automatic meal grouping
- Optional water tracking — off by default; set any practical daily goal, quick-log one to three glasses or a custom amount, see progress below calories, and optionally schedule a local reminder
- Exercise library — 873 exercises with photos, primary/secondary muscle and equipment filters, search, sort, and per-exercise detail pages; the filter bar stays pinned while the list scrolls
- Apple Health — bidirectional sync for body measurements + nutrition types written per meal; Siri food/weight logs write through the same HealthKit paths, and Energy Burn Goals can estimate calorie targets from active/total energy while macros stay editable
- Health Connect — Android sync for nutrition, weight, and body fat, with permission reconciliation and backfill support; Energy Burn Goals can use recent energy data for calorie targets
- Restore after a reinstall — on a fresh install or new phone, the food log, weight, and body-fat history restore automatically from Apple Health / Health Connect (the app finds its own previously-synced records)
- Apple Watch — watchOS app and complications show calories and macros at a glance
- Widgets — iOS offers Fud AI in Small, Medium, and Large, small Protein, and a separate small/Lock Screen Water widget; Android offers Calorie, Protein, Today, and Water Glance widgets that update from local snapshots
- Share the App — native iOS share sheet from About → forwards App Store URL plus a personalized message and
fud-ai.applink; message body localized into all 16 iOS languages - Update check — About shows the installed app version, opens the App Store / Play Store when a newer version is available, and shows a tab dot for pending updates
- Theme color — iOS and Android Settings let users change the app accent, with matching home screen / launcher icons
- Languages — iOS supports 16 languages: Arabic, Azerbaijani, Dutch, English, French, German, Hindi, Italian, Japanese, Korean, Polish, Portuguese (Brazil), Romanian, Russian, Simplified Chinese, Spanish. Android supports the same set except Polish. The app auto-selects by the phone's Language setting.
- Meal reminders — customizable breakfast, lunch, dinner notifications
- Dark mode — system, light, or dark
- Metric & imperial units
Pick any of the 13 LLM providers for food analysis, meal what-if suggestions, optional nutrient-goal estimation, and Coach chat. Free Gemini keys are available at aistudio.google.com/apikey. Requests go directly from your device to the provider you configure. For text, voice-transcribed, and Siri food descriptions on supported iPhones, Apple Intelligence can run on-device only as the last fallback after BYOK provider/fallback attempts fail.
| Provider | Format | Highlight | Needs API Key |
|---|---|---|---|
| Google Gemini | Gemini API | Gemini 3.5 Flash / 2.5 Pro / Flash | Yes |
| OpenAI | OpenAI | GPT-5 / 4o | Yes |
| Anthropic Claude | Messages API | Sonnet 4.6 (default) / Opus 4.7 / Haiku 4.5 | Yes |
| xAI Grok | OpenAI-compatible | Grok 4 | Yes |
| OpenRouter | OpenAI-compatible | Any model, free-form IDs | Yes |
| Together AI | OpenAI-compatible | Llama 4, Qwen VL | Yes |
| Groq | OpenAI-compatible | Llama 4 Scout, very fast | Yes |
| Hugging Face | OpenAI-compatible | Gemma 3, Qwen VL, Llama Vision (open-weight router, free-form IDs) | Yes |
| Fireworks AI | OpenAI-compatible | Qwen VL, Llama Vision, Phi-3 Vision | Yes |
| DeepInfra | OpenAI-compatible | Gemma 3, Llama Vision, Qwen VL | Yes |
| Mistral | OpenAI-compatible | Pixtral Large / 12B (open-weight) | Yes |
| Ollama | OpenAI-compatible (local) | Llama 3.2 Vision, LLaVA, Moondream — runs on your Mac | No |
| Custom (OpenAI-compatible) | OpenAI-compatible | You set base URL + free-form model name | Optional |
Pick how voice input is transcribed. Native iOS / Android is the default — free, on-device where supported, real-time. On Android, native speech first tries the on-device language path, then falls back to Android recognition with network/provider defaults if the phone lacks offline support for that language. Each provider has its own language setting: use Provider Auto, Use Device Language, or an explicit language hint where supported.
| Provider | Notes |
|---|---|
| Native iOS / Android (On-Device) | Free, offline where the phone supports the selected language, real-time partial results |
| Gemini Audio | Batch audio transcription through Gemini for BYOK users |
| OpenAI Whisper | Whisper-1 via /v1/audio/transcriptions |
| Groq (Whisper) | Whisper-large-v3, very fast, has a free tier |
| Deepgram | Nova-3, fast and accurate |
| AssemblyAI | Universal model, strong accuracy, free tier |
For Android phones where native speech is inconsistent, Groq (Whisper) or Deepgram are recommended alternatives; the developer currently uses Groq.
API keys are stored encrypted on-device: iOS Keychain on iOS and EncryptedSharedPreferences backed by Android Keystore on Android.
Photo(s) / Text / Voice
│
▼
BYOK provider API
│
├── BYOK provider fallback if configured
└── iOS Apple Intelligence final fallback for text / voice transcript / Siri food descriptions
│
▼
JSON nutrition response
│
▼
User reviews & edits
│
▼
FoodStore.addEntry() ──▶ UserDefaults (local) + Apple Health (optional)
For the Coach chat, every turn builds a slim system prompt from your live profile, BMR formula in use, computed forecast, today's date/timezone, and a one-line snapshot of available data. Coach then pulls any date range of weight, body fat, calorie totals, or food entries on demand via tool calling — ask "what was my weight in March?" or "show me my body fat trend over the last 6 months" and it fetches exactly the slice it needs, including meal source, meal type, serving size, and micronutrients.
An eight-screen walkthrough of the current app flow — from the dashboard and grouped logging menu through review, progress, Coach, and Workouts.
The app calculates personalized daily targets using established nutrition science formulas:
| Step | Formula | Details |
|---|---|---|
| BMR | Katch-McArdle | 370 + 21.6 × lean mass (kg) — used when body fat % is known |
| BMR | Mifflin-St Jeor | 10w + 6.25h − 5a ± 5 — fallback when body fat is unknown |
| TDEE | BMR × activity | Multiplier ranges from 1.2 (sedentary) to 1.9 (extra active) |
| Daily Calories | TDEE + adjustment | Adjustment = weeklyChangeKg × 7700 / 7 (deficit or surplus) |
| Protein | Activity + goal | 0.8 – 2.2 g/kg body weight by activity, plus +0.2 g/kg during cutting phase (Helms et al 2014); when body fat % is known, Activity Level also shows the equivalent g/kg lean-mass multiplier |
| Fat | Fixed ratio | 0.6 g/kg body weight |
| Carbs | Auto-balanced | Remainder from calories − protein − fat (any macro can be pinned; max 2 pinned) |
All values can be manually overridden in Settings, with a Recalculate Goals button to snap back to formula defaults.
| Component | Details |
|---|---|
| Language | Swift 5, SwiftUI, iOS 17.6+ |
| Storage | UserDefaults (local JSON), Keychain (API keys) |
| AI | GeminiService for food + label analysis, ChatService for multi-turn Coach chat, both route across all 13 providers |
| Speech | Native SFSpeechRecognizer / Android SpeechRecognizer or remote providers via SpeechService (m4a upload) |
| Health | HealthKit / Health Connect read-write paths for body measurements and meal nutrition, with UUID-tagged samples for safe delete |
| Pattern | @Observable + .environment(), main actor isolation |
| Localization | Localizable.xcstrings (String Catalog), 16 iOS languages, auto-selected by iPhone's system language |
| Dependencies | Native platform frameworks; app data and API keys remain local |
fud-ai/
├── ios/ # SwiftUI iOS app (next release: v5.1 build 31)
├── android/ # Kotlin + Jetpack Compose app (min SDK 26 / Android 8.0, v3.1 / versionCode 32)
├── web/ # Marketing site — https://fud-ai.app (static HTML/CSS, Cloudflare Workers)
├── APPSTORE.md # App Store Connect listing copy (iOS)
├── PLAYSTORE.md # Google Play Console listing copy (Android)
└── README, LICENSE, CONTRIBUTING, SECURITY, .github/
ios/
├── calorietracker.xcodeproj/ # Xcode project
├── calorietrackerTests/ # Unit test target (boilerplate)
├── calorietrackerUITests/ # UI test target (boilerplate)
├── FudAIWidgets/ # Widget extension target (Home + Lock Screen)
├── screenshots/ # App Store screenshot sources
└── calorietracker/
├── calorietrackerApp.swift # Entry point, environment setup
├── ContentView.swift # 5-tab layout (Home, Progress, Coach, Settings, Workouts)
├── Localizable.xcstrings # String Catalog, 16 languages
├── Models/
│ ├── AIProvider.swift # 13 LLM providers, model lists, settings
│ ├── SpeechProvider.swift # 6 STT options + Keychain settings
│ ├── ChatMessage.swift # Coach chat message model
│ ├── UserProfile.swift # BMR/TDEE/macro calculations
│ ├── FoodEntry.swift # Food item with macros and expanded optional nutrients
│ └── WeightEntry.swift # Weight log entry
├── Views/
│ ├── OnboardingView.swift # 15-step onboarding flow
│ ├── ChatView.swift # Coach tab: bubbles, prompt chips, reset
│ ├── FoodResultView.swift # AI result review & edit
│ ├── RecentsView.swift # Saved Meals (Recents / Frequent / Favorites)
│ ├── VoiceInputView.swift # Native + remote STT routing
│ ├── HomeComponents.swift # Week strip, macro cards
│ └── ProgressComponents.swift # Charts, weight history
├── Services/
│ ├── GeminiService.swift # Food/label analysis, routes 13 providers
│ ├── ChatService.swift # Multi-turn Coach chat, routes 13 providers
│ ├── SpeechService.swift # Remote STT router (Gemini / OpenAI / Groq / Deepgram / AssemblyAI)
│ ├── WeightAnalysisService.swift # Thermodynamic weight-forecast math
│ ├── KeychainHelper.swift # iOS Keychain wrapper
└── Stores/
├── FoodStore.swift # Food CRUD + favorites
├── WeightStore.swift # Weight CRUD (auto-syncs profile weight)
├── ProfileStore.swift # @Observable wrapper over UserProfile
├── ChatStore.swift # Coach chat history (persisted locally)
├── NotificationManager.swift # Local notification scheduler, including optional water reminders
├── WaterStore.swift # Local water entries and daily goal
└── HealthKitManager.swift # Apple Health bridge (body + nutrition)
# Clone
git clone https://github.com/apoorvdarshan/fud-ai.git
cd fud-aixcodebuild -project ios/calorietracker.xcodeproj \
-scheme calorietracker \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' buildOpen ios/calorietracker.xcodeproj in Xcode, select your device, and run.
Open android/ in Android Studio (Narwhal or newer), let Gradle sync, hit ▶ Run. Or from the CLI:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
cd android
./gradlew :app:assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
adb shell am start -n com.apoorvdarshan.calorietracker/.MainActivityFirst launch walks you through onboarding (gender, birthday, height/weight with metric/imperial toggle, body fat %, one of six activity levels with a protein-target preview, goal, goal speed, notifications, Apple Health / Health Connect, AI access setup, and review). A free Gemini key is available at aistudio.google.com/apikey. You can change provider anytime in Settings → AI Access.
See CONTRIBUTING.md for guidelines. Bug reports and feature requests welcome.
Adding a new translation? Open ios/calorietracker/Localizable.xcstrings in Xcode and fill in your language column — everything else is already wired.
See SECURITY.md. Use private vulnerability reporting for sensitive issues.
No accounts, Fud AI-operated cloud sync, or analytics. BYOK API keys are protected by iOS Keychain or Android EncryptedSharedPreferences, and requests go directly to the provider you choose. Food, weight, body-fat and water logs, custom meal times, goals, preferences, cached images, and widget/Watch snapshots are local except for OS backup/device transfer and the specific AI/STT, barcode, health-sync, update-check, export, or sharing action you initiate. Shared meal links carry the selected meal details in the URL, so anyone with the link can read them. Apple Health / Health Connect access is optional and can be reviewed or revoked through Manage Access. Delete All Data wipes the current local installation, including saved keys and water history, but never removes Apple Health, Health Connect, or older OS backups. See the complete Privacy Policy.
MIT License. See LICENSE.
- Developer: Apoorv Darshan
- Email: apoorv@fud-ai.app or ad13dtu@gmail.com
- Follow on X: @apoorvdarshan
- Follow on Instagram: @fudai.app
- Report an Issue: github.com/apoorvdarshan/fud-ai/issues/new?labels=bug&title=Bug:%20
- Request a Feature: github.com/apoorvdarshan/fud-ai/issues/new?labels=enhancement&title=Feature:%20
Fud AI is fully free, open source, and privacy-first — no ads, no subscription. If it helps you, consider supporting development (on iOS there's an in-app Tip Jar under Settings → About) — every bit keeps this project alive.
You can also help by voting on Product Hunt, starring the repo, filing bugs, or requesting features.
Thanks to everyone who has contributed to making Fud AI better:
Exercise data, muscle glyphs, and barcode nutrition data come from open projects — see ASSET_CREDITS.md.








