- Python 71.7%
- TypeScript 18.5%
- Vue 9.6%
- Shell 0.1%
|
Some checks failed
Deploy documentation / build (push) Failing after 0s
Lint Backend / Backend (ruff) (push) Failing after 0s
Lint Frontend / Frontend (format + lint + type-check + test) (push) Failing after 0s
Mirror to GitLab / mirror (push) Failing after 0s
OpenAPI Types Drift / Generated API types in sync with backend (push) Failing after 0s
Test Backend (distributed) / Backend (distributed, lease heartbeat) (push) Failing after 0s
Test Backend / Backend (pytest) (push) Failing after 0s
Deploy documentation / deploy (push) Has been skipped
Test Backend (distributed) / Backend (distributed, uploads) (push) Failing after 0s
Test Backend (distributed) / Backend (distributed, worker crash) (push) Failing after 0s
* fix(health): completing a fasting session returns 500 * Use `getattr` so that it works as enum and str |
||
|---|---|---|
| .agents/skills | ||
| .claude/skills | ||
| .codegraph | ||
| .github | ||
| aux_scripts | ||
| backend | ||
| docker | ||
| docs | ||
| frontend | ||
| logo | ||
| mkdocs_hooks | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| docker-compose.yml.example | ||
| docker-compose.yml.secrets.example | ||
| LICENSE | ||
| mkdocs.yml | ||
| README.md | ||
| ROADMAP.md | ||
| screenshot_01.png | ||
| SECURITY.md | ||
| TRADEMARK.md | ||
Note
Endurain is on a temporary feature freeze - The project is not paused. The focus is shifting from new features to strengthening the foundations. More details here
Endurain
A self-hosted fitness tracking service
Visit Endurain's Mastodon profile, Bluesky profile, Discord server and LinkedIn page.
🚀 Try the Demo
Experience Endurain without installation:
Demo URL: https://demo.endurain.com
- Username:
admin - Password:
admin - Reset Schedule: Daily at midnight (Europe/Lisbon timezone)
⚠️ Note: The demo environment resets every day. Do not store important data.
Table of Contents
- Endurain documentation
- What is Endurain?
- Endurain screenshots
- Sponsors
- Contributing
- Help Translate
- License
What is Endurain?
Endurain is a self-hosted fitness tracking service designed to give users full control over their data and hosting environment. It's similar to Strava but focused on privacy and customization. Built with:
- Frontend: Vue.js 3 with TypeScript, Tailwind CSS and shadcn-vue components, with Pinia and TanStack Query for state management
- Backend: Python FastAPI, Alembic, SQLAlchemy, stravalib and python-garminconnect for Strava and Garmin Connect integration, gpxpy, tcxreader and fitdecode for .gpx, .tcx and .fit file import respectively
- Database: PostgreSQL for efficient data management
- Integrations: Supports Strava and Garmin Connect. Manual upload of activities using .gpx, .tcx and .fit files are also supported
To deploy Endurain, a Docker image is available, and a comprehensive example can be found in the "docker-compose.yml.example" file provided. Configuration is facilitated through environment variables, ensuring flexibility and ease of customization.
For more information please see the Endurain's documentation.
Sponsors
A huge thank you to the project sponsors! Your support helps keep this project going.
Support Endurain's development on:
Contributing
Contributions are welcomed! Please open an issue to discuss any changes or improvements before submitting a PR. Check out the Contributing Guidelines for more details.
Help Translate
Endurain has multi-language support, and you can help translate it into more languages via Codeberg Translate.
License
This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.
Trademark Notice
Endurain® is a trademark of João Vitória Silva.
You are welcome to self-host Endurain and use the name and logo, including for personal, educational, research, or community (non-commercial) use.
Commercial use of the Endurain name or logos (such as offering paid hosting, products, or services) is not permitted without prior written permission.
See TRADEMARK.md for full details.