Gravel
Fast road network fragility analysis at scale.
Gravel is a C++ library (with Python bindings) for computing how vulnerable road networks are to edge failures. Given a graph, it answers questions like:
- "How isolated does this location become when 10% of its roads fail?"
- "Which counties are most dependent on a single critical route?"
- "What's the composite fragility score for every US county?"
The library is built around contraction hierarchies for fast shortest-path queries, and a Dijkstra + incremental SSSP pipeline for edge-removal analysis. On a 200K-node county graph, it computes isolation fragility in ~2 seconds.
Installation
pip
pip install gravel-fragility
Binary wheels for Linux (x86_64, aarch64), macOS (x86_64, arm64), and Windows (AMD64) × Python 3.10–3.13. OSM loading (gravel.datasets.osm.load, OSMConfig, SpeedProfile) ships enabled on every wheel from v2.2.2 onward — no extra system dependencies required.
conda-forge
Not currently available. The conda-forge feedstock is out of date and does not track recent
releases — install via pip (above) for the current version. (If the feedstock is revived, a
conda install path will return here.)
From source
git clone https://github.com/rhoekstr/gravel.git
cd gravel
cmake -B build -DGRAVEL_BUILD_PYTHON=ON
cmake --build build -j
The default GRAVEL_USE_OSMIUM=AUTO enables OSM loaders when libosmium is present on the system and disables them gracefully when it isn't. CMake prints a clear status message either way. To hard-require libosmium (fail configure if missing), pass -DGRAVEL_USE_OSMIUM=ON. To opt out entirely, -DGRAVEL_USE_OSMIUM=OFF.
Install libosmium with:
- macOS:
brew install libosmium protozero - Debian/Ubuntu:
sudo apt install libosmium2-dev - conda:
conda install -c conda-forge libosmium - vcpkg (Windows):
vcpkg install libosmium protozero
Checking OSM availability at runtime
import gravel
if gravel.HAS_OSM:
graph = gravel.datasets.osm.load("county.osm.pbf")
else:
# Running on a build without OSM support (e.g., source build without libosmium).
raise RuntimeError("gravel was built without OSM support")
Quick Start
Python
import gravel
# Load a road network (from OSM PBF)
graph = gravel.datasets.osm.load("county.osm.pbf")
# Build contraction hierarchy (one-time cost)
ch = gravel.build_ch(graph)
# Compute isolation fragility for a location
cfg = gravel.LocationFragilityConfig()
cfg.center = gravel.Coord(35.43, -83.45) # Bryson City, NC
cfg.radius_meters = 30000 # 30km
cfg.monte_carlo_runs = 20
result = gravel.location_fragility(graph, ch, cfg)
print(f"Isolation risk: {result.isolation_risk:.3f}")
print(f"Reachable nodes: {result.reachable_nodes}")
print(f"Directional coverage: {result.directional_coverage:.2f}")
Datasets (2.7.0)
import gravel
# Browse the catalog of supported datasets
gravel.datasets.list() # -> list[Dataset]
print(gravel.datasets.summary()) # prints (and returns) a feature matrix
# Load a road network via the OSM submodule
graph = gravel.datasets.osm.load("county.osm.pbf")
# Fetch a hazard footprint (needs the gravel[datasets] extra)
gdf, provenance = gravel.datasets.nfhl.fetch(bbox=(-83.6, 35.3, -83.3, 35.6))
print(provenance.summary()) # {dataset_id, endpoint, resolved_version, pulled_at}
The hazard fetchers (nfhl, shakemap, usdm, nri) require the gravel[datasets] extra
(geopandas + shapely + pyproj); their edge_probabilities(...) output feeds stochastic_fragility.
Network substrates (2.7.0)
Beyond roads, gravel.datasets onboards five infrastructure networks — power grids, internet
router topology, air routes, and transit — each load(...) returning (Graph, capacity) where
capacity is a per-edge numpy array (empty when the source has no native capacity). Fragility
analyses consume these graphs and their capacity vector, and the (topological) cascade runs on the
graph structure, exactly like a road graph.
import gravel
# Power grid (thermal limits in MVA; node coords)
graph, capacity = gravel.datasets.gridsfm.load("case.json")
# Air network via OpenFlights: fetch the raw tables, then load
(airports, routes), prov = gravel.datasets.openflights.fetch("data/")
graph, capacity = gravel.datasets.openflights.load(airports, routes, with_codes=False)
# ...or with IATA codes, to key-join a BTS T-100 seat-capacity overlay
graph, capacity, node_iata = gravel.datasets.openflights.load(airports, routes, with_codes=True)
seats = gravel.datasets.t100.load("t100_segment.csv", value_field="SEATS")
capacity = gravel.datasets.t100.edge_capacity(graph, node_iata, seats)
The network loaders need only numpy; fetchers use stdlib urllib (gridsfm optionally
huggingface_hub; gtfs needs a free Transitland API key). caida (internet) and t100 are
bring-your-own-data — no fetcher — per their source licenses.
C++
#include <gravel/gravel.h>
auto graph = gravel::load_osm_graph({"county.osm.pbf", gravel::SpeedProfile::car()});
auto ch = gravel::build_ch(*graph);
gravel::LocationFragilityConfig cfg;
cfg.center = {35.43, -83.45};
cfg.radius_meters = 30000;
cfg.monte_carlo_runs = 20;
auto result = gravel::location_fragility(*graph, ch, cfg);
std::cout << "Isolation risk: " << result.isolation_risk << "\n";
Key Features
Sub-library architecture
Seven independent libraries with a strict dependency DAG — link only what you need:
| Library | Purpose | Dependencies |
|---|---|---|
gravel-core |
Graph representation, basic routing | stdlib, OpenMP |
gravel-ch |
Contraction hierarchy + blocked queries | gravel-core |
gravel-simplify |
Graph simplification, bridges | + gravel-ch |
gravel-fragility |
All fragility analysis (Eigen/Spectra) | + gravel-simplify |
gravel-geo |
Regions, snapping, point-in-polygon | + gravel-simplify |
gravel-datasets |
Dataset onboarding: OSM/TIGER loaders + catalog (libosmium) | + gravel-core, gravel-simplify, gravel-geo |
gravel-us |
US TIGER/Census specializations | + gravel-geo, gravel-datasets |
Analysis modules
- Route fragility — per-edge replacement path analysis
- Location fragility — isolation risk for a geographic point (new Dijkstra+IncrementalSSSP)
- County fragility — composite index combining bridges, connectivity, accessibility, fragility
- Scenario fragility — event-conditional analysis (hazard footprints)
- Progressive elimination — degradation curve with Monte Carlo / greedy strategies
- Tiled analysis — spatial fragility fields for visualization
- Region assignment — node-to-polygon mapping (point-in-polygon)
- Graph coarsening — collapse regions into meta-nodes
- Research depth (2.4.0) — capacity-aware importance (HCM PCE from OSM tags), stochastic fragility (Monte Carlo over per-edge failure probabilities, e.g. floodplain / FEMA-NFHL hazards), and experimental Motter–Lai cascading failure — all as disclosed, sweepable inputs
- Visualization (2.5.0) — real per-edge road geometry plus static (
plot_fragility), interactive (interactive_map), and animated (animate_failure, self-contained deck.gl HTML) maps viagravel-fragility[viz] - Dataset onboarding (2.6.0) — a unified
gravel.datasetslayer: a queryable catalog (list()/info()/summary()) plus per-dataset submodules with a consistent interface —osmandtigerloaders, andnfhl/shakemap/usdm/nrihazard overlays whosefetch(...)returns(GeoDataFrame, Provenance)and whoseedge_probabilities(...)feedsstochastic_fragility. Hazard fetchers need thegravel[datasets]extra (geopandas + shapely + pyproj) - Network substrates (2.7.0) — five non-road infrastructure networks in
gravel.datasets, eachload(...)returning(Graph, capacity):gridsfmandopfdata(power grids, capacity in MVA),caida(internet router topology),openflights(air routes), andgtfs(transit, persons/hour capacity), plus thet100BTS seat-capacity overlay for air graphs. Fragility analyses run on these graphs and their per-edge capacity, and the topological cascade on the graph structure, exactly like a road graph. The catalog now spans 12 datasets; loaders need only numpy - Flow layer (3.0.0, experimental) —
gravel.flow, a demand-driven traffic-assignment layer on top of the topological core: stochastic User Equilibrium (BPR congestion + logit route choice),flow_fragilityfor the region-wide delay cost of a failure (ΔTSTT + stranded demand), and a θ-calibration harness against real closure-induced slowdowns. The solver is exact (Sioux Falls) and recovers a known θ synthetically, but real θ does not identify at corridor scale — it ships experimental, with the gap and the regional-ODME path documented indocs/FLOW_LAYER.md. Thegravel.datasets.chicago_trafficadapter and example 10 walk the real-data study. Breaking: the 2.6 deprecation shims (gravel.hazards, top-levelload_osm_graph/load_tiger_*) are removed — usegravel.datasets.*
Performance
Measured on an Apple M-series laptop, 10 cores, Release build (2026-07-01; see
bench/baselines/routing_performance.md):
| Operation | 200K-node graph (Swain Co.) | 593K-node graph (Buncombe Co.) |
|---|---|---|
| OSM PBF load | 0.43s | 0.96s |
| CH build | 0.78s | 3.81s |
| CH distance query | 3.5 µs | 7.8 µs |
| CH route (with path unpacking) | 80.5 µs | 112.8 µs |
| Distance matrix cell (OpenMP, 10 threads) | 0.6 µs | 1.3 µs |
| Route fragility (per path edge, OpenMP) | ~13 ms | ~28 ms |
| Location fragility (MC=20, 50-mi radius) | 0.11 s | 1.0 s |
The parallel kernels (distance matrix, route fragility) scale ~5× from 1→10 threads on
this machine. macOS builds only gained working OpenMP in 2.3.0 (Apple Clang needs Homebrew
libomp) and route_fragility was parallelized in the same release — so on macOS those two
rows are roughly 5–9× faster than pre-2.3.0. Single-threaded operations (load, CH build,
point queries) are unchanged. Numbers vary by CPU; the perf_baseline.json Google-Benchmark
regression gate is refreshed separately via gravel_perf.
At-scale benchmarks:
- National per-county isolation fragility (3,221 counties): 3.1 hours
- National inter-county fragility (8,547 adjacent pairs incl. cross-state): ~22 hours
Documentation
- REFERENCE.md — complete API reference (all functions, all types)
- docs/PRD.md — product requirements and architecture
- docs/ — full documentation site (also on GitHub Pages)
- examples/ — Python notebooks and C++ sample programs
Example: National US County Analysis
# Run fragility analysis on all ~3,221 US counties
python scripts/national_fragility.py --output-dir output/
# Results are in output/county_isolation_fragility.csv
# Visualize with:
python scripts/visualize_results.py
Sample findings from the national run (April 2026):
| Most vulnerable states | Mean risk |
|---|---|
| New Hampshire | 0.638 |
| Maine | 0.571 |
| Rhode Island | 0.570 |
| Connecticut | 0.563 |
| Most resilient states | Mean risk |
|---|---|
| Kansas | 0.146 |
| Nebraska | 0.162 |
| Iowa | 0.163 |
| North Dakota | 0.165 |
The Great Plains grid-states score lowest — flat land with rectangular road networks have extensive redundancy. Mountain and coastal states score highest — constrained geography forces single-path corridors.
Requirements
Runtime:
- C++20 compiler (GCC 11+, Clang 14+, MSVC 2022+)
- CMake 3.24+
- Python 3.10+ (for bindings)
Optional:
- libosmium (for OSM PBF loading)
- Apache Arrow (for Parquet output)
Bundled (via CMake FetchContent):
- pybind11
- Eigen + Spectra
- nlohmann/json
- Catch2 (tests)
Contributing
See CONTRIBUTING.md. Bug reports and feature requests welcome via GitHub Issues.
License
Apache 2.0 — see LICENSE. Free for commercial and research use.
Citation
If you use Gravel in academic work, please cite:
@software{gravel2026,
author = {Hoekstra, Robert},
title = {Gravel: Fast Road Network Fragility Analysis},
year = {2026},
url = {https://github.com/rhoekstr/gravel},
version = {3.1.0}
}
About
Gravel is an Awry Labs project — see the Gravel project page for an overview. Also from Awry Labs: Kindling.
Built by Robert Hoekstra — more projects and writing at awrylabs.com.
Metadata
Release files for gravel-fragility 3.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 | |
|---|---|---|---|
| gravel_fragility-3.1.0.tar.gz | 1.9 MB | Details |
Built distributions (wheels)
Total release size: 55.2 MB
Release files / gravel_fragility-3.1.0.tar.gz
| Download URL | gravel_fragility-3.1.0.tar.gz |
|---|---|
| Size | 1.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6c5a12c5e7315c6cfe3cb5d734c2c0bc87032248fb6d467b7e92d1de75038bf5
|
|
BLAKE2b-256 checksum How to use checksums |
00ce9917b017c2eaa3f2c2efc3a85f5368b5d1c8bf96b67b81350fe7247151af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp313-cp313-win_amd64.whl
| Download URL | gravel_fragility-3.1.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
904b5829240f11dd5829557e6ed3bc969e17e38a4bf703707deddfb5709e8ba5
|
|
BLAKE2b-256 checksum How to use checksums |
8e7188582036ec9e9829cea752621d20d0493e8405788a234914d657f3b7f979
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | gravel_fragility-3.1.0-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9638752249fb6273e10f0bacec0b5c1773519f3301d22a9315b88379f1818744
|
|
BLAKE2b-256 checksum How to use checksums |
2daae52a3080d3f22f3ce3bfaf61e653c1627f8fb085bd8fb692016d49549385
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp313-cp313-manylinux_2_28_aarch64.whl
| Download URL | gravel_fragility-3.1.0-cp313-cp313-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
9d4ead580236a08f015e9cd8be1654708ea5dcc88d4cbfabb53f5fd53db9c92a
|
|
BLAKE2b-256 checksum How to use checksums |
a4992765ed8f20dd3a7216a876ba29028d9c89e0ca15c34cbc120a8340aaa013
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | gravel_fragility-3.1.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
66f687aa9e2a80374652edd753de794de019c69e06dea8459f22a2d75889c48c
|
|
BLAKE2b-256 checksum How to use checksums |
fa85f7e9f63e114ed48092ac4fb9132235c87f8941109990a3f2ce76b01cca17
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp312-cp312-win_amd64.whl
| Download URL | gravel_fragility-3.1.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 4.3 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
23bdd9a31de8a5d8ef85a02ee88f78eeada4e4c61694a876c8e0a00565e35433
|
|
BLAKE2b-256 checksum How to use checksums |
8a8bc7c3903022b52fcdca9d4f5f8361ee384e42172498c800f5287ab4be4175
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | gravel_fragility-3.1.0-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9c7b52db7ea90abffe7281e77c668a45db55180d0f76be08de69cfeee7301f08
|
|
BLAKE2b-256 checksum How to use checksums |
4162e4aa79ae895f6e0109530d60c7ddd63c969d1a8834bcf9f86d7a7b378967
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp312-cp312-manylinux_2_28_aarch64.whl
| Download URL | gravel_fragility-3.1.0-cp312-cp312-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
9b7f6db791747c6061e7376e94fb09f5054294bf3a47ebd77f8d508b26147dff
|
|
BLAKE2b-256 checksum How to use checksums |
3374dd1a2903fa1eea4af9cd7046e9991b0b036808c104f116ffc784d552573d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | gravel_fragility-3.1.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
661674cfda39f23b2a2f2d721e1dee64cd2e2954b6ecc34fa810f640f6313529
|
|
BLAKE2b-256 checksum How to use checksums |
f8cc3976b96b53a7b468744230223864190752cf7af76f38ea2a67b983a1a0c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp311-cp311-win_amd64.whl
| Download URL | gravel_fragility-3.1.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
53c7de9ec92f98e44c55165794ab18b583e11b031772640b4a70727bb4f23bac
|
|
BLAKE2b-256 checksum How to use checksums |
f2d6350e96035e098228eeefcff6ad18b206a6e9119b20fb771a9553c2f9fb9c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | gravel_fragility-3.1.0-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1c2a5aa4c5b19f7891c8243f6144af3bdb6219878149d977da037dd072d0e44b
|
|
BLAKE2b-256 checksum How to use checksums |
94c5f68660a557250a670d711a7ec3f5b1c15d921e05279139fc7c6ad71a277a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp311-cp311-manylinux_2_28_aarch64.whl
| Download URL | gravel_fragility-3.1.0-cp311-cp311-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
718c581ad8e32fc4d6a8211be0e9e531779126805c925107bd901bb4a6ffabd5
|
|
BLAKE2b-256 checksum How to use checksums |
9c17b7caa8706f12a4107d142e30489812cd4f30ae2c0fe805db9e8ba8942953
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | gravel_fragility-3.1.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5e84fdf7f19567cf85692bfde664d35718d93a4be53152b0ee4a98a11030e448
|
|
BLAKE2b-256 checksum How to use checksums |
6dadf38d5c370dc8edae2676889bdb4fcb289cabc8ccfb7d5f6d7c9dec893a3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp310-cp310-win_amd64.whl
| Download URL | gravel_fragility-3.1.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1ac9249052bfc7a94ce4ed505cda859836271927f3bc12c58bd3ba2fb3c16d48
|
|
BLAKE2b-256 checksum How to use checksums |
717099f96eb0bc3343eba1876f8c1a69852ccf89b4d41ad0ac20c39b8d3fdc5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | gravel_fragility-3.1.0-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
8ce758dbdb2c05b006126bbfe9625a1d4e8093e65553fc3d25388fba8a38c2fb
|
|
BLAKE2b-256 checksum How to use checksums |
59d80c53e355cf309a039f81a7cc7f4246ab0b14a7b3eddd38fe43064b23464c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp310-cp310-manylinux_2_28_aarch64.whl
| Download URL | gravel_fragility-3.1.0-cp310-cp310-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
dc49a9eb14f84df1da921b0cb87fb47d4ed0d8359b79d903629f049f6a8e72d8
|
|
BLAKE2b-256 checksum How to use checksums |
88308bcab56b3a918eae1a4024cef2d8dbbe971b1710b0020bb7b5949cf1df01
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency logRelease files / gravel_fragility-3.1.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | gravel_fragility-3.1.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
51c8dea38ee2538ca20fa89cb5c759559d6d4b66dda01f63c8ea5cd49da06830
|
|
BLAKE2b-256 checksum How to use checksums |
2175d383329609a26dfa66ecbcc6269cd20acfac0b285e4c8c226d0f76e5e8f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 15, 2026.
Transparency log