fitcxgp
Fast, all-in-one GPX/TCX/FIT toolkit.
Load, inspect, and convert GPX, TCX, and FIT files with one Python, Rust, or CLI API. Every supported input can be written to every supported output.
Why fitcxgp?
- All in one — GPX, TCX, and FIT read/write support.
- Fast — Rust-powered streaming parsers; GPX parsing is up to 31x faster
than
gpxpyon the real-data benchmark. - Useful model — points, segments, telemetry, device info, moving stats, elevation gain, bounds, and track simplification.
- Reliable — FIT CRC validation, property tests, and 8,280 conversion chains verified on 920 real GPX files.
- Easy to embed — Python 3.12+ ABI3 wheel, Rust library, and CLI.
Python
uv add fitcxgp
Load once, write any format:
import fitcxgp
activity_file = fitcxgp.load("run.gpx") # GPX, TCX, or FIT
gpx = activity_file.to_gpx()
tcx = activity_file.to_tcx()
fit = activity_file.to_fit()
Inspect an activity:
activity = activity_file.activities[0]
print(activity.point_count)
print(activity.distance_meters)
print(activity.duration_seconds)
print(activity.average_heart_rate_bpm)
print(activity.elevation_gain.uphill_meters)
Convert files directly:
fitcxgp.convert("run.gpx", "run.fit")
fitcxgp.convert("run.fit", "run.tcx")
Add device information when creating FIT output:
device = fitcxgp.DeviceInfo(
manufacturer_id=1,
product_id=3415,
serial_number=1234567890,
)
fit = activity_file.with_device_info(device).to_fit()
CLI
cargo run --release -- convert run.gpx run.fit
cargo run --release -- info run.fit
cargo run --release -- detect run.tcx
Rust
use fitcxgp_core::{convert, load};
let activity_file = load("run.fit").unwrap();
println!("{} points", activity_file.point_count());
convert("run.fit", "run.gpx").unwrap();
Development
uv sync --python 3.12
uv run pytest
cargo test --workspace
Conversions preserve the shared activity model, not format-specific data such as FIT developer fields or GPX routes and waypoints.
See testing, benchmarks, and the real-data report for details.
Metadata
Release files for fitcxgp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| fitcxgp-0.1.0.tar.gz | 41.7 kB | Without provenance | Details for fitcxgp-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| fitcxgp-0.1.0-cp312-abi3-macosx_11_0_arm64.whl | CPython 3.12 | abi3 | macOS 11.0+ ARM64 | Details for fitcxgp-0.1.0-cp312-abi3-macosx_11_0_arm64.whl |
Total release size: 737.8 kB
Release files / fitcxgp-0.1.0.tar.gz
| Download URL | fitcxgp-0.1.0.tar.gz |
|---|---|
| Size | 41.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0036314ae08214b376789dc1dd92b61fa3584ec0c3e5c6950a114535bef75fe7
|
|
BLAKE2b-256 checksum How to use checksums |
5ac533f10f76300ea6d6cad35c2d16b7f0c8627b23fc14d0caf10ab708e71757
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.14.1
|
Release files / fitcxgp-0.1.0-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | fitcxgp-0.1.0-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 696.1 kB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d632717f64431817d92b4296b9c912f0ce35f6db2d1372bf44c293759310985e
|
|
BLAKE2b-256 checksum How to use checksums |
6e795d4ed1da8cd85d777ad5e6ff0281cacb3a14d488311428afe937797c5c44
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.14.1
|
Security for fitcxgp 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.