mrkeyoor.com_
Tue 15 Sept 20:20 UTC
Self-Hostedevaluationupdated 15 Sept 2026

SparkyFitness review

SparkyFitness is a self-hosted web and mobile system for logging nutrition, workouts, sleep, fasting, medicine, and body measurements across a household. Its source is public, but the project explicitly calls itself source-available rather than open source because commercial use requires prior permission.

Verdict

Our SparkyFitness install took 381 seconds, pulled 2,816 packages, and used 3,308 MB, while the monorepo root exposed no build or test target. Accept that developer cost only if one private household system can replace several trackers for you, and test every health sync you plan to trust. Commercial users should stop at the non-commercial license unless the author grants permission in writing.

We ran it

Lab card: what happened when we ran SparkyFitnessScreenshot of SparkyFitness (codewithcj.github.io/SparkyFitness)
Install✓ · 381s2816 packages · 3308 MB
Buildn/ano build script
Testsn/ano test script
Repo3714 files~771,406 lines of source · 39.7 MB · 21 CI workflows

Answers from our run

Does SparkyFitness build from source?

Dependencies installed in 381 seconds (2816 packages), and the project has no separate build step. We cloned commit 619bf54 into a clean Debian container with 3 CPUs and no project-specific setup.

Does SparkyFitness have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Who should not use SparkyFitness?

Companies, paid coaches, or revenue-producing services without written permission: the license permits non-commercial use only.

What are the alternatives to SparkyFitness?

wger, Workout Tracker, FitTrackee. Our SparkyFitness install took 381 seconds, pulled 2,816 packages, and used 3,308 MB, while the monorepo root exposed no build or test target.

Setup3/5Compose is short, but secrets, backups, and 3 services still need care
Docs4/5Clear deployment and upgrade warnings, with API docs still beta
Community5/55,960 stars and heavy issue, pull request, and release activity
Maturity3/5v1.7.1 is active, while breaking changes and beta areas remain

Who it’s for

Households that want nutrition, exercise, and health records on their own server.
Docker operators prepared to maintain PostgreSQL, backups, secrets, and upgrades.
Users who want web, iOS, and Android access to the same records.
People willing to test the exact watch, food database, or health-platform integration they depend on.
MCP users who want a bring-your-own-model interface to personal fitness data.

Who it’s NOT for

Companies, paid coaches, or revenue-producing services without written permission: the license permits non-commercial use only.
Operators who want unattended container updates: the README warns that breaking changes can occur and specifically advises against auto-updating.
Contributors with limited disk or time for dependencies: our pnpm install pulled 2,816 packages, used 3,308 MB, and took 381 seconds.
Runners who cannot tolerate lost route detail: issue 2456 reports GPS points and laps disappearing after a Health Connect resync.
Users relying on a flawless background rest alarm: issue 2269 reports that the sound can disappear when the mobile app is locked or backgrounded.

Setup reality

Our pnpm install succeeded in 381 seconds, adding 2,816 packages and occupying 3,308 MB. The monorepo root had no build target and no test target, so both were skipped. The 39.7 MB checkout held 3,714 files and about 771,406 source lines, with 21 CI workflows, no Dockerfile, no tests directory, and workspace packages.

The normal deployment downloads a release Compose file and starts PostgreSQL, the server, and the frontend from published images. You must replace database passwords, a 64-character encryption key, the authentication secret, and the public frontend URL.

Mobile apps and external data sources add separate setup. OIDC, email, AI, food databases, and device providers each bring credentials or callback URLs. The README warns about breaking changes, recommends database and environment backups before upgrades, and says auto-updating containers is unsafe.

One server combines food, workouts, sleep, and family records

SparkyFitness is unusually broad for a self-hosted tracker. One account records meals, exercise, hydration, fasting, medication, sleep, and body measurements. Web, iOS, and Android clients point to your server. Family access adds profiles and permissions. That scope is the product's best argument and its largest testing surface.

The server can import from Apple Health, Google Health Connect, Fitbit, Garmin, Withings, Polar, Oura, Hevy, and several food databases. The README carefully says it stores and charts watch data such as sleep stages and blood glucose instead of measuring those values itself. Optional SparkyAI can log meals or exercise through chat and inspect progress, but the project marks that assistant as beta.

An MCP server gives compatible clients another route into the system with a model chosen by the operator. That suits people who already host personal AI tools. It also turns authentication and tool permissions into health-data controls. A conversational interface should not get broader write access than the person using it, especially on an instance shared by several family members.

The license excludes commercial use without written permission

SparkyFitness does not call itself open source. Its custom license allows personal, educational, and nonprofit use only when those activities do not generate revenue. Commercial use requires prior written permission from the author. Modified versions inherit the same non-commercial terms unless the author approves something else, and contributors assign their interest in submitted work to the original author.

