If you are into fitness and looking into a fitness tracker that you can self-host, you will like wger. It handles workout, nutrition and weight tracking. In fact, you might still be interested in using it even if you don’t care about the FLOSS aspect of it because it comes with a free web application that you can sign up for free and use all its features.

Feature Review

To try it out yourself, first go to wger.de and click Register.

wger main page showing the Register button on the top right

Choose your username and password. Then click Register.

You can enter an email address too but it’s optional.

Register form showing username, email and password fields.

As soon as you register, you should be redirected to your dashboard.

wger dashboard showing workouts, nutritional plan and weight, without any data, after the registration.

If you entered your email address, you should also receive an email to confirm your address. Click on the link in the email to verify your email address.

Here you can start creating your workouts by clicking the button labeled “No workouts found. Add one now.”

You can create workout days and assign it to several days of the week which eliminates duplicating the same program for different days.

Add workout day page showing the description field and days of the week.

After you give a meaningful name to your workout day, you can add workouts by pressing the + button

Workout page showing the exercises added to the workout day which is currently empty

Just start typing the name of the exercise you want to add and it should search its database of exercises to suggest you the matching ones.

Add exercises page showing a keyword entered and auto-complete suggesting matching exercises.

It also groups the exercises by the muscle group to give you better guidance.

Then you can enter your target reps and weights:

Exercise settings showing reps, weight, unit and RiR for each set

RiR means Reps in Reserve which means how many more reps could you do before failure. For example, if you finish your set and feel like you could do 2 more reps without losing form, then your RiR is 2. This metric helps you to adjust the weight and reps in your training.  

Once you’ve added your workouts, it should look like this:

Exercise day showing all the exercises added to the day

You can add multiple training days. It will automatically remove the days you already selected to avoid creating overlapping training days:

Add workout day page shows the description field and the remaining days of the week.

After you’ve created your workout days, which are essentially your workout templates, you can record the actual exercise logs by clicking the Add new log button on the dashboard.

Dashboard showing the workout days and Add new log button under the table.

First you need to select the exercise day to add the logs to:

Add log to day dialog showing the list of exercise days to choose from.

After choosing the day, you are shown a page with all the sets and reps for your exercises. You can even record start and end times and your personal notes for the session.

Add new logs page showing the details of all the exercises in the day to add logs to.

Over time, after you’ve added multiple logs, you can view your progress per exercise as it displays the weights in a chart:

Training logs showing the exercise details and a chart for lifted weights.

Hopefully, I managed to pique your interest with its features. wger also has features for nutrition planning and weight tracking, which this article will not explore.

You can also add your measurements and pictures of yourself to track your progress visually. I think this is where self-hosting becomes more important. I, personally, wouldn’t upload such personal information to an online website. I would however use it more securely in my own local network. If you are also interested in self-hosting this software, proceed to the next section to see the self-hosting options.

Self-hosting wger

The recommended way to install wger on your system is using Docker.

To achieve this, first clone the wger Docker GitHub repo:

git clone https://github.com/wger-project/docker.git

Then start all services by running:

docker compose up -d

Then go to http://localhost and you should see the same landing page as the hosted version.

You can change the port by adding an override file and adding your port:

      - "8080:80"

You can also download all the images, videos, exercises etc by running the following commands:

docker compose exec web python3 manage.py sync-exercises
docker compose exec web python3 manage.py download-exercise-images
docker compose exec web python3 manage.py download-exercise-videos
docker compose exec web wger load-online-fixtures

Downloading videos takes a long time though, so if you’re not interested in viewing them I’d recommend skipping that bit.

The last important part is to back up your data which is stored in the PostgreSQL database.

Run the following commands to stop all the services to ensure the data is unchanged during the backup process:

docker compose stop web nginx cache
docker compose exec db pg_dumpall --clean --username wger > backup.sql
docker compose start

To restore it, run the following commands:

docker compose down
docker volume remove docker_postgres-data
docker compose up db -d
cat backup.sql | docker compose exec -T db psql --username wger --dbname wger
docker compose up -d


wger is quite a complicated software and it’s completely open-source and free. You can own your data and make sure it’s not sold to anyone. You can add sensitive personal information such as your body measurements and even pictures of yourself.

As it can get quite sensitive based on the data you upload, it’s important to have it installed in the security of your own network. You can decide who can have access to your data. It’s also always fun and educational working with other complex codebases as it’s a good chance to learn a lot of new things that you haven’t even heard before.

For these reasons, I’d encourage everyone to give wger a try and run it in your own environment. Happy workouts!