Skip to content

Releases: dvorka-oss/mytral

MyTraL 1.59.0

Choose a tag to compare

@dvorka dvorka released this 19 Jul 13:10
63bfa9a
feature everesting

This MyTraL minor release brings:

Added

  • Added sport-aware Everesting experience on the dashboard. A new Everesting card tracks
    how much of Mt. Everest you have accumulated for your top climbing sport, with a
    Day/Week/Month/Year toggle.
    Climbing a full Everest - or a Quarter, Half, Double, or Triple - in a single activity
    earns an Everesting achievement badge shown on the activity, in activity lists, and on
    the "Highest Climb Ever" card.
  • Added weekly elevation gain to the calendar year view. The last column of the calendar
    table now shows the total elevation climbed each week above the weekly weight.
  • Added lifetime elevation gain to the Lifetime Totals insight.
  • Added a new Histograms page - reachable from the Charts page - showing the
    distribution of your activities by distance, time, and elevation gain.
  • Added Winget distribution Makefile targets, artifacts and scripts.

Changed

  • Replaced the "Years Active" dashboard summary card with a "Total Elevation" card
    showing the cumulative elevation gained across all activities.
  • Everesting elevation is now counted per climbing sport (Ride, Run, Hike, and Nordic
    Ski) instead of lumping all sports together.

Fixed

  • Fixed the This vs. Last page showing the literal text "None" instead of a
    chart when the selected sport and period had no data - it now shows a friendly
    empty state.
  • Fixed typos in GH issues in README.md.
  • Removed dead code from around the code base (import).

Documentation

  • WAITING FOR MYTRAL APPROVAL - THIS WILL WORK AS SOON AS MYTRAL IS IN:
    • Documented Winget release process as a feature analysis in docs/.
    • Documented installing MyTraL on Windows via Winget in INSTALLATION.md.
  • Listed the Windows (winget) installation method in README.md.
  • Added new features screenshots for everesting and histograms.

Web

  • Improved WWW pages SEO by adding the sitemap, OG image, 404 page, and favicon.

MyTraL 1.58.0

Choose a tag to compare

@dvorka dvorka released this 08 Jul 09:49
feature heatmap

This MyTraL minor release brings:

Added

  • Improved the first login experience in MyTraL DESKTOP incarnation: when no
    user profile exists yet, a default athlete user ("MyTraL Athlete") is
    auto-created and auto-logged in, landing straight on the dashboard - no
    sign-up/login step required. Logging out disables auto-login until the next
    explicit login, so a second/third user can be added or logged into from the
    login page.
  • Calendar and sickness heatmaps now mark today with a yellow rectangle so the
    current week and day stand out, and each sickness day's tooltip now reads like
    2026-05-25: 3x sick instead of a bare count.
  • Added estimated speed to the analysis chart of the activity in case that activity
    recordings (as well as parquet) don't have it.
  • Added tooltip with the elevation, time, distance and grade to the elevation chart
    on the activity analysis page.
  • Added a macOS .dmg desktop distribution, built with PyInstaller and
    hdiutil/iconutil and attached to the Distro macOS DMG GitHub Actions workflow
    run for every release PR. The build targets Apple Silicon (arm64) only and ships
    unsigned (no Apple Developer certificate).
    See docs/INSTALLATION.md for the one-time Gatekeeper workaround needed
    on first launch.
    Data is stored in ~/Library/Application Support/mytral/ like every other macOS app.

Fixed

  • Fixed path(s) in Snap which pointed outside of strict confinement filesystem.

Documentation

  • Documented macOS Apple Silicon (arm64) installation and build.

Support on Open Collective

MyTraL 1.57.0

Choose a tag to compare

@dvorka dvorka released this 05 Jul 13:48
bd40774
feature manequinne

This MyTraL minor release brings:

Added

  • Published MyTraL to the Snap Store at https://snapcraft.io using strict
    confinement. The Snap Store snap runs the local server and opens the UI in the
    default browser. Athlete data are stored in $SNAP_USER_COMMON
    (~/snap/mytral/common) i.e. are NOT stored in the location used by all other
    distros - data persist until uninstall (snapd keeps a snapshot for ~31 days
    after snap remove).
  • Added new body mannequin - from robot-like to realistic anatomical muscle
    geometry adapted from the MIT-licensed react-native-body-highlighter.
  • Added activity bookmarks - bookmark any activity from its detail page.
  • Added an Elevation aspect to the This vs. Last and Chargs pages,
    comparing weekly, monthly, and yearly elevation gain. The weekly and monthly
    charts also show a dashed red Everesting (8848 m) reference line so athletes
    can see whether their cumulative climbing reaches Mt. Everest peak.

Changed

  • Redrew the body mannequin with realistic anatomical muscle geometry, used
    everywhere it appears (muscle load, injuries, and sickness). Muscle load now
    renders as a cool-to-hot volume heatmap.