That rules out more cases than a casual GitHub visitor may expect. A paid coach, employer wellness portal, subscription service, or commercial appliance cannot rely on the public repository alone for permission. The restriction may be fine for a family's private server, but it is incompatible with teams that require an OSI-approved license or the right to build a business without a separate agreement. Check licensing before evaluating the deployment.

What happened when we ran it

Our sandbox installed commit 619bf54 with pnpm in 381 seconds. The install pulled 2,816 packages and consumed 3,308 MB on disk. That is the heaviest dependency result in this review batch by a wide margin. The checkout before dependencies was 39.7 MB, yet it contained 3,714 files and about 771,406 lines of source across its workspaces.

The root package offered no build script or target that our harness could run, so the build step was skipped. It also exposed no test script or target, so tests were skipped. We found 21 CI workflow files, no root tests directory, and no Dockerfile in the measured repository. Those signals suggest package-specific checks live behind the monorepo's own development workflow, which a contributor needs to learn before treating the root install as validation.

The successful install proves that dependencies resolved in our 3-CPU, 8 GB Debian container. It does not prove the frontend, server, mobile clients, database migrations, or provider syncs work together. With no build and test targets available to the harness, our run produced no compiled artifact and no passing test count. The right takeaway is an expensive bootstrap with verification still outstanding.

Docker Compose runs three required services from published images

Deployment is shorter than source setup. The README downloads a production Compose file plus an environment template, then starts 3 services: PostgreSQL, the application server, and an Nginx frontend. The browser reaches the frontend on port 8080 in the quick example. The Compose file waits for PostgreSQL health before starting the server's migrations.

Do not run the example secrets unchanged. The environment file includes database credentials, a 64-character key for encrypting API credentials, and a Better Auth secret used for sessions and two-factor data. Changing the encryption key invalidates stored external data-source credentials. Changing the authentication secret after TOTP enrollment can lock users out. The public frontend URL and proxy-hop settings also need to match the real HTTPS route.

Backups are part of setup because this is personal history, not disposable app state. The release notes tell users to back up both the database and environment before upgrading. Uploaded images and server backups live on separate mounted paths, while PostgreSQL has its own persistent volume. Test a full restore on a spare instance before upgrading.

Health imports can preserve a workout while losing its detail

Issue 2456 describes a Health Connect resync that kept distance, duration, and pace but replaced the parent workout row and dropped associated GPS points and laps. The map initially appeared, then vanished after another sync. That v1.6.4 report concerns one import path, so test before-and-after exports for your provider.

Other integration gaps affect what users see rather than what is stored. Issue 2471 reports Polar sleep and activity data importing while daily steps, heart rate, and calories remain absent from reports in v1.7.0. Issue 2269 says the workout rest timer can show a notification without sound when the iOS app is backgrounded. The open threads and active fixes are healthy community signals, but the affected records and alarms are exactly why broad health integration needs narrow acceptance tests.

Version 1.7.1 is active and still carries beta warnings

GitHub recorded the last push on September 15, 2026, one day after v1.7.1 was released. The repository had 5,960 stars and 151 combined open issues and pull requests when fetched. The latest release fixes authentication migration ordering. Frequent releases and 21 CI workflows show active maintenance, while the queue also reflects how many web, mobile, provider, and database paths are changing.

The README warns that breaking changes may occur, advises against automatic container updates, and labels the AI assistant, family access, and API documentation as beta. Pin releases, read upgrade notes, keep tested backups, and trial changes against copied data. SparkyFitness earns the work when its broad household record replaces several apps. The non-commercial license and integration-specific failures remain firm reasons to choose a narrower tracker.

Alternatives

ProjectWhat it isPick it when
wgerAn AGPL-licensed self-hosted workout, nutrition, and weight tracker.pick this instead when a recognized open-source license matters more than SparkyFitness's wider family and device scope.
Workout TrackerA self-hosted web app for running and other GPX-based activities.pick this instead when route-based workouts are the main record and nutrition tracking is unnecessary.
FitTrackeeAn AGPL self-hosted tracker for outdoor activities and uploaded workout files.pick this instead when cycling, running, and map history matter more than one household health dashboard.

What people are saying

  1. [github-trending] CodeWithCJ/SparkyFitness

Sources

  1. SparkyFitness README
  2. SparkyFitness non-commercial license
  3. SparkyFitness production Docker Compose file
  4. Issue 2456: workout GPS and lap data loss after resync
  5. Issue 2471: Polar data missing from reports
  6. SparkyFitness v1.7.1 release

More self-hosted reviews

openfang · sonic · Aether · lx-music-desktop · checkcle · panel · the whole board →