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.

Choose your username and password. Then click Register.
You can enter an email address too but it’s optional.

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

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.

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

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.

It also groups the exercises by the muscle group to give you better guidance.
Then you can enter your target reps and weights:

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:

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

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.

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

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.

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

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:
services: nginx: ports: - "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
Conclusion
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!