PWRX is a self-hosted training analytics app for cycling and running.
You import your activities from files (FIT/GPX/TCX or ZIP export), and PWRX builds a local dashboard with history, records, training load, and insights.
It runs on a normal computer or home server.
German version: README.de.md
PWRX is for athletes who want to:
- keep control of their training data
- run analytics locally
- evaluate long training history from export files
You do not need to be a developer. If Docker runs, you can use PWRX.
- Docker + Docker Compose
- Some free disk space for database and imports
- Training files (for example FIT/GPX/TCX or a ZIP export)
Notes:
- the standard path works directly with file import
- no API setup required to get started
- You want to run it locally on your laptop:
- start PWRX
- import files
- use the dashboard
- You want to migrate full history:
- upload one ZIP export as bulk import
- then keep adding new FIT/GPX/TCX files
- You want to run it on a home server (for example Linux, Windows, NAS, or Unraid):
- same file-import workflow
- browser access in your local network
- Clone repository
git clone https://github.com/cyclenoid/pwrx_public.git
cd pwrx_public- Create config
cp .env.example .envWindows (CMD):
copy .env.example .env- Set required values in
.env:
POSTGRES_DBPOSTGRES_USERPOSTGRES_PASSWORD
Optional:
DATA_HUB_DATA_DIR(default:./data)WATCH_FOLDER_SMB_PATH(UI hint only for SMB/network-path setups)
- Start containers
docker compose up -d- Open in browser
Dashboard: http://localhost:8088
API health: http://localhost:3001/api/health
pgAdmin: http://localhost:5050
This is the recommended default for all users.
- Upload individual FIT/GPX/TCX files in the Import page.
- Upload a full ZIP export (best for your first historical migration).
- Drop files into a watched folder for automatic import.
Import docs:
- Quickstart:
docs/IMPORT_QUICKSTART.md - Provider guide:
docs/IMPORT_PROVIDER_GUIDE.md
Data is stored in your configured data path:
- default:
./data - includes: database content, exports, logs, images/media
PWRX is designed for local operation.
git pull
docker compose up -dIf a release includes DB schema changes, run migration:
docker compose exec strava-tracker npm run db:migrateCheck status:
docker compose exec strava-tracker npm run db:checkCan I use PWRX without a 24/7 machine?
Yes. Start the stack when needed. Optional catch-up after startup can be enabled.
Do I need API credentials to get started?
No. The standard mode is file based.
Is first import slow?
Large histories can take time. Import continues in the background.
Earlier versions included a direct Strava API sync path.
In a public repo this can confuse normal users, because Strava API review/capacity/rate-limit rules are not guaranteed as a standard installation path.
So the official public baseline is now clear:
- file import as default path (single + ZIP bulk import)
- no Strava API setup required for normal end-user setup
Important:
- architecture stays open for connectors
- connector-based paths are advanced operator/maintainer topics, not normal public end-user support
Official Strava references:
- https://developers.strava.com/docs/rate-limits/
- https://developers.strava.com/docs/getting-started/
- API connectivity options and operator recipes:
docs/STRAVA_CONNECTIVITY.md - Sidecar explained simply (user guide):
docs/STRAVA_SIDECAR_SIMPLE_GUIDE.md
If you deliberately run a private connector setup as maintainer/operator, read:
docs/DEPLOYMENT_RUNBOOK.mddocs/STRAVA_CONNECTIVITY.mddocs/STRAVA_SIDECAR_SIMPLE_GUIDE.md
Important:
- Strava API connectivity is not part of the public default support path.
- Any sidecar/adapter usage is operator-owned and must comply with Strava API Agreement and app review/capacity rules.
- The public sidecar script is a technical reference only and does not remove API compliance obligations.
This is intentionally a separate operator path, not the recommended starting point for normal users.
- Security policy and vulnerability reporting:
SECURITY.md
Apache-2.0 (see LICENSE)
Buy me a coffee: https://buymeacoffee.com/cyclenoid