City Cycling Index · Methodology v19

How the City Cycling Index is scored

The City Cycling Index scores the cycling infrastructure a city provides, measured from open data. Scores are criterion-referenced: 50, 80 and 100 denote fixed levels of provision, not a city's position among other cities.

Every figure on this page — each weight, each threshold, the worked example and its arithmetic — is read from the live scoring configuration when the page is built. If it says something different from the code, the code changed and this page changed with it.

Start here

What this measures — and what it does not

The City Cycling Index measures the cycling infrastructure a city provides, as it is recorded in open data. It is a measure of provision. It is not a measure of cycling.

What is scored
Coverage

How much qualifying cycling infrastructure exists, against the land people actually live on.

Connected network share

How much of the mapped network hangs together as one system rather than as islands.

Access

How many residents live close enough to traffic-free infrastructure to use it.

Amenities

How well the city supports a rider off the bike — parking, repair stands, water, toilets.

Measured and published as a diagnostic — it carries no weight in the headline index.

What is not scored
Ridership

Not scored. No curve in the scored set, no measurement wired in anywhere, and no part of the Infrastructure Provision score a scorecard headlines. It carries a weight in the full six-dimension composite, and contributes nothing to it: unmeasured, it abstains, and an abstaining dimension is renormalised out rather than scored zero. Weight in the full composite: 0.1.

Safety

Not scored. No curve in the scored set, no measurement wired in anywhere, and no part of the Infrastructure Provision score a scorecard headlines. It carries a weight in the full six-dimension composite, and contributes nothing to it: unmeasured, it abstains, and an abstaining dimension is renormalised out rather than scored zero. Weight in the full composite: 0.1.

Intersection wait

Measured from Party Onbici riders' own trips: the average time a rider loses per signalised junction they pass, with roll-throughs counted as no wait. It is scored only where at least 10 signalised junctions have each been passed 10 or more times by at least 3 different riders; elsewhere it abstains and is renormalised out rather than scored zero. It is never part of the Infrastructure Provision score a scorecard headlines, and its 30-second target is internally chosen, not calibrated. Weight in the full composite: 0.1.

Lighting

Confirmed and inferred nighttime illumination along the network — never a claim that a street has lamps. Detailed under “Road lighting” below.

Heat resilience

The share of residents who still have a cycling route within reach on an extreme-heat afternoon, once the parts of the network with no shade are set aside. It is the same Access question asked under one weather scenario, so a city can read it directly against its own Access figure. Detailed under “Heat resilience” below.

Measured and published, and outside every score. Neither carries a weight in any methodology version published so far, so neither can move the headline or a city's rank by any route. What each is still waiting on is set out in its own section below — and until that arrives, scoring either would rank cities by how thoroughly they have been mapped rather than by what is on the ground.

How many people ride, and how safely, are named as an activation layer that is not yet wired in. A city can provide well and be ridden little, and this index cannot tell the difference. Nothing here is a road-safety assessment.
Inputs

Where the data comes from

Open data only. No city supplies us with anything, which is what makes every city comparable and what makes a scorecard possible before anyone asks for one — and it is also the source of the limits set out further down.

