OpenAthlete:TrainingPeaks 与 Strava 的开源伦理替代方案
openathleteorg/openathlete
OpenAthlete 是采用 AGPLv3 协议的开源耐力训练平台,定位为 TrainingPeaks 和 Strava 的伦理替代方案,支持自托管、完整数据导出,托管与处理默认面向欧盟并符合 GDPR。
OpenAthlete
The ethical alternative to TrainingPeaks and Strava.
OpenAthlete is open source under the AGPLv3, built so you can own your training data: self-host, export, and avoid vendor lock-in. Core hosting and processing are oriented toward the European Union with GDPR-minded defaults.
Learn more »
Discord · Website · Documentation · API Docs · Issues
About the Project
Training infrastructure that respects athletes
Endurance athletes feed years of intimate training data into proprietary U.S. platforms such as TrainingPeaks, Strava, and Garmin Connect, with little practical say in how that data is processed, monetized, or retained.
OpenAthlete is a different proposition: comparable tracking and analysis in an open-source stack, hosted in the EU when you use managed infrastructure, self-hostable when you prefer your own hardware, and with training-load logic you can read and adapt in the repository. It is maintained by an ultra-trail runner based in Grenoble.
Key Features
- 🇪🇺 EU-Hosted & GDPR-Native — Data processed in the European Union
- 🔒 You Own Your Data — Self-hostable, full export, no lock-in
- 🔍 Transparent Algorithms — Training load formulas (CTL/ATL/TSB) are in the code, auditable, customizable
- 📊 Comprehensive Tracking — Workouts, fitness/fatigue/form metrics, progression visualizations
- 🔗 Device Integrations — Activities from Strava, Garmin, Polar and Suunto; planned workouts sent to Garmin and Suunto watches (Coros coming); FIT and GPX file import
- 📱 On your phone — Installable web app on iPhone and Android; iOS app in beta (TestFlight)
- 🤖 AI Assistance — Modest helpers for session generation and load monitoring (not a replacement for a coach)
- 🌐 Open Source — AGPLv3, community-driven, sustainably funded
Comparison
| Feature | 🟢 OpenAthlete Cloud | 🔵 TrainingPeaks | 🟠 Strava | 🟣 Intervals.icu |
|---|---|---|---|---|
| Open source code | ✅ AGPLv3 | ❌ | ❌ | ❌ |
| Self-hostable option | ✅ Free | ❌ | ❌ | ❌ |
| Data hosted in EU | ✅ France | ❌ US | ❌ US | ⚠️ Mixed |
| GDPR-native | ✅ | ⚠️ | ⚠️ | ⚠️ |
| Transparent algorithms | ✅ Code audit | ❌ Black box | ❌ Black box | ⚠️ Partial |
| Full data export | ✅ Native | ⚠️ Limited | ⚠️ Limited | ✅ |
| CTL/ATL/TSB tracking | ✅ | ✅ | ❌ | ✅ |
| AI session generation | ✅ Your key, or included for Supporters | ⚠️ Premium | ❌ | ❌ |
| Price | Free, or 5€/mo (50€/yr) as a Supporter | $19.99/mo | $11.99/mo | Free (donation) |
Recognition
OpenAthlete is built by athletes, for athletes. We're proud to be part of the open-source community and grateful for all contributors who help make this platform better.
Built With
- React 19 - Modern UI framework
- NestJS - Scalable Node.js backend
- TypeScript - Type-safe development
- Prisma - Next-generation ORM
- PostgreSQL - Robust database
- Tailwind CSS - Utility-first CSS
- ShadCN UI - Beautiful component library
- Vite - Next-generation frontend tooling
- Various LLM providers (configurable)
Getting Started
To get a local copy up and running, please follow these simple steps.
Prerequisites
Here is what you need to be able to run OpenAthlete.
- Node.js (Version: >=22.14.0) - We recommend using nvm for version management
- pnpm (Version: >=9.x) - Fast, disk space efficient package manager
- PostgreSQL (Version: >=13.x) - Database
- Git - Version control
If you want to enable AI features, you may need to obtain API credentials. More details can be found in the documentation.
Development
Setup
-
Clone the repo into a public GitHub repository (or fork https://github.com/openathleteorg/openathlete/fork):
git clone https://github.com/openathleteorg/openathlete.git cd openathlete -
Install packages with pnpm
pnpm install
-
Set up your environment variables
- Frontend: Copy
apps/web/.env.exampletoapps/web/.envand update with your configuration - Backend: Copy
apps/api/.env.exampletoapps/api/.envand update with your configuration - At minimum, you'll need:
DATABASE_URL- PostgreSQL connection stringJWT_SECRET- Secret key for JWT tokens (generate withopenssl rand -base64 32)VITE_API_URL- Backend API URL (for frontend)
- Frontend: Copy
-
Setup Node version
If your Node version does not meet the project's requirements, use nvm:
nvm use
You first might need to install the specific version and then use it:
nvm install && nvm use -
Build shared packages
pnpm shared build
-
Set up the database using Prisma
In a development environment, run:
pnpm database run db:migrate dev
In a production environment, run:
pnpm database run db:deploy
-
Run (in development mode)
pnpm dev
This will start:
- Frontend at
http://localhost:5173 - Backend API at
http://localhost:3000
- Frontend at
Development Tips
-
Run type checking before committing:
pnpm tsc:check
-
Format and lint your code:
pnpm format:write pnpm lint:fix
Upgrading from earlier versions
-
Pull the current version:
git pull
-
Check if dependencies got added/updated/removed
pnpm install
-
Apply database migrations by running one of the following commands:
In a development environment, run:
pnpm database run db:migrate dev
In a production environment, run:
pnpm database run db:deploy
-
Check for
.envvariables changesCompare your
.envfiles with the.env.examplefiles to see if new variables were added. -
Start the server. In a development environment, just do:
pnpm dev
For a production build, run for example:
pnpm build pnpm start
-
Enjoy the new version.
Deployment
Self-hosting with Docker
On any server with Docker and its Compose plugin:
curl -fsSL https://raw.githubusercontent.com/openathleteorg/openathlete/main/scripts/install.sh | shOpenAthlete then runs on http://localhost from the published images, with new random secrets in openathlete/.env. Add -s -- --domain openathlete.example.org to serve your domain over HTTPS with automatic certificates. Run the script again to update.
The self-hosting guide covers HTTPS, device sync, AI, backups and upgrades from older setups.
Manual Deployment
For detailed deployment instructions, see our self-hosting documentation.
Backend (NestJS)
-
Build the application:
cd apps/api pnpm install pnpm build -
Set up environment variables in
.env -
Run database migrations:
pnpm database run db:deploy
-
Start the server:
pnpm start:prod
Frontend (React + Vite)
-
Build the application:
cd apps/web pnpm install pnpm build -
Serve the built files using a web server (nginx, Apache, etc.)
Example nginx configuration:
server { listen 80; server_name your-domain.com; root /path/to/apps/web/dist; index index.html; location / { try_files $uri $uri/ /index.html; } }
Environment Variables
Backend Required Variables
DATABASE_URL="postgresql://user:password@host:5432/openathlete" JWT_SECRET="your-secret-key" NODE_ENV="production"
Frontend Required Variables
VITE_API_URL="https://api.your-domain.com"
For a complete list of environment variables, see the .env.example files in each app directory.
Support OpenAthlete
OpenAthlete is built by one developer in Grenoble, supported by the community. There are three ways to help the project thrive:
- Become a Supporter on OpenAthlete Cloud — The Cloud is free; the Supporter subscription (5€/month or 50€/year) funds development and adds unlimited coached athletes and AI included every month. See openathlete.org.
- Become a Patreon supporter — Recurring support without using the cloud. patreon.com/OpenAthlete.
- Contribute code or feedback — Star the repo, open issues, send PRs, join the Discord.
Self-hosting is fully supported and always free, with no limits. Supporters fund the project's long-term sustainability.
Roadmap
OpenAthlete is actively developed. Here's what's coming next:
- 🧩 Modular Training Logic - Custom goals, coach import, and flexible training methodologies
- 📈 Enhanced Dashboards - Intuitive data visualizations and performance analytics
- 🔗 More Integrations - Wahoo, Coros, Zwift, Oura, and more
- 📅 Weekly Training View - Better calendar and planning interface
- 🏃 Advanced AI Features - More intelligent training suggestions and injury prevention
- 📱 Mobile App Enhancements - Improved mobile experience and offline support
See our GitHub Issues for a detailed list of proposed features and known issues.
License
Distributed under the AGPLv3 License. See LICENSE for more information.
Contributing
Please see our contributing guide.
Good First Issues
We have a list of good first issues that contain small features and bugs which have a relatively limited scope. This is a great place to get started, gain experience, and get familiar with our contribution process.
Help Wanted
We also have help wanted issues that are perfect for contributors looking to make a bigger impact.
Contributors
Translations
Don't code but still want to contribute? Join our Discord community and help translate OpenAthlete into your language.
Repo Activity
Acknowledgements
Special thanks to these amazing projects which help power OpenAthlete:
Made with ❤️ by athletes, for athletes
来源:GitHub · github.com