• Python 71.7%
  • TypeScript 18.5%
  • Vue 9.6%
  • Shell 0.1%
Find a file
Arnau Mora 5617a906f1
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 (#824)
* fix(health): completing a fasting session returns 500

* Use `getattr` so that it works as enum and str
2026-10-23 15:28:57 +01:00
.agents/skills refactor(backend)!: adopt JASIL platform, modular backend and event-driven activity ingestion (#785) 2026-10-19 13:18:12 +01:00
.claude/skills refactor(backend)!: adopt JASIL platform, modular backend and event-driven activity ingestion (#785) 2026-10-19 13:18:12 +01:00
.codegraph feat(docs): add CodeGraph setup instructions and update .gitignore 2026-10-08 16:12:09 +01:00
.github docs: add login photo suggestion process 2026-10-20 15:31:07 +01:00
aux_scripts feat: port move_to_weblate.ps1 to Python 2026-07-01 15:35:21 +01:00
backend fix(health): completing a fasting session returns 500 (#824) 2026-10-23 15:28:57 +01:00
docker refactor: replace Apprise with jasil mail and durable email jobs (#825) 2026-10-19 21:36:49 +01:00
docs fix(core): harden against a wedged database pool and clarify missing client-type errors (#857) 2026-10-23 14:51:07 +01:00
frontend fix(activities): show moving time in the activity summary (#788) 2026-10-23 14:59:37 +01:00
logo refactor(frontend): rebuild the UI on Tailwind v4 + shadcn-vue (#742) 2026-06-30 23:41:28 +02:00
mkdocs_hooks refactor(backend)!: adopt JASIL platform, modular backend and event-driven activity ingestion (#785) 2026-10-19 13:18:12 +01:00
.dockerignore Add .dockerignore and update .gitignore; fix Garmin activities retrieval 2025-05-28 15:51:00 +02:00
.env.example refactor(docker): simplified docker compose examples 2026-10-19 14:31:36 +01:00
.gitignore refactor(backend)!: adopt JASIL platform, modular backend and event-driven activity ingestion (#785) 2026-10-19 13:18:12 +01:00
AGENTS.md refactor(backend)!: adopt JASIL platform, modular backend and event-driven activity ingestion (#785) 2026-10-19 13:18:12 +01:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2025-05-03 23:07:45 +01:00
CONTRIBUTING.md docs: add login photo suggestion process 2026-10-20 15:31:07 +01:00
docker-compose.yml.example refactor(docker): simplified docker compose examples 2026-10-19 14:31:36 +01:00
docker-compose.yml.secrets.example refactor(docker): simplified docker compose examples 2026-10-19 14:31:36 +01:00
LICENSE Change license from GPL 3.0 to AGPL 3.0 or later 2024-12-28 21:47:29 +00:00
mkdocs.yml docs: add login photo suggestion process 2026-10-20 15:31:07 +01:00
README.md refactor: replace Apprise with jasil mail and durable email jobs (#825) 2026-10-19 21:36:49 +01:00
ROADMAP.md Update docs and roadmap for features and trademark 2025-12-08 16:02:56 +00:00
screenshot_01.png refactor(frontend): rebuild the UI on Tailwind v4 + shadcn-vue (#742) 2026-06-30 23:41:28 +02:00
SECURITY.md Update supported versions in SECURITY.md 2026-10-21 12:56:54 +01:00
TRADEMARK.md Update TRADEMARK.md 2025-12-03 22:24:47 +00:00

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

Translation status License Release Stars Trademark Policy

A self-hosted fitness tracking service
Visit Endurain's Mastodon profile, Bluesky profile, Discord server and LinkedIn page.

Endurain Screenshot

🚀 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

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.

Built with ❤️ from Portugal | Part of the Endurain ecosystem