How a city is scored, from open data to a published index A six-stage flow running downwards. Open datasets — OpenStreetMap, WorldPop and a boundary polygon — feed a classifier that sorts every mapped way into a facility class. The classified network is aggregated for the region, each dimension is scored on its own curve, and the sub-scores are composed into one headline. A branch off the composing stage shows what happens when a measurement is missing. 1 — OPEN DATA IN OpenStreetMap ways and their tags WorldPop residents, cell by cell Boundary polygon the ground being described 2 — CLASSIFY Sort every mapped way into a facility class Classifier version 2 — protection, not presence 3 — AGGREGATE PER REGION Total the network, the residents and the built-up area Quality-weighted kilometres, largest connected component, residents in catchment 4 — SCORE EACH DIMENSION Each measurement, through its own curve, to a sub-score Coverage Connected network share Access Amenities 5 — COMPOSE Blend the sub-scores at published weights One headline, with the weights disclosed beside it Every input figure published too, never only the score A MEASUREMENT IS MISSING Withheld, not guessed No headline is published at all 6 — PUBLISH The scorecard — with its inputs, its confidence and its limits Never a score on its own
A dimension that cannot be measured abstains: it is left out of the blend rather than scored zero, because "not measured" and "none of it" are different findings. Where the missing dimension is one the headline requires, the Infrastructure Provision score is withheld altogether — a number built from two dimensions is not the same claim as the same number built from three.
Full attribution for each of these datasets is set out at the foot of this page.
Dataset What it contributes Licence
OpenStreetMap Every metre of cycling infrastructure that is measured, the road network it is classified against, and the parking, repair stands, drinking water and toilets counted as amenities. Open Database License 1.0 (ODbL)
WorldPop Residents, cell by cell. The population behind the Access share, and the built-up area that is the denominator of every density measure. CC BY 4.0
geoBoundaries The administrative footprint a city is scored inside, so a network is credited to the council that built it and not to its neighbours. CC BY 4.0
GHS Urban Centre Database An urban-centre polygon for cities no administrative tier fits, plus an independent population estimate used as a cross-check on WorldPop. CC BY 4.0
ABS Urban Centres and Localities A nationally uniform urban-boundary polygon for the Australian regional cities that GHSL's urban-centre threshold excludes and no administrative tier fits. CC BY 4.0
Stats NZ Urban Areas A nationally uniform urban-boundary polygon for the New Zealand cities that GHSL's urban-centre threshold excludes and no administrative tier fits. CC BY 4.0
Atlas of Sustainable City Transport The published city figures our own results are compared against for ordering. Party Onbici matched and recalculated the values. Open Database License 1.0 (ODbL)
Classification

How a street becomes a number

Every mapped way that a bicycle may use is sorted into one facility class, on the protection it offers rather than on whether it is signed for bicycles. That single decision drives everything downstream: how much a kilometre is worth, and whether it counts as somewhere a resident can reach traffic-free infrastructure.

How a mapped way becomes a facility class, a quality weight and an Access decision A single OpenStreetMap way and its tags enter a classifier on the left. On the right, one row per facility class: each row carries the quality weight a kilometre of that class contributes to Coverage, and states whether the class counts toward the Access measure. A filled marker means it counts; a hollow marker means it does not. ONE MAPPED WAY Its tags highway=* cycleway=* bicycle=* segregated=*, foot=* The best facility on the way wins Counts toward the Access measure Protected track Counts toward Access ×1.0 per kilometre Counts toward the Access measure Shared path, off the carriageway Counts toward Access ×0.8 per kilometre Not counted toward the Access measure Mixed traffic, signed Not counted toward Access ×0.8 per kilometre Not counted toward the Access measure Painted lane Not counted toward Access ×0.5 per kilometre Not counted toward the Access measure Unevidenced Not counted toward Access ×0.5 per kilometre Not counted toward the Access measure Crossing Not counted toward Access ×0.0 per kilometre
A kilometre is not a kilometre. Each class carries a quality weight, and Coverage counts weighted kilometres rather than raw ones. Access is a separate decision from the weight: it counts only the classes that keep a rider away from motor traffic, so a class can carry real length toward Coverage and still be excluded from Access.
Classifier version 2. Every stored classification records the version that produced it, so a reclassification can be told from a change on the ground.
Facility class Weight per kilometre Counts toward Access What it is
protected ×1.0 Counted Cyclists have their own space, away from motor traffic: a track separated from the carriageway by a kerb, bollards or another physical barrier, or a separately mapped way whose tags show it is for cyclists rather than shared with people walking.
shared_path ×0.8 Counted Off the motor carriageway, and so away from traffic, but not evidenced as cyclists' own space — shared foot and cycle paths, and off-road paths open to bicycles.
shared ×0.8 Not counted Rideable space on the carriageway with no facility of its own — a road signed for bicycles. Mixed traffic with a designation, not infrastructure.
painted ×0.5 Not counted Paint on the carriageway: a marked lane with motor traffic immediately beside it.
unknown ×0.5 Not counted Mapped as something a bicycle may use, without tags that evidence what kind of facility it is. Priced conservatively rather than assumed.
crossing ×0.0 Not counted A road crossing for cyclists. Real and rideable, and part of how the network joins up, but a junction element rather than a length of route.
Weighted kilometres. A kilometre is not a kilometre. Coverage counts quality-weighted kilometres, so a protected track is worth a full kilometre and a painted lane half of one. A crossing carries no length at all: it is a junction, not a corridor.
Which classes Access counts. Access counts only the traffic-free classes — the union of off-street paths and physically protected lanes. Paint and mixed traffic are excluded because motor traffic is exactly what the measure exists to keep out. protected shared_path
Dimensions