Documentation

  • Documented both strict and classic Snap installations.
  • Documented the missing python3-all build prerequisite for local .deb builds
    (make distro-ubuntu-deb) in the installation guide.

Fixed

  • Fixed Ubuntu PPA/.deb installation on Ubuntu releases that do not ship
    Python 3.12 as the system interpreter (trusty through focal) - postinst
    now uses uv to provision a self-contained Python 3.12 under /opt/mytral,
    independent of the host's system Python.
  • Fixed .deb package Architecture metadata (all -> amd64 arm64) to match
    what postinst's uv bootstrap actually supports, so apt refuses
    unsupported architectures upfront instead of installing a package that fails
    during configure.
  • Fixed .deb postinst failing with an unclear uv pip install error when
    the bundled wheel or requirements.txt was missing - it now fails fast with a
    clear message.

Security

  • Hardened .deb postinst: the downloaded uv binary is now verified against
    a pinned sha256 checksum before extraction, closing a supply-chain gap where
    a tampered or corrupted release asset would otherwise be executed as root
    during package installation.

Infrastructure

  • Rewrote build/ubuntu/launchpad-release.sh to accept an optional Ubuntu
    codename argument, building (and optionally uploading) a single distribution
    instead of always looping over every supported version.
  • Added a UBUNTU_VERSION parameter (default noble) to make distro-ubuntu-deb, and a new make distro-launchpad-release-version target
    to build and upload a single Ubuntu version's PPA package.

Support on Open Collective

MyTraL 1.56.0

Choose a tag to compare

@dvorka dvorka released this 27 Jun 13:41
95269ae

This MyTraL minor release brings:

Added

  • Added a Flatpak distribution (fitness.mytral.Mytral). The package runs the local
    server and opens the UI in the default browser.
    Athlete data are stored outside of the sandbox in the standard MyTraL directory.
  • Added Distro Tarball GHA workflow that builds the upstream tarball in
    rel/<major.minor.patch> branches targeting main.
  • Added Distro Snap GHA workflow that builds the Snap package in
    rel/<major.minor.patch> branches targeting main.
  • Added Distro Windows GHA workflow that builds the Windows installer and ZIP archive
    on a Windows runner in rel/<major.minor.patch> branches targeting main.
  • Added Distro Flatpak GHA workflow that builds the Flatpak bundle in
    rel/<major.minor.patch> branches targeting main.
  • Added distro-win-zip Makefile target that packages the Windows desktop executable
    into a ZIP archive (distro/windows/mytral-<version>.exe.zip).

Changed

  • Removed the Waitress WSGI server from the desktop edition. The desktop app serves
    a single local, so it now uses Flask's built-in threaded server - this removes
    a dependency and simplifies installation and packaging across Snap, PPA,
    and the Windows installer.
  • Updated bleach from 6.3 to 6.4.
  • Updated cryptography from 46.0 to 48.0.
  • Updated msgpack from 1.0 to 1.2.
  • Updated pytest (dev) from 8.4 to 9.0.

Documentation

  • Documented Flatpak install and build.
  • Documented Snap build.

Fixed

  • Fixed distro-win-installer Makefile target which depended on the Linux targets.

MyTraL 1.55.0

Choose a tag to compare

@dvorka dvorka released this 26 Jun 08:18
63fa516

This MyTraL minor release brings:

Changed

  • Switched from Python 3.11 to Python 3.12. The main reason is that Snap 22 runtime
    had Python 3.10 and Snap 24 runtime has Python 3.12. New Python constructs - like
    type, override, and T - will be incorporated as I go.

Added

  • Added improved Windows installer make targets and build artifacts.
  • Added Ubuntu resolute to Launchpad PPA.

Fixed

  • Fixed "missing waitress" server in the MyTraL installation from PPA apt log.

Documentation

  • Banner improved by the switch to MyTraL WWW palette.

MyTraL 1.54.0

Choose a tag to compare

@dvorka dvorka released this 25 Jun 15:21
8cb0326

This MyTraL minor release brings:

Fixed

  • Fixed and refactored Snap distribution builder to have snapcraft.io on repository
    paths required by snapcraft.io, use host's vs. container's resources correctly,
    and avoid use of (host) hard-coded paths.

MyTraL 1.53.0

Choose a tag to compare

@dvorka dvorka released this 24 Jun 20:59
e2f1439

This MyTraL minor release brings:

Added

  • Added Ubuntu PPA distribution for Ubuntu via Launchpad (ppa:ultradvorka/sport).
  • Added distro-ubuntu-deb Makefile target to build .deb package locally.
  • Added Snap package distribution for universal Linux package management. Opens a native
    desktop window via FlaskUI via classic confinement. User data stored in default
    locations.

Fixed

  • Fixed elevation chart rendering in the application's analysis page by smoothing
    the GPX points.
  • Fixed .deb packaging: Python dependencies are installed into an isolated virtualenv at
    /opt/mytral/venv/ - system Python environment is never polluted.
  • Fixed .deb wrapper scripts to export MYTRAL_INCARNATION, MYTRAL_USER_REGISTRATION,
    and MYTRAL_ENABLE_CACHE environment variables for correct desktop startup.

