Skip to content

openathleteorg/openathlete

OpenAthlete Logo

OpenAthlete

The ethical European 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

Github Stars License Commits-per-month iOS App API Docs Documentation Discord

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 β€” Strava, Garmin, Suunto, Polar, Coros
  • πŸ“± Mobile Apps β€” Native iOS (TestFlight), Android coming
  • πŸ€– 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 βœ… Optional ⚠️ Premium ❌ ❌
Price 12€/mo or 99€/yr $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

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

  1. 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
  2. Install packages with pnpm

    pnpm install
  3. Set up your environment variables

    • Frontend: Copy apps/web/.env.example to apps/web/.env and update with your configuration
    • Backend: Copy apps/api/.env.example to apps/api/.env and update with your configuration
    • At minimum, you'll need:
      • DATABASE_URL - PostgreSQL connection string
      • JWT_SECRET - Secret key for JWT tokens (generate with openssl rand -base64 32)
      • VITE_API_URL - Backend API URL (for frontend)
  4. 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
  5. Build shared packages

    pnpm shared build
  6. 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
  7. Run (in development mode)

    pnpm dev

    This will start:

    • Frontend at http://localhost:5173
    • Backend API at http://localhost:3000

Development Tips

  1. Run type checking before committing:

    pnpm tsc:check
  2. Format and lint your code:

    pnpm format:write
    pnpm lint:fix

Upgrading from earlier versions

  1. Pull the current version:

    git pull
  2. Check if dependencies got added/updated/removed

    pnpm install
  3. 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
  4. Check for .env variables changes

    Compare your .env files with the .env.example files to see if new variables were added.

  5. Start the server. In a development environment, just do:

    pnpm dev

    For a production build, run for example:

    pnpm build
    pnpm start
  6. Enjoy the new version.

Deployment

Docker

OpenAthlete can be deployed using Docker. Docker configurations are provided in the repository.

Requirements

Make sure you have docker & docker compose installed on the server / system.

Running OpenAthlete with Docker Compose

  1. Clone the repository:
   git clone https://github.com/openathleteorg/openathlete.git
cd openathlete
  1. Prepare your configuration: Copy .env.example files and update them:

    cp apps/api/.env.example apps/api/.env

cp apps/web/.env.example apps/web/.env


Update the appropriate values in your `.env` files, then proceed.

3. Start OpenAthlete via docker compose:

```bash
docker compose up -d
  1. Open a browser to your configured URL. The first time you run OpenAthlete, you'll need to create your first user.

Updating OpenAthlete

  1. Stop the OpenAthlete stack

    docker compose down
  2. Pull the latest changes

    git pull
  3. Update env vars as necessary.

  4. Re-start the OpenAthlete stack

    docker compose up -d

Manual Deployment

For detailed deployment instructions, see our self-hosting documentation.

Backend (NestJS)

  1. Build the application:

    cd apps/api
    pnpm install
    pnpm build
  2. Set up environment variables in .env

  3. Run database migrations:

    pnpm database run db:deploy
  4. Start the server:

    pnpm start:prod

Frontend (React + Vite)

  1. Build the application:

    cd apps/web
    pnpm install
    pnpm build
  2. 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:

  • Subscribe to OpenAthlete Cloud β€” The simplest way to support development while getting a managed, zero-config experience. 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. The Cloud version funds 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

Releases

No releases published

Sponsor this project

Packages

 
 
 

Contributors