What each dimension measures

Each dimension answers one question, is measured as one quantity, and is scored on its own curve. A dimension that cannot be measured abstains — it is left out of the blend rather than scored zero, because "not measured" and "none of it" are different findings.

Coverage coverage

How much qualifying cycling infrastructure exists, against the land people actually live on.

Measured quantity
Quality-weighted kilometres of network, divided by square kilometres of built-up area.
Scoring curve
Fixed provision criteria
Weight in the headline
0.2778
Required for a headline
Required

Three fixed levels of provision, joined by straight lines. The thresholds say what a score means about infrastructure, not where the city sits among other cities, and they do not move when a city is added to the board.

Measured value (km/km²) Score What that level means
0.0 0 No meaningful mapped provision
1.0 basic 50 Basic, useful but incomplete provision
2.5 strong 80 Strong citywide provision
5.0 leading 100 Near-complete performance against the criterion

Between two published points the score is interpolated in a straight line; below the first and above the last it is clamped.

Where each threshold came from
1.0 basic — a fixed normative criterion
One kilometre of qualifying network for every square kilometre of built-up land: enough for a coherent route to exist in most directions, and not enough to call the city served. Board-informed, not board-derived.
2.5 strong — a fixed normative criterion
Density at which a rider can expect qualifying infrastructure on most journeys rather than on a chosen few. Compared against the ITDP Atlas distribution for non-absurdity: cities we score at or above this threshold are not ones ITDP places low, and vice versa. A sanity check on the ordering, NOT a calibration of the level — the comparison is not footprint-matched.
5.0 leading — a fixed normative criterion
The density of a city that has finished the job — qualifying infrastructure is the default rather than the exception. Reachable, and reached by few.

Connected network share connectivity

How much of the mapped network hangs together as one system rather than as islands.

Measured quantity
The share of the qualifying network's length sitting in its single largest connected component. Below a minimum amount of qualifying network the measure stops being informative and the dimension abstains rather than reporting a share: 10 km, or less in a small city — 0.5 km per square kilometre of built-up area, never under 3 km.
Scoring curve
Identity scale — the score is the percentage
Weight in the headline
0.3333
Required for a headline
Required

The measurement is already a percentage, so the score is that percentage: 63% of the network connected scores 63. No threshold is imposed, because none is claimed — the scale asserts nothing about what a level means.

Measured value Score What that level means
0.0 0 None of the measured quantity
1.0 target 100 All of it — the measurement is the score, so this point asserts nothing further

Between two published points the score is interpolated in a straight line; below the first and above the last it is clamped.

Access access

How many residents live close enough to traffic-free infrastructure to use it.

Measured quantity
The share of residents whose home is within 300 m, measured straight-line, of infrastructure away from motor traffic.
Scoring curve
Fixed provision criteria
Weight in the headline
0.3889
Required for a headline
Required

Three fixed levels of provision, joined by straight lines. The thresholds say what a score means about infrastructure, not where the city sits among other cities, and they do not move when a city is added to the board.

Measured value Score What that level means
0.0 0 No meaningful mapped provision
0.5 basic 50 Basic, useful but incomplete provision
0.8 strong 80 Strong citywide provision
1.0 leading 100 Near-complete performance against the criterion

Between two published points the score is interpolated in a straight line; below the first and above the last it is clamped.

Where each threshold came from
0.5 basic — a fixed normative criterion
Half the residents live within 300 m of traffic-free infrastructure.
0.8 strong — a fixed normative criterion
Four residents in five are within 300 m — a minority is still excluded.
1.0 leading — a fixed normative criterion
Every resident within 300 m. An absolute target a council can aim at, reachable without reference to any other city.

Amenities amenities

How well the city supports a rider off the bike — parking, repair stands, water, toilets.

Measured quantity
Weighted amenity units, divided by square kilometres of built-up area.
Scoring curve
Fixed provision criteria
Weight in the headline
None — not blended
Required for a headline
Not required

Three fixed levels of provision, joined by straight lines. The thresholds say what a score means about infrastructure, not where the city sits among other cities, and they do not move when a city is added to the board.

