OpenHabitTracker
App:
https://pwa.openhabittracker.net
Take Markdown notes, plan tasks, track habits
- Free and Ad-free
- Open Source
- Privacy Focused: All user data is stored locally on your device
- Available on Windows, Linux, Android, iOS, macOS, and as a web app
- Localized to English, German, Spanish, Slovenian, French, Portuguese, Italian, Japanese, Chinese, Korean, Dutch, Danish, Norwegian, Swedish, Finnish, Polish, Czech, Slovak, Croatian, Serbian
Key Features:
- Markdown support for notes
- Use categories and priorities to organize your notes, tasks, and habits
- Advanced Search, Filter, and Sort
- Data Export/Import: JSON, YAML, TSV, Markdown
- Import your notes from Google Keep
- Available in 26 themes with Dark and Light modes
Stores:
Docker image contains a Blazor Server app for one user
https://hub.docker.com/r/jinjinov/openhabittracker
https://github.com/Jinjinov/OpenHabitTracker/pkgs/container/openhabittracker
Set your username and password with environment variables:
.env
APPSETTINGS_USERNAME=admin
[email protected]
APPSETTINGS_PASSWORD=admin
APPSETTINGS_JWT_SECRET=your-extremely-strong-secret-key
Replace your-extremely-strong-secret-key in Windows terminal:
[System.Convert]::ToBase64String([System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32))
Replace your-extremely-strong-secret-key in Linux / macOS terminal:
openssl rand -base64 32
docker-compose.yml
services:
openhabittracker:
image: jinjinov/openhabittracker:latest
ports:
- "5050:8080"
environment:
- AppSettings__UserName=${APPSETTINGS_USERNAME}
- AppSettings__Email=${APPSETTINGS_EMAIL}
- AppSettings__Password=${APPSETTINGS_PASSWORD}
- AppSettings__JwtSecret=${APPSETTINGS_JWT_SECRET}
volumes:
- ./.OpenHabitTracker:/app/.OpenHabitTracker
The default port is 5050. You can change it to 80 to avoid typing the port in the address, or to any other free port if 5050 is already in use - update the port in docker-compose.yml accordingly.
After you login at http://localhost:5050/login you can use the same browser tab to access:
- logs: http://localhost:5050/watchdog
- OpenAPI json: http://localhost:5050/openapi/v1.json
- OpenAPI UI: http://localhost:5050/scalar/v1
Sync desktop or mobile app with Docker
Run the Docker container
Choose the platform where you want to host the OpenHabitTracker server:
Docker Desktop
- Open Docker Desktop and make sure it shows Engine running
- Open a terminal in the folder containing your
.envanddocker-compose.yml - Run:
docker-compose up -d - Open
http://localhost:5050/loginin a browser to confirm the server is running - Find this machine's IP address:
- Windows:
ipconfig - Mac / Linux:
ifconfig
- Windows:
Linux server
- SSH into your server
- Install Docker:
sudo apt update && sudo apt install -y docker.io docker-compose - Open a terminal in the folder containing your
.envanddocker-compose.yml - Run:
docker-compose up -d - Find the server IP:
ifconfig
Synology NAS
- Open Package Center and install Container Manager
- Open Container Manager → Project → Create
- Set the project name to
openhabittracker - Paste the
docker-compose.ymlcontent, replacing${APPSETTINGS_...}placeholders with your actual values - Click Next → Done — the container starts automatically
- Find your NAS IP: Control Panel → Network → Network Interface
Enable sync in OpenHabitTracker
- Open OpenHabitTracker on your device
- Open the menu and click Data
- Scroll down to Online sync
- Enter the Address:
http://+ the IP from your scenario above +:5050or whichever port you chose (omit the port entirely if you chose80) - Enter your Username and Password from
.env - Check Remember me to stay logged in across app restarts
- Click Log in
Made with:
Runs with:
Desktop videos:
![]()
![]()