Skip to main content

Garmin FIT file loader for SQLite + Grafana

Project description

GraFIT

Loads Garmin FIT files into a SQLite database and visualizes them in Grafana.

GraFIT parses .fit files (activities, sleep, GPS, etc.) using python-fitparse, writes them to SQLite using a schema generated from the FIT profile, and ships with Grafana provisioning (datasource + dashboards) so you can browse the data immediately.

Install

uv tool install grafit

Or run without installing:

uvx grafit <command> [options]

Requires Python 3.11+.

Usage

uv run grafit <command> [options]

Commands

  • init <db_path> — create and initialize the SQLite database.
  • import <path> <db_path> — import a FIT file or directory of FIT files into the database.
    • --force reimport files already present in the database.
    • --no-recursive do not recurse into subdirectories.
  • stats <db_path> — show row counts per table.
  • purge <db_path> --file-hash <sha256> — remove all rows imported from a given file.
  • generate-schema <output> — write the full DDL SQL to a file.
  • install-provisioning <dest> — copy the bundled Grafana provisioning (datasource + dashboards) to a directory.
    • --force overwrite the destination if it exists.

Global flag: -v / --verbose for debug logging.

Grafana

A docker-compose.yml is provided to run Grafana with the SQLite datasource plugin against ./fit_data.db and the bundled dashboards mounted from ./grafana-provisioning.

Note: the bundled compose file enables anonymous admin access and disables the login form. It is intended for local use only — do not expose it to a network.

Drop your FIT files into ./GARMIN and bring it up:

docker compose up

A grafit-init container installs the bundled provisioning, runs grafit init, and runs grafit import ./GARMIN against shared volumes; Grafana waits for it to finish before starting. Re-running docker compose up reuses the database — already-imported files are skipped by hash.

Grafana is then available at http://localhost:3000.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

grafit-1.6.0.tar.gz (24.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

grafit-1.6.0-py3-none-any.whl (33.4 kB view details)

Uploaded Python 3

File details

Details for the file grafit-1.6.0.tar.gz.

File metadata

  • Download URL: grafit-1.6.0.tar.gz
  • Upload date:
  • Size: 24.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"10","id":"buster","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for grafit-1.6.0.tar.gz
Algorithm Hash digest
SHA256 063bcbbfe3f9ce8d2de1f6b77f929a1d570e237212b18ee56b99d6edd8e0a009
MD5 4a594133a1da24a5d5e9e1880d14cf00
BLAKE2b-256 1caca9acb843dea9157d50c956788da706e2ce378f9013a032f24ccd85393f0f

See more details on using hashes here.

File details

Details for the file grafit-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: grafit-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 33.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"10","id":"buster","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for grafit-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eb8e75d7480fd9fe14a7ecaad3bcef283d1060dc7549d438604939a05e3c08a2
MD5 c781bfbae6da7bcf2e2b4f46ec2579e2
BLAKE2b-256 74f3526ca57d6e896699923289651a6ee982988c7900321ea8ee5c9f830ac3c4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page