Measured, but not in the headline. Measured and published as an EXPERIMENTAL DIAGNOSTIC with zero weight. Its thresholds are internal distribution choices, not criteria — no official inventory has been checked and the measure is highly sensitive to OpenStreetMap completeness and central-business-district density.
Measured value (units/km²) Score What that level means
0.0 0 No meaningful mapped provision
2.0 basic 50 Basic, useful but incomplete provision
10.0 strong 80 Strong citywide provision
40.0 leading 100 Near-complete performance against the criterion

Between two published points the score is interpolated in a straight line; below the first and above the last it is clamped.

Where each threshold came from
2.0 basic — selected internally, with no external basis claimed
Provisional. Amenities is weighted zero in the v16 headline and published as a diagnostic.
10.0 strong — selected internally, with no external basis claimed
Provisional. No official amenity inventory has been checked against this scale.
40.0 leading — selected internally, with no external basis claimed
Provisional. A later era should supersede this with a service-coverage definition.
Scoring

From measurement to score

Each measurement runs through its dimension's curve to a sub-score, and the sub-scores are blended at published weights into one headline. Both steps are shown below on an invented city, so the arithmetic can be redone with a calculator.

Connected network share: Identity scale — the score is the percentage A plot of measured value against score. The line is straight from the origin to the value at the top of the scale, so its slope never changes and a point of score costs the same amount of measurement everywhere on it. Connected network share IDENTITY SCALE — THE SCORE IS THE PERCENTAGE 0 0.0 100 1.0 None of the measured quantity All of it — the measurement is the score, so this point asserts nothing further Target Connected network share Score
The share of the qualifying network's length sitting in its single largest connected component. Below a minimum amount of qualifying network the measure stops being informative and the dimension abstains rather than reporting a share: 10 km, or less in a small city — 0.5 km per square kilometre of built-up area, never under 3 km. The line is straight, so one point of score means the same amount of measurement everywhere on the scale — no threshold is imposed, because none is claimed.
Coverage: Fixed provision criteria A plot of measured value against score. The line is piecewise-linear: it bends at each published criterion, so its slope changes from one band to the next and a point of score costs a different amount of measurement in each band. Coverage FIXED PROVISION CRITERIA 0 0.0 50 1.0 80 2.5 100 5.0 No meaningful mapped provision Basic, useful but incomplete provision Basic Strong citywide provision Strong Near-complete performance against the criterion Leading Coverage Score
Quality-weighted kilometres of network, divided by square kilometres of built-up area. The line bends at every criterion, so equal steps up the score are not equal steps in provision: how much infrastructure a city must add to gain its next point of score depends on the band it is already in.

What a level on a curve means

Level Score What it denotes
minimum 0 No meaningful mapped provision
fragmentary — Fragmentary provision
basic 50 Basic, useful but incomplete provision
strong 80 Strong citywide provision
leading 100 Near-complete performance against the criterion

A worked example

Illustrative city. An invented city, chosen to show the arithmetic. Every number below it — each metric, each sub-score and the headline — is computed from these measurements by the same code that scores a real city.

Interpolation rule, as published: piecewise-linear through (0,0) -> (basic,50) -> (strong,80) -> (leading,100), clamped

score = lower score + (measured value − lower value) ÷ (upper value − lower value) × (upper score − lower score)

Coverage

Quality-weighted network 80.0 km ÷ Built-up area 40.0 km² = 2.0 km/km²

2.0 falls between the published points 1.0 (which scores 50) and 2.5 (which scores 80). Interpolating in a straight line between them gives 70.

Connected network share

Network in the largest connected component 0.62 = 0.62

0.62 falls between the published points 0.0 (which scores 0) and 1.0 (which scores 100). Interpolating in a straight line between them gives 62.

Access

Residents within the catchment 0.63 = 0.63

0.63 falls between the published points 0.5 (which scores 50) and 0.8 (which scores 80). Interpolating in a straight line between them gives 63.

Amenities not in the headline

Weighted amenity units 200.0 ÷ Built-up area 40.0 km² = 5.0 units/km²

5.0 falls between the published points 2.0 (which scores 50) and 10.0 (which scores 80). Interpolating in a straight line between them gives 61.2.

Blending the sub-scores

Dimension Sub-score Weight
Coverage 70 0.2778
Connected network share 62 0.3333
Access 63 0.3889

sum(weight x sub_score) / sum(weight), over the dimensions that computed = 64.6

The weights above are the effective weights: they are renormalised over the dimensions the headline actually blends, so they sum to one and the arithmetic can be checked as printed.

