selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

lyftr logo

Self-host lyftr

v0.1.0-beta.1

Self-hosted workout & nutrition tracker

BetaOpen SourceMIT
Updated4 months ago
LanguageTypescript
Setup difficultyEasy
MobileNative app
ThemeDark mode
Stars
361
CPU
arm64 or x86_64
RAM
2 GB (tested on Raspberry Pi 4)
Storage
minimal (single SQLite file)
Ports
80 (frontend web UI (nginx)), 3000 (backend API (internal Docker network))
Docker
cwlumm/lyftr-frontend
Install with Docker Compose
Workouts screen on mobileActive workout screen on mobileGym Mode overview on mobilePrograms screen on mobileSettings screen on mobileGym Mode overview on desktop

What is lyftr?

Lyftr is a self-hosted fitness tracker for logging workouts, tracking nutrition, and monitoring progress. It features an 800+ exercise library from open-exercise-db, program builder for reusable workout templates, guided active workout mode with set-by-set flow, Gym Mode with full-screen rest timer, personal records and progression charts with muscle diagrams, dashboard with volume trends and consistency heatmap, nutrition tracking with barcode scanning and food search, and bodyweight tracking. It runs via Docker with a single SQLite database, has a native Android app (APK from GitHub releases), and a responsive web UI. iOS is planned. All data stays on your server with no subscription or paywalled features.

Should you self-host lyftr?

lyftr scores 47/100 on selfhost.directory (how scoring works) and ranks #16 of 31 in Health & Fitness. It has 361 GitHub stars.

It shipped 2 stable releases in the past year. The latest, mobile-v0.2.0, came out on 23 July 2026. New versions land roughly every 2 weeks.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is MIT-licensed and written mostly in Typescript.

Its closest alternative on selfhost.directory is SparkyFitness (66/100, 6 497 stars). It scores higher overall, so compare the two before you pick. See lyftr vs SparkyFitness side by side.

Features

  • Dashboard
  • Exercise library
  • Guided active workout
  • Gym Mode with rest timer
  • Native Android appSide-loaded builds don't auto-update; reinstall over old one when new release drops
  • No external dependencies
  • Nutrition tracking
  • Program Builder
  • Progress Tracking
  • Registration control
  • Single SQLite database
  • Weight Tracking
  • Workout Logging

lyftr README

How to install lyftr

Install lyftr with Docker Compose

Docker and Docker Compose
Environment variables
JWT_SECRET (required), CORS_ORIGIN, PORT, BACKEND_ORIGIN, REGISTRATION, DEMO_MODE, OEDB_BASE_URL

curl -o docker-compose.yml https://raw.githubusercontent.com/Cawlumm/lyftr/main/docker-compose.yml curl -o .env https://raw.githubusercontent.com/Cawlumm/lyftr/main/.env.example

set a strong JWT_SECRET in .env, then pull the prebuilt images and start:

docker compose pull && docker compose up -d

Prebuilt images from Docker Hub; no build required

How to configure lyftr

  • BACKEND_ORIGINbackend:3000Docker service name:port the frontend proxies /api to — not a host IP. Only change the port, to match a custom backend PORT

    Docker service name:port the frontend proxies /api to — not a host IP. Only change the port, to match a custom backend PORT

    values: service:port

  • CORS_ORIGINhttp://localhostComma-separated allow-list of client origins. Use * to allow any (the API is Bearer-token based, no cookies)

    Comma-separated allow-list of client origins. Use * to allow any (the API is Bearer-token based, no cookies)

    values: URL or *

  • DEMO_MODEfalseSeeds the demo account and sample data. Leave off — its password is public

    Seeds the demo account and sample data. Leave off — its password is public

    values: true | false

  • JWT_SECRETMin 32-character secret for signing auth tokens (required)

    Min 32-character secret for signing auth tokens (required)

    values: random 32+ character string

  • OEDB_BASE_URLhosted instanceThe open-exercise-db the exercise catalog is downloaded from. Set it to use a catalog you host

    The open-exercise-db the exercise catalog is downloaded from. Set it to use a catalog you host

    values: URL

  • PORT80Host port for the web interface

    Host port for the web interface

    values: port number

  • REGISTRATIONopenWho may create an account: open, first-user, or closed

    Who may create an account: open, first-user, or closed

    values: open | first-user | closed

lyftr releases & version history

FAQ

How do I get help?

Open an issue on GitHub or join the Discord community.

Can I import my data from Strong or Hevy?

CSV import is on the roadmap (planned), alongside a PWA build.

Which platforms are supported?

Android (side-load APK) and web today; iOS is planned via TestFlight / the App Store. The server runs on Raspberry Pi, x86 VPS, Synology NAS, Proxmox, and local Mac/Linux/Windows.

Which languages does Lyftr support?

English and Spanish, in the app and in the exercise library. More languages are welcome via pull requests.

Do I need an API key or account for the exercise library?

No. Your server downloads the whole open-exercise-db catalog (800+ exercises, with Spanish translations) on first startup and refreshes it every day. No key, no setup.

Where is my data stored?

In a single SQLite file on your server. Nothing is sent to any third party. Backing up is copying that one file.

How is it different from Hevy, Strong, Wger, or FitNotes?

Hevy/Strong are cloud-only and increasingly paywalled; Wger is a solid self-hosted option but Lyftr focuses on modern mobile-first UI and simpler one-command deploy; FitNotes is local-only with no sync or server deployment.

Is Lyftr really free?

Yes, Lyftr is open source under the MIT license with no subscription, no paywalled features, and no "your export is a Pro feature" restrictions.

More in Health & Fitness

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…