Stryder is a local-first running data analysis project built around Stryd and Garmin CSV exports.
It is designed with a clear separation of concerns:
- Stryder Core handles parsing, matching, normalization, and metrics.
- Stryder CLI is responsible for importing data and generating reports.
- Stryder Web (Django) provides a read-only web viewer on top of the same database.
The goal of Stryder is not to replace commercial platforms, but to give runners full ownership and transparency over their training data while serving as a learning project in Python and software architecture.
Stryder is structured as a multi-layer application:
- Shared business logic used by all interfaces
- CSV parsing and normalization
- Timezone-aware Garmin β Stryd matching
- Canonical metrics and summaries
- SQLite database schema
- Primary entry point for data import
- Batch and single-run processing
- Weekly and custom summaries
- CLI tables and exported plots
- Local web viewer running on Django
- Single run detailed reports with graphs
- Custom date range reports
- Interactive axis selection
- Read-only by design (no imports via web)
The CLI and Web interface operate on the same SQLite database, ensuring consistency across views.
View your stored runs filtering them by custom dates or/and keywords.
Visualize your training load with plots using selectable axes.
Generate weekly reports with distance, avg HR, power, and duration.
Visualize your training load with automatic plots.
Inspect any run in detail with normalized workout names, timestamps, and metrics.
- Timezone-aware Stryd β Garmin matching (Β±60s tolerance)
- Normalized workout naming
- Canonical metrics and summaries
- Local SQLite storage
- Interactive menu-based interface
- Batch import of Stryd CSV files
- Garmin activity matching
- Weekly and custom summaries
- Single-run detailed reports
- Exportable visual charts
- Single run detailed reports
- Custom date range analysis
- Interactive X/Y axis selection
- Clean, page-based layout
Before using Stryder, make sure you have the following:
These are your detailed per-run files, exported from Stryd PowerCenter or the mobile app. Each file contains second-by-second metrics such as pace, power, cadence, etc.
π Export them in bulk and place them all in a folder. Each file typically has a long numeric filename, like:
5059274362093568.csv, 5073428460371968.csv
π‘ Youβll be prompted to select this folder during batch import.
This is a single CSV file containing summary data for your Garmin runs β one row per workout β with columns like start time, duration, and distance.
To download it:
- Visit Garmin Connect
- Go to your activities list
- Export all (or running-only) activities as a
.csvfile
It will be named something like:
activities.csv
π‘ This is the file you'll be prompted to provide as the "Garmin file."
pip install -r requirements.txtpython -m stryder_cli.cli_mainThe CLI is responsible for:
- Importing Stryd and Garmin CSV files
- Building the local SQLite database
- Generating CLI-based reports
python manage.py runserverThe web interface:
- Reads from the same SQLite database
- Provides interactive visual reports
- Does not modify or import data
- Python 3.11
- SQLite
- Pandas
- Matplotlib
- Tabulate
- Django
- HTML / CSS (Django templates)
- Matplotlib (server-side rendering)
The same SQLite database and core logic are shared between the CLI and Web interfaces.
These are planned or possible features for future versions of Stryder:
-
Basic CLI with Stryd + Garmin import
-
Timezone prompt and matching tolerance
-
Skipping unmatched runs for later review
-
Store last-used file paths
-
Add CLI commands for viewing runs and summaries
-
Weekly/monthly mileage summaries
-
Graphs: power, distance, duration and HR over time
-
Web Viewer (Django)
-
Text-based UI (Textual) as an optional interface on top of Stryder Core
-
Advanced run comparisons
-
Weekly / monthly / yearly presets in the web interface
-
Segment-based analysis within runs
-
Export filtered data to CSV
-
Support FIT / TCX / GPX parsing
Giorgos Chrysopoulos
Junior Python Developer & Hobbyist Runner
π LinkedIn
π‘ Want to contribute? Open an issue or fork the repo!
MIT License β see the LICENSE file.