When something cannot be measured. A dimension that could not be measured ABSTAINS: it is excluded from both the numerator and the denominator, never scored as zero. The remaining weights are renormalised, so the effective weights differ from the nominal ones and are published beside any partial result.
Required dimensions. Coverage, Connectivity and Access are all REQUIRED. If any cannot be measured the Infrastructure Index is withheld rather than renormalised over the rest: '68' built from two dimensions is not the same claim as '68' built from three. coverage connectivity access A scorecard missing one of them says: “Infrastructure Provision unavailable — incomplete required data”
Measured but excluded from the headline.
  • Amenities — Measured and published as an EXPERIMENTAL DIAGNOSTIC with zero weight. Its thresholds are internal distribution choices, not criteria — no official inventory has been checked and the measure is highly sensitive to OpenStreetMap completeness and central-business-district density.

What the headline number is called

Index at or above Band
80 Leading infrastructure
60 Established
40 Emerging
20 Early
0 Limited infrastructure

The band is a label for the number, not a separate judgement: it carries no information the index does not already carry.

Referencing

How cities are ranked — and why the score is not a ranking

A score defined by the middle of the field can never show improvement — double every city's network and the median still scores 50. So the thresholds are fixed statements about infrastructure and are frozen within a methodology version: adding a city to the board never moves another city's score. Where a city sits among its peers is a different and useful question, and it is published separately, as a percentile.

What the score is measured against

The scores on this page are criterion-referenced. Each named level on a curve is a fixed statement about infrastructure — what that much provision means for the people who would use it — and those levels are frozen within a methodology version. Adding a city to the board never moves another city's score, and if every city doubled its network tomorrow, every score would rise.

Where a city stands is a separate number

Position among peers is a different and useful question, so it is answered separately: a scorecard publishes a percentile beside its score, never folded into it. A percentile stays where it is when everybody improves — which is exactly why it cannot be the score.

Benchmark lenses

Seeing your city through other frameworks

A lens re-reads our own open data through another framework's framing, so a city can be seen under several methodologies at once instead of trusting one number. Every lens is computed by Party Onbici, and labelled "-style" or "-inspired" where it names the framework it borrows from. None of them reproduces anybody's published score.

Read this before reading a lens. Every lens below is an unofficial estimate computed by Party Onbici from open data, on our own measurements and our own boundary, using another framework's framing where it names one. None of them is that framework's published score, none is endorsed by them, and none of them reproduces any figure a framework publishes for a city. Where a third party's own published figure is shown anywhere on this site, it is labelled as theirs and credited to them.
One dataset, read through several framings — every result our own estimate A single source node on the left holds this city's open data. Arrows fan out from it to one row per benchmark lens, each of which re-reads that same data through another framework's framing and produces an unofficial Party Onbici estimate. Every arrow points away from the data; nothing points back into it, because no third-party score is imported. ONE DATASET This city's open data OpenStreetMap WorldPop measured once, on our own boundary An unofficial estimate computed by Party Onbici from open data. It is not ITDP People Near Bikelanes's published score, and it is not endorsed by them. Party Access (traffic-free) Our estimate, framed after ITDP People Near Bikelanes An unofficial estimate computed by Party Onbici from open data. It is not PeopleForBikes Bicycle Network Analysis's published score, and it is not endorsed by them. BNA-inspired low-stress connectivity Our estimate, framed after PeopleForBikes Bicycle Network Analysis An unofficial estimate computed by Party Onbici from open data. It is not Walk Score Bike Score's published score, and it is not endorsed by them. Bike Score-style estimate Our estimate, framed after Walk Score Bike Score An unofficial estimate computed by Party Onbici from open data. It is not CROW Design Manual for Bicycle Traffic's published score, and it is not endorsed by them. CROW-style quality profile Our estimate, framed after CROW Design Manual for Bicycle Traffic An unofficial estimate computed by Party Onbici from open data. It is not Canadian Bikeway Comfort and Safety (Can-BICS)'s published score, and it is not endorsed by them. Can-BICS-style comfort split Our estimate, framed after Canadian Bikeway Comfort and Safety (Can-BICS) Party Onbici's own diagnostic, computed from open data. Dedicated infrastructure (protected only) Our own diagnostic, computed from open data An unofficial estimate computed by Party Onbici from open data. It is not BikeDNA's published score, and it is not endorsed by them. BikeDNA-inspired data quality Our estimate, framed after BikeDNA Party Onbici's own diagnostic, computed from open data. Broad catchment Our own diagnostic, computed from open data No published third-party score is imported Every figure above is computed by Party Onbici, from the data on the left
A lens re-reads our own open data through another framework's framing, so a city can be seen under several methodologies at once instead of trusting one number. Each result is an unofficial estimate computed by Party Onbici, labelled "-style" or "-inspired" where it names the framework it borrows from; none of them reproduces, replaces or is endorsed by anybody's published score.
Party Access (traffic-free) Framed after ITDP People Near Bikelanes

