SparkyFitness: Built for Families. Powered by AI. Track food, fitness, water, and health — together. https://codewithcj.github.io/SparkyFitness/
  • TypeScript 95.2%
  • PLpgSQL 2.6%
  • Swift 0.7%
  • JavaScript 0.5%
  • Python 0.4%
  • Other 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
CodeWithCJ d8d1c63b1c
Merge pull request #2492 from CodeWithCJ/docs/postgres-unix-socket
docs: document Unix socket connections for PostgreSQL
2026-09-15 17:35:25 -04:00
.agents/skills skill update 2026-09-12 14:23:32 -04:00
.claude/skills fix(db): clarify extension retention notices, retain helm initdb compatibility, and update pr-submission skill 2026-08-23 13:45:56 -04:00
.gemini agent improvements 2026-07-08 16:33:56 -04:00
.github fix(auth): apply migrations before Better Auth initialises 2026-09-14 09:49:56 -04:00
.husky adjusted percent Slider to adjust to the Numbers 2026-05-26 13:05:15 +02:00
agent-docs fix(exercises): fix library delete cascading, snapshot preservation, and cache invalidation 2026-09-12 20:38:57 -04:00
docker docs: document Unix socket connections for PostgreSQL 2026-09-15 17:28:29 -04:00
docs docs: document Unix socket connections for PostgreSQL 2026-09-15 17:28:29 -04:00
helm fix(db): clarify extension retention notices, retain helm initdb compatibility, and update pr-submission skill 2026-08-23 13:45:56 -04:00
nix chore(nix): update pnpm deps hashes 2026-09-14 01:44:17 +00:00
patches chore(mobile): upgrade react-native-health-connect to v4, drop expo-health-connect 2026-09-13 09:34:07 -04:00
scripts updated version to 1.7.1 2026-09-14 10:05:43 -04:00
shared fix(food): keep food and meal names concise and store detailed explanations in notes 2026-09-14 16:04:39 -04:00
SparkyFitnessFrontend fix(ai): enforce 4-word maximum on meal summary normalization 2026-09-14 16:51:37 -04:00
SparkyFitnessGarmin fix(garmin): prevent 0ml water intake entries and accept decimal values 2026-09-14 21:08:57 -04:00
SparkyFitnessMobile fix(api): map 413 PayloadTooLargeError to IMAGE_TOO_LARGE error code 2026-09-14 17:26:34 -04:00
SparkyFitnessServer fix(health): preserve manual entries in cleanup and reject whitespace water values 2026-09-14 22:31:27 -04:00
.dockerignore Show empty input when serving size is cleared 2026-06-02 21:46:09 +02:00
.gitignore refactor(db): consolidate health telemetry into health_metric_samples & fix weight unit conversions (#1990) 2026-08-03 13:12:56 -04:00
AGENTS.md chore(mobile): upgrade to Expo SDK 57 and React Native 0.86 2026-09-12 22:37:01 -04:00
announcement.md Revise announcement for SparkyFitness translations 2026-09-03 21:02:37 -04:00
CLAUDE.md Add Jest testing infrastructure to enable test execution 2026-01-25 11:15:26 +00:00
CONTRIBUTING.md docs(i18n): document the mobile Weblate components 2026-09-04 17:44:19 -04:00
DB Backup.cmd Fix for Steps showing from previous days instead of current day 2025-10-23 10:44:20 -04:00
db_backup.sh feature: Added Global Food & Exercise data provider. 2026-06-20 18:05:48 -04:00
db_schema_backup.sql chore: sync db_schema_backup.sql with migrations 2026-09-12 21:04:56 +00:00
dev-start.bat dev docker files 2026-02-02 21:34:08 -05:00
flake.lock NixOS module 2026-06-22 01:56:30 +00:00
flake.nix feat: add garmin connect nix module options 2026-07-31 20:55:35 -04:00
LICENSE WIP Meal & Meal Plan Features 2025-07-12 13:41:35 -04:00
package.json chore(deps): upgrade low-risk dependencies and restore pnpm settings 2026-09-12 21:34:44 -04:00
pnpm-lock.yaml fix(build): enable injectWorkspacePackages for deploy and resolve type mismatches 2026-09-13 21:41:57 -04:00
pnpm-workspace.yaml fix(build): enable injectWorkspacePackages for deploy and resolve type mismatches 2026-09-13 21:41:57 -04:00
README.md Replace image with higher resolution version 2026-09-13 14:55:40 -04:00
start_garmin_microservice.bat Updated withing to save json as mockup files. renamed few other variables used by developers 2026-02-09 18:32:39 -05:00
start_garmin_microservice.sh refactor(db): consolidate health telemetry into health_metric_samples & fix weight unit conversions (#1990) 2026-08-03 13:12:56 -04:00

SparkyFitness

A self-hosted, privacy-first alternative to MyFitnessPal, Flo, Hevy, Shotsy & more. Track nutrition, exercise, body metrics, and health data while keeping full control of your data. image

SparkyFitness is a self-hosted fitness tracking platform made up of:

  • A backend server (API + data storage)
  • A web-based frontend
  • Native mobile apps for iOS and Android

It stores and manages health data on infrastructure you control, without relying on third party services.

Core Features

  • Nutrition, exercise, hydration, sleep, fasting, mood and body measurement tracking
  • Goal setting and daily check-ins
  • Interactive charts and long-term reports
  • Multiple user profiles and family access
  • Light and dark themes
  • OIDC, TOTP, Passkey, MFA etc.

How SparkyFitness Compares

SparkyFitness is source-available, not open source — the licence is non-commercial and requires permission for commercial use.

Most apps do one thing. One good nutrition app runs $40$100 a year; covering everything SparkyFitness covers means three or four subscriptions, per person, and still no single report across them. SparkyFitness does it in one app, free, for the whole household.

US list prices, 14 Aug 2026. Full cost breakdown →

SparkyFitness wger MyFitnessPal Cronometer Hevy Zero Flo Garmin Connect Google Health
Self-hosted, your data stays yours
No subscription, no ads 🟡 🟡 🟡
Nutrition, strength, sleep, fasting, cycle & meds in one place* 🟡 🟡 🟡 🟡 🟡
Full history & custom date-range reports free 🟡 💰 💰 💰 💰 💰 💰
Wearable & health-platform sync 8+ services 🟡 🟡 🟡
Family sharing with granular permissions 7 permissions 🟡 🟡 🟡
CSV import & free data export 🟡 💰 🟡 🟡 🟡
MCP server + bring your own LLM 🟡

standout  •  supported  •  🟡 partial  •  💰 paid tier only  •  not supported

* Sleep stages, HRV and blood glucose are imported from your watch, phone or meter. SparkyFitness stores, analyses and charts them rather than measuring them itself.

This table is written by the project being compared, so read it that way. Checked 14 Aug 2026 against official docs, repos and store listings; some of it is already out of date. If a cell is wrong or unfair to another project, open an issue — corrections that make SparkyFitness look worse are just as welcome.

See the full comparison → — 17 apps across self-hosted, nutrition, specialist and device-ecosystem categories, plus where each of them beats us.

Health & Device Integrations

SparkyFitness can sync data from multiple health and fitness platforms:

  • Apple Health (iOS)
  • Google Health Connect (Android)
  • Google Health API
  • Fitbit
  • Garmin Connect
  • Withings
  • Polar Flow
  • Oura
  • Hevy
  • OpenFoodFacts
  • USDA
  • Fatsecret
  • Nutritionix
  • Mealie
  • Tandoor
  • Strava (partially tested)
  • Norish
  • Yazio (uses unofficial API)
  • Swiss Food Database
  • Free Exercise DB (Github)
  • Wger

Integrations automatically sync activity data such as steps, workouts, and sleep, along with health metrics like weight and body measurements, to your SparkyFitness server.

Optional AI Features (Beta)

SparkyAI provides a conversational interface for logging data and reviewing progress.

  • Log food, exercise, body stats, and steps via chat
  • Upload food images for automatic meal logging
  • Retains conversation history for follow ups

Note: AI features are currently in beta.

Installation

Choose one of the two ways to run SparkyFitness:

1. Self-Hosted

Get a SparkyFitness server running in minutes using Docker Compose:

# 1. Create a new folder
mkdir sparkyfitness && cd sparkyfitness

# 2. Download Docker files only
curl -L -o docker-compose.yml https://github.com/CodeWithCJ/SparkyFitness/releases/latest/download/docker-compose.prod.yml
curl -L -o .env https://github.com/CodeWithCJ/SparkyFitness/releases/latest/download/default.env.example

# 3. (Optional) Edit .env to customize database credentials, ports, etc.

# 4. Start the app
docker compose pull && docker compose up -d

# Access application at http://localhost:8080

Note: For other self-hosted installation methods, refer to the documentation at https://codewithcj.github.io/SparkyFitness/.

2. Cloud (for non-technical users)

If you are not a technical user and prefer not to run SparkyFitness on your own server, you can deploy a hosted instance in the cloud using one of the following providers.

Run on PikaPods
Deploy with Zenith

Note: These are independent third-party services. We encourage you to explore features provided by each provider to determine the one that best fits your needs.

🎥 Video Tutorial

Watch the video

Quick 2-minute tutorial showing how to install SparkyFitness (self-hosted fitness tracker).

Documentation

For full installation guides, configuration options, and development docs, please visit our Documentation Site.

Need Help?

  • Post in Github issues/discussion.
  • For faster response and get help from other community memebers Join our Discord

Star History

Star History Chart

Translations

Weblate Translations

Translation status

Translation status

Repository activity

Alt

Contributors

⚠️ Known Issues / Beta Features ⚠️

SparkyFitness is under active development. Breaking changes may occur between releases.

  • Auto-updating containers is not recommended
  • Always review release notes before upgrading

The following features are currently in beta and may not have been thoroughly tested. Expect potential bugs or incomplete functionality:

  • AI Chatbot
  • Family & Friends access
  • API documentation