Performance

  • Fixed top calendar week navigation which was slooow as it was build on the frontend -
    moved it to the backend.
  • Fixed top feed day navigation which was slooow as it was build on the frontend -
    moved it to the backend.
  • Fixed duplicated activities list loading by the routes.py::calendar_view()

Documentation

  • Added MyTraL configuration guide.
  • Added Ubuntu PPA installation guide.
  • Added Ubuntu .deb installation guide.

MyTraL 1.52.0

Choose a tag to compare

@dvorka dvorka released this 22 Jun 10:30
c1d083b

This MyTraL minor release brings:

Added

  • Added Windows 10 distribution build to GH release.

Fixed

  • Fixed Desktop binary environment variables based setup so that athletes can create
    accounts OOTB.

Documentation

  • Added Ubuntu distribution build guide.
  • Added Python @ Ubuntu distribution guide.
  • Added Debian @ Docker distribution guide.
  • Added Fedora @ Docker distribution guide.

MyTraL 1.51.0

Choose a tag to compare

@dvorka dvorka released this 22 Jun 05:59
a431cae

This MyTraL minor release brings:

Added

  • Added activity type color border hint to goals, gear, and several other pages.
  • Added Strava synchronization of individual activities from the activity GET page.
  • Added card encouraging athlete to create an activity to pages which need at least one
    activity to render.
  • Added weight to gear.
  • Added tarball distribution.
  • Added Debian @ Docker distribution.
  • Added Fedora @ Docker distribution.

Fixed

  • Fixed km / hour usage of retired gears with no history.
  • Fixed exercise / symptom delete message to contain display name (not UUID) when
    removing these entities from an activity.
  • Removed color from Strava links on the day activities view and search result view.

Documentation

  • Adding the installation documentation.

MyTraL 1.50.0

Choose a tag to compare

@dvorka dvorka released this 13 Jun 16:24
e17105c

This MyTraL release is very special to me. After years of coding and hacking
together various versions of MyTraL I am moving to a brand-new Git repository on my 50th
birthday.

Sports have been my main hobby for 40 years - I have 30 years of training data scattered
across everything from paper logs to MyTraL. Today, I’m starting a fresh chapter - free
from hacks, sensitive data and the "sins of my youth."

Channeling Steve Prefontaine energy today - pure heart, max effort, FLOSS execution!

Added

  • Added polyline with map background to the activity feed.
  • Added rainbow polyline w/ running dot to the activity feed.
  • Added elevation chart to the activity feed.
  • Added "maximize map" action to the activity view page.
  • Added description field to symptoms so that user can specify how to cure such injury
    or illness.
  • Added import of Strava bulk user export ZIP archive (activities, GPX/TCX recordings,
    photos).
  • Added TCX import (individual files and directory of recordings/archives).
  • Added gender field to the athlete profile in order to calculate metrics like TRIMP
    more accurately.
  • Added TRIMP calculation and chart to the Progress menu.
  • Added FIT directory import - import all FIT files from a local directory in one go,
    with automatic conflict detection and parquet generation.
  • Bulldozer framework - a multiprocessing-based sandboxed job runner for
    parallelizing CPU-bound import workloads across multiple cores.
  • GPX polyline encoding with 2 selectable methods: fast distance-based sampling
    (default) and legacy RDP-based simplification for preview rendering. New GPX polyline
    encoding is ~4000× faster with the new distance-based sampling method - the default
    for all recording import paths.
  • Added meta sport taxonomy based lifetime totals insight page.
  • Added new cards on the homepage indicating the risk of injury, gear needed service,
    suggested activity and weight balance.
  • Added resting HR estimate to the athlete metrics page.

Changed

  • Strava API import is not hidden behing feature flag (just inverse condition on FE).
  • Refactored Predictions insight page to two pages - Predictions and Analytics.
  • Rewritten task manager, tasks and tasks invocation - removed duplicated task manager
    definitions, converged to MyTraL's task manager, typed tasks are used from now on.
  • Strava bulk ZIP archive import rewritten with Bulldozer framework for parallel
    photo & recording upload, parquet conversion, and GPX map-data precomputation.
  • Polar Precision Performance import rewritten with Bulldozer framework - HRM blob
    upload and parquet generation now run in .

Removed

  • Removed Suffer Score from the ActivityEntity and related forms and HTML code.

Fixed

  • Fixed blobstore logging message which no longer specifies wrong blob type.
  • Polar HRM import conflict resolution no longer fails on missing year-cache entries.
  • fit_tool monkeypatch tolerates non-UTF8 bytes in FIT string fields (Garmin
    developer fields), preventing silent parse failures.
  • Fixed many problems in the Polar PPP import - from user forgetting to switch
    the activity type, to the source of data (HRM vs. PDD) and the right units.
  • Fixed notifications decorator - it's newly tightly coupled w/ the icon.