The share of residents within the catchment of infrastructure away from motor traffic — the same measurement as the Access dimension, framed the way ITDP frames its own indicator.

Our figure, computed by us on our own boundary. It is set beside ITDP's published ordering, never merged with it.

An unofficial estimate computed by Party Onbici from open data. It is not ITDP People Near Bikelanes's published score, and it is not endorsed by them.

BNA-inspired low-stress connectivity Framed after PeopleForBikes Bicycle Network Analysis

Connected-component analysis of the low-stress network: a dense network broken into islands scores poorly, however many kilometres it holds.

An unofficial estimate computed by Party Onbici from open data. It is not PeopleForBikes Bicycle Network Analysis's published score, and it is not endorsed by them.

Bike Score-style estimate Framed after Walk Score Bike Score

A partial reconstruction from the components open data supports — infrastructure density and destinations. Hills and commute mode share need feeds we do not hold and are reported as unscored rather than invented.

An unofficial estimate computed by Party Onbici from open data. It is not Walk Score Bike Score's published score, and it is not endorsed by them.

CROW-style quality profile Framed after CROW Design Manual for Bicycle Traffic

The Dutch design manual's five requirements — cohesion, directness, safety, comfort, attractiveness — as a diagnostic profile rather than a score. Safety always abstains: no crash data is wired in, and an infrastructure proxy is not a safety assessment.

An unofficial estimate computed by Party Onbici from open data. It is not CROW Design Manual for Bicycle Traffic's published score, and it is not endorsed by them.

Can-BICS-style comfort split Framed after Canadian Bikeway Comfort and Safety (Can-BICS)

Kilometres split into high, medium and low comfort tiers.

An unofficial estimate computed by Party Onbici from open data. It is not Canadian Bikeway Comfort and Safety (Can-BICS)'s published score, and it is not endorsed by them.

Dedicated infrastructure (protected only)

Kilometres, network share and resident catchment of physically protected infrastructure only — the strictest definition, the one a council itself uses when it says it has no bike infrastructure.

A disclosure, never a scoring input. Cities whose everyday cycling runs on calm streets or legal sidewalk riding — which this model does not ingest — read near zero here regardless of how much cycling happens; read it beside the observed cycling figure.

Party Onbici's own diagnostic, computed from open data.

BikeDNA-inspired data quality Framed after BikeDNA

Completeness signals on the underlying OpenStreetMap data, so a low score can be told apart from thin data.

An unofficial estimate computed by Party Onbici from open data. It is not BikeDNA's published score, and it is not endorsed by them.

Broad catchment

A deliberately generous upper bound: residents near cycling infrastructure of any kind, at a wider walking distance. Context for the headline Access figure, never a substitute for it.

Party Onbici's own diagnostic, computed from open data.

Internal checks

What we checked — and what it does and does not establish

These are internal checks on the scale, run by us. They are the reason to trust that the index separates cities coherently. They are not an outside verification of any percentage on a scorecard, and none is claimed.

Reference cohort: 103 cities, as at 2026-08-03. Its exact membership is recorded in party_onbici/apps/analytics/tests/data/v16_anchor_cohort.json.

Each curve checked at both ends

Every scoring curve is run over a recorded reference cohort of real cities and checked at both rails: the top must be reachable but not crowded, so the leading cities are told apart rather than tied at 100, and a city with some infrastructure must never score exactly zero.

What this does not establish That the level is right. A curve can separate cities cleanly and still place the whole board too high or too low; these checks say the scale discriminates, not that it is correctly positioned.
Each curve checked for discrimination

The distribution of scores the curve produces across the reference cohort is inspected — how many cities land at 100, how many at 0, how many below 10, and how wide the middle half of the board spreads — so a scale that compresses cities into one indistinguishable clump is caught before it ships.

What this does not establish Anything about a particular city. A well-spread distribution is a property of the scale, not evidence that any single score is accurate.
Ordering sanity-checked against independent frameworks

The order our scores put cities in is compared with the order independent published frameworks put them in. Broad agreement means our measure is not ranking cities in a way nobody else recognises.

What this does not establish Agreement in absolute level, and it is not a validation. The footprints are different, so a comparison of levels would measure our definition, our boundary and our data extent all at once and could not separate them. Agreement on rank is a sanity check on the ordering and nothing more.
Access residual tracks painted-lane share

Where our Access figure sits above ITDP's, the gap moves with how much of the city's network is painted lanes — which is what our own definition predicts, because we exclude paint and their indicator does not. Our measure behaves coherently given a known difference in definition.

What this does not establish That our level is right. Coherence with a known definitional difference is evidence the measure behaves as designed, not evidence that the number it produces is correct.
No outside check of the level. No independent body has checked the level of our percentages, and none has been asked to. Rank agreement with other frameworks is a sanity check on the ordering.
A parallel layer

Heat resilience

A city can be well provided for and still unridable on a 40-degree afternoon. Heat resilience asks the Access question again under one weather scenario: what share of residents still has a cycling route within reach once the unshaded parts of the network are set aside.

It changes no score. It is shown beside the dimensions, never blended into them, and it moves neither the Infrastructure Provision headline nor a city's rank.
When it declines to answer
Too little of the network modelled

A figure is published only when at least 80% of the qualifying network has a shade profile. Below that the answer is withheld rather than estimated: a percentage drawn from a fraction of the network reads as a fact about the city.

No city publishes a shade percentage

Stating how shaded a street is needs surveyed building heights over at least 60% of the nearby built area. Modelled heights do not count towards it — the global ones saturate around thirty metres, which is wrong by a factor of ten beside a tower. No city has reached that bar, so no shade percentage is published anywhere on this site.

Heat method version 2, versioned separately from the index: a change here moves no score, so it must not flag every scorecard as having changed methodology.

How confident the evidence is
Tier A — validated radiant model

A radiant model over a measured surface, checked against instruments. No city reaches it, and none is close.

Tier B — geometric shade

Real shade geometry, from building footprints with surveyed heights and a canopy height model. This is the tier at which a shade percentage may be stated at all.

Tier C — morphology only

Canopy and built form, with no reliable heights. Enough to rank one city's streets against each other; not enough to state a shade percentage. Every city measured so far sits here.

Limits

What this index does not tell you

Each of these is disclosed rather than discovered. Where there is a named piece of work that would remove a limit, it is named too.

The benchmark comparison is not footprint-matched

ITDP computes its indicators on a GHSL urban agglomeration. We compute ours on our own region boundary, which is frequently a single municipality. Those are different footprints, so the comparison does not establish agreement in absolute level — only that the two order cities similarly.

Outstanding work Recomputing our metrics on ITDP's own polygon, so the two describe the same ground.
Some cities are scored on a derived bounding box

Where no administrative boundary fits the city, the scored area is an automatically derived box rather than an official footprint. A scorecard says so on its face; the figures describe that study area, not a government boundary.

Access is measured straight-line, not routed

A resident counts as served when infrastructure lies within 300 m in a straight line. Rivers, rail corridors, motorways and missing crossings all make the real walk longer, so the figure is optimistic.

Outstanding work Routed catchments over the pedestrian network.
Calm ordinary streets are disclosed, not scored

The traffic-stress classifier decides the qualifying network for every scored dimension, over the mapped cycle network. The city's ordinary streets are classified too, and their calm kilometres are published as a disclosure with their evidence split — they earn no scored credit yet.

This measures infrastructure, not cycling

How many people ride, and how safely, are not scored. The index measures the provision of cycling infrastructure from open data, and a city can provide well and be ridden little.

The map is only as complete as the people who drew it

Everything measured comes from OpenStreetMap. Where a city is mapped thinly, or its infrastructure is tagged without the detail the classifier needs, the score reflects the map rather than the streets — which is why data-quality signals are published beside every result and lower its confidence.

Evidence, not a score

What we know about a network after dark

A scorecard can say what a city built, but not whether it is usable at night. The road lighting layer answers that separately — and it is deliberately kept out of every score, because the evidence behind it is not strong enough to rank a city on.

Three tiers of evidence

An explicit OpenStreetMap lighting tag is the strongest evidence and the only route to a confirmed result. Mapped lamp posts near a way support an inferred one. Satellite radiance is the weakest and never overrides either.

A bright pixel is not a street light

Satellite radiance shows artificial light in the surrounding area at roughly 460 m per pixel — coarser than any single street. Buildings, car parks and signage emit the same signal, so brightness alone is recorded as inconclusive rather than read as lighting.

An unmapped street is not a dark one

A missing lighting tag means nobody recorded it, which is a gap in the evidence and not a finding about the street. It is reported as unknown, separately from the streets an explicit tag confirms are unlit.

Why it is not scored

No calibrated radiance threshold separates lit from unlit streets in the cities tested, so the satellite tier states no direction, and most of a typical network is inconclusive. A score built on what remains would mostly measure how thoroughly a city's volunteers mapped lighting tags, not whether its streets are lit.

What would switch it on A city's own street-lighting asset register.
Credit where it is owed

Sources and licensing

The index is computed entirely from the open datasets below. Their attributions are reproduced here as their publishers require them.

OpenStreetMap

Every metre of cycling infrastructure that is measured, the road network it is classified against, and the parking, repair stands, drinking water and toilets counted as amenities.

Licence Open Database License 1.0 (ODbL)
Attribution © OpenStreetMap contributors — Open Database License 1.0 https://www.openstreetmap.org/copyright
WorldPop

Residents, cell by cell. The population behind the Access share, and the built-up area that is the denominator of every density measure.

Licence CC BY 4.0
Attribution CC BY 4.0 — © WorldPop (worldpop.org) https://www.worldpop.org/
geoBoundaries

The administrative footprint a city is scored inside, so a network is credited to the council that built it and not to its neighbours.

Licence CC BY 4.0
Attribution CC BY 4.0 — © geoBoundaries https://www.geoboundaries.org/
GHS Urban Centre Database

An urban-centre polygon for cities no administrative tier fits, plus an independent population estimate used as a cross-check on WorldPop.

Licence CC BY 4.0
Attribution CC BY 4.0 — © European Union, JRC (GHSL) https://human-settlement.emergency.copernicus.eu/
Stats NZ Urban Areas

A nationally uniform urban-boundary polygon for the New Zealand cities that GHSL's urban-centre threshold excludes and no administrative tier fits.

Licence CC BY 4.0
Attribution CC BY 4.0 — © Stats NZ https://datafinder.stats.govt.nz/
Atlas of Sustainable City Transport

The published city figures our own results are compared against for ordering. Party Onbici matched and recalculated the values.

Licence Open Database License 1.0 (ODbL)
Attribution Atlas of Sustainable City Transport (Reich & Braga, ITDP, 2024) — Open Database License 1.0. Party Onbici matched and recalculated the values. https://www.itdp.org/

Every score, sub-score, lens and estimate published by the City Cycling Index is computed by Party Onbici from these sources, under methodology version 19. Where a figure came from somewhere else, the scorecard carrying it says so on its face.

Behind the contextual layers

These are read by the road-lighting and heat-resilience layers. No score, sub-score or ranking on this site is computed from any of them.

EOG VIIRS Nighttime Lights

Satellite-observed nighttime radiance behind the road-lighting evidence layer. It shows artificial light in the surrounding area, never that a road carries street lamps, and it enters no score.

Licence CC BY 4.0
Attribution CC BY 4.0 — © Earth Observation Group, Payne Institute for Public Policy, Colorado School of Mines (Elvidge et al., VIIRS Nighttime Lights) https://eogdata.mines.edu/products/vnl/
Meta / WRI Canopy Height Model

Tree canopy over every street, at roughly one metre. The whole of what the heat-resilience layer knows about shade, and the only input it cannot do without.

Licence CC BY 4.0
Attribution © Meta and World Resources Institute https://registry.opendata.aws/dataforgood-fb-forests/
Microsoft Global ML Building Footprints

Where the buildings are, so a street flanked by them can be told from an open one. Their MODELLED heights are deliberately not read as heights — they saturate around thirty metres, which is wrong by a factor of ten in the densest and hottest places.

Licence CDLA-Permissive-2.0
Attribution Building footprints © Microsoft, CDLA-Permissive-2.0 https://github.com/microsoft/GlobalMLBuildingFootprints