Methodology

Contents

This is the current-state methodology of Global Energy Map: for every map layer and every disruption scenario, where the data comes from, how current it is, how complete it is, what units it is in, what it cannot tell you, and how the scenarios use it. It describes the site as it is now. The phase-by-phase record of how it got here — including claims that later phases superseded — lives in docs/history.md. The source-by-source research inventory (including sources evaluated and rejected) is docs/data-sources.md. File-level metadata — licence, as-of date, row count, size and sha256 for every shipped file — is on the Data page.

At a glance

Layer Source As of Features Vintage-filtered by a pinned year= link Units
Reserves (country) Energy Institute Statistical Review 2026 edition 1990–2020, country-year Yes, to 2020; 2020 value shown for 2021–2024 oil: billion bbl · gas: Tcm
Basins NETL GOGI 2026-05-17 snapshot 1,046 polygons No area km²
US shale regions EIA STEO (history) + DPR county list Sept 2026 STEO 5 regions, 249 counties, 2009–2025 Yes, from 2009 crude kb/d · gas bcf/d
Extraction sites GEM GOGET 2026-03 7,055 Partly — 32 % dated — (no capacity)
Oil pipelines GEM GOIT 2025-04-09 1,185 Partly — 64 % dated kb/d
Gas pipelines GEM GGIT 2026-02-20 2,772 Partly — 74 % dated bcm/y
Refineries NETL GOGI (primary) + OpenStreetMap 2026-09 1,164 (1,075 + 89) No kb/d (30 % known)
Storage hubs NETL GOGI (EPA regulatory records filtered out) 2026-05-17 7,733 No —
Ports NETL GOGI 2026-05-17 3,694 No —
LNG terminals LNG-T3 (primary) + GEM GGIT 2026-04-01 / 2026-02-20 314 (305 + 9) Yes — 97.5 % dated Mtpa
LNG voyages LNG-T3 2026-04-01 17,592 voyages, 2020–2024 Yes, 2020–2024 only m³ of LNG
Gas storage (EU) GIE AGSI daily, latest gas day 20 countries No — always the latest gas day % full
Recent imports UN Comtrade (as reported) monthly, to 2026-05 each country's latest 12 months No — always the latest months Mt
Trade flows CEPII BACI, HS 2709 + 271111 V202601 top 150 pairs (world) or all of one country's (focused) Yes, 1995–2024 only tonnes
Scenario trade CEPII BACI, HS 2709 + 271111 V202601 53,727 country-pair-years, 1995–2024 Yes tonnes
Scenario route shares EIA / IEA / Argus (Kpler) / GEM, per row 2026-09-11 18 shares + 54 intra-Gulf share-0 pairs No — static fraction

"Dated" means the feature carries a start or commissioning year. Undated features are shown in every year, so for layers that are only partly dated the map over-states what existed in early years.

How current each layer is

Generated from the data catalog at build time, so it cannot drift from the files. Covers is the period the rows describe; Released is when the source published (or, for live services, when it was retrieved). They can be years apart: the Energy Institute's 2026 edition still ends its reserves in 2020. On the map, the Data vintage section of the layer panel lists the same dates, and a layer whose data ended more than 18 months ago is marked old.

Period covered, release date and update cadence of every data file the map reads
DataSourceCoversReleased / retrievedPublisher updates
Disruption routing shares (chokepoints + pipelines; per-row citations)EIA / IEA / Argus Media (Kpler) / GEM — see source_* columnssnapshot24 Oct 2026—
Daily chokepoint transits (AIS-observed)IMF PortWatch
1 Jan 2019 – 11 Oct 2026
15 Oct 2026weekly, Tuesdays 9 AM ET; recent days are revised
EU gas storage + LNG terminal daily seriesGas Infrastructure Europe — AGSI + ALSI
1 Jan 2020 – 17 Sept 2026
17 Sept 2026daily, published 19:30 CET
Oil refineries (OpenStreetMap, supplement to NETL)OpenStreetMapsnapshot17 Sept 2026quarterly (live database; re-query when refreshing refineries)
Monthly crude + LNG imports (as reported)UN Comtrade
Jan 2025 – May 2026
17 Sept 2026monthly, as reporters file (lags ~3-6 months and backfills)
Oil refineries (NETL GOGI, primary)National Energy Technology Laboratory (US DOE)snapshot17 May 2026ad hoc (NETL updates the live layers without release notes)
Oil & gas storage (NETL GOGI)National Energy Technology Laboratory (US DOE)snapshot17 May 2026ad hoc (NETL updates the live layers without release notes)
Oil & gas ports (NETL GOGI)National Energy Technology Laboratory (US DOE)snapshot17 May 2026ad hoc (NETL updates the live layers without release notes)
Oil & gas basins (NETL GOGI; simplified GeoJSON)National Energy Technology Laboratory (US DOE)snapshot17 May 2026ad hoc (NETL updates the live layers without release notes)
LNG terminals (LNG-T3, primary)Zhou, C. 2026, LNG-T3 (Zenodo)snapshot1 Apr 2026per Zenodo version (check the concept DOI for newer versions)
Oil & gas extraction sites (GEM)Global Energy Monitorsnapshot1 Mar 2026per tracker release (irregular, roughly annual)
LNG terminals (GEM GGIT, supplement to LNG-T3)Global Energy Monitorsnapshot20 Feb 2026per tracker release (irregular, roughly annual)
Gas pipelines (GEM GGIT; simplified GeoJSON)Global Energy Monitorsnapshot20 Feb 2026per tracker release (irregular, roughly annual)
Country-year reserves + productionEnergy Institute Statistical Review of World Energy
reserves: 1990–2020
production: 1990–2025
1 Jul 2026annual, late June
US shale-region production, annual (EIA STEO history)US Energy Information Administration — STEO
2009–2025
9 Sept 2026monthly, early in the month
Crude/NGL pipelines (GEM GOIT; simplified GeoJSON)Global Energy Monitorsnapshot9 Apr 2025per tracker release (irregular, roughly annual)
Crude oil + LNG bilateral trade (HS 2709 + 271111)BACI (CEPII)
1995–2024
1 Jan 2026annual, January–February
LNG carrier voyages (LNG-T3)Zhou, C. 2026, LNG-T3 (Zenodo)
7 Jan 2020 – 31 Dec 2024
1 Apr 2026per Zenodo version (check the concept DOI for newer versions)
Country geometries (1:110m admin-0)Natural Earthsnapshot1 Oct 2024rarely (major Natural Earth releases)
US shale-region outlines (EIA DPR counties, Census 1:20m)US Energy Information Administration — DPR regions; US Census Bureausnapshot13 May 2024discontinued (folded into STEO, June 2024)

Map layers

Reserves (country choropleth)

  • Source: Energy Institute, Statistical Review of World Energy 2026 (75th edition) — "Oil: Proved reserves history" and "Gas: Proved reserves history" sheets. File country_year_series.parquet.
  • Coverage: proved oil reserves (billion barrels) and proved gas reserves (trillion cubic metres), country-year, 1990–2020. The same file carries oil production (kb/d) 1990–2025, shown in the country panel on the oil axis.
  • "Oil production" is total liquids, not crude. It comes from EI's "Oil Production - barrels" sheet, which counts crude oil, shale oil, oil sands, condensates and NGLs — USA 2024 reads 20,276 kb/d here against roughly 13,200 kb/d of crude and condensate. The metric key in the parquet is still production_crude_kbpd, which is a misnomer we have not renamed because doing so would break every saved query-console link; read the key as "oil production", not "crude".
  • Reserves stop in 2020. The reserves tables have not been updated past 2020; the 2026 edition extends production to 2025 but still ends reserves in 2020. For 2021–2024 the choropleth shows the 2020 value and says so on the map ("Reserves: 2020 value"). No post-2020 change in the map is a real change in reserves.
  • Colour scale: logarithmic, so both Venezuela-scale and small producers are distinguishable. Countries with no reserves row in the source get a neutral no-data tint, not the bottom of the ramp.
  • Gaps: country aggregates only (no field, basin or sub-national split); EI's regional "Other …" residuals are not attributed to any country.
  • Scenarios: not used. When a scenario is active the country fill switches from reserves to exposure.
  • Licence: free to quote with attribution; the Energy Institute asks for permission before extensive reproduction of its tables, so the Data page does not offer the series for download (see Licences).

Basins

  • Source: US DOE National Energy Technology Laboratory, Global Oil and Gas Infrastructure (GOGI) — basins feature service, snapshot retrieved 2026-05-17. Public domain (17 USC §105).
  • Coverage: 1,046 petroleum-bearing basin polygons with name, country, region and area. Geometry is simplified to ≈1 km for the browser (basins.geojson); full resolution stays in the build.
  • Gaps: geological outlines, not production; many polygons lack a name; no time dimension.
  • Scenarios: not used.

US shale regions

  • Source: US Energy Information Administration, Short-Term Energy Outlook (September 2026), API v2 series COPR* (crude oil production) and NGMP* (marketed natural gas production) for the Permian, Bakken, Eagle Ford, Haynesville and Appalachia regions. Files shale_region_year.parquet and shale_regions.geojson. US Government work, public domain.
  • What the regions are: EIA defines each region as a set of counties, not a geological outline, and its numbers are everything produced in those counties. We draw exactly that: the counties listed in EIA's Drilling Productivity Report workbook (RegionCounties), dissolved over US Census 1:20m county polygons. A region's edge is a county line, and it includes production from every formation beneath it.
  • Assumption: EIA moved the DPR into STEO in June 2024 and publishes no separate county list for the STEO regions, so we use the DPR's list for the five regions STEO kept (Anadarko and Niobrara now fall into STEO's "rest of Lower 48", which is not drawn). If EIA has since redrawn a region, our outline is out of date while the numbers are current.
  • History only. STEO series run 18 months into the future in the same series as history, with no flag between them. The build keeps annual values through 2025 — the last complete year before the September 2026 release — and fails if a series stops short of that. No forecast is on the map.
  • Colour: the active year's crude output (oil view) or marketed gas output (gas view) — the latest year by default, or the year of a pinned year= link — square-root scaled against the largest value of that commodity in any region and year, so the Permian's growth reads across years. Before 2009 there is no EIA regional series and the regions draw as outlines only.
  • Units: crude in thousand barrels per day (STEO's million b/d × 1,000, matching the reserves layer's production figures); marketed gas in billion cubic feet per day as EIA publishes it. The tooltip also shows 2025, a year past the default reading year.
  • Gaps: US only — no open per-region production series exists elsewhere. Monthly values are ingested by EIA but not used; the series is annual.

Extraction sites

  • Source: Global Energy Monitor, Global Oil & Gas Extraction Tracker (GOGET), March 2026 snapshot. CC BY 4.0.
  • Coverage: 7,055 oil and gas fields with location, status (6,055 operating, 407 discovered, 228 mothballed, 202 in development, 20 abandoned, 16 decommissioning, 9 cancelled), operator and country.
  • Time: commissioned_year is known for 2,279 of 7,055 (32 %); the other 68 % appear in every year.
  • Gaps: no production or capacity in this snapshot (GEM publishes production in separate sheets with non-uniform units; not ingested). Newer GEM releases are behind a sign-up form.
  • Scenarios: not used.

Oil pipelines

  • Source: Global Energy Monitor, Global Oil Infrastructure Tracker (GOIT), 2025-04-09 GeoJSON release. CC BY 4.0.
  • Coverage: 1,185 crude, NGL and crude+NGL lines that are operating (1,137) or in construction (48). Shelved, cancelled and retired lines, and features without geometry, are dropped at ingest.
  • Units: capacity in thousand barrels per day, known for 933 of 1,185.
  • Time: start_year known for 760 of 1,185 (64 %); undated lines appear in every year. There is no retirement year, so a line decommissioned in the past is not in the data at all rather than disappearing at the right year.
  • Geometry: each pipeline's contiguous line fragments are merged, then simplified at 0.005° (≈500 m); the browser file is about 8 MB and the shape is schematic at street scale.
  • Scenarios: not used directly — the pipeline scenarios are defined by route shares (below), not by these geometries.

Gas pipelines

  • Source: Global Energy Monitor, Global Gas Infrastructure Tracker (GGIT), 2026-02-20 release. CC BY 4.0.
  • Coverage: 2,772 operating (2,554) or in-construction (218) gas lines, on the same filtering rules as oil.
  • Units: capacity in billion cubic metres per year (the column is named capacity_kbpd for historical reasons; capacity_unit says bcm/y).
  • Time: start_year known for 2,058 of 2,772 (74 %).
  • Scenarios: not used. The only gas scenario is Hormuz-LNG, which concerns seaborne LNG, not pipeline gas.

Refineries

  • Sources: NETL GOGI Refineries (primary, public domain, snapshot 2026-05-17) plus OpenStreetMap (supplement, ODbL, Overpass snapshot 2026-09-17). Each row carries a source column.
  • Deduplication:
    • Within NETL — NETL lists many plants more than once (an English name, a numbered "333 – …" variant, a French "Raffinerie de …" variant). Rows in the same country within 1 km are merged, but never two rows whose known capacities differ by more than 5 %. 2,272 raw rows become 1,075. A few probable duplicates with conflicting capacities (e.g. several Pemex plants) remain as two rows.
    • OSM against NETL — an OSM refinery is dropped when a NETL refinery in the same country lies within 2 km. The 2 km threshold is the knee of the nearest-neighbour distance distribution: matches under 2 km are the same facility; beyond it, genuinely distinct neighbours appear (e.g. Marcus Hook / Trainer). 168 OSM refineries become 88 supplements.
  • Units: capacity in kb/d, parsed from NETL's free-text field; known for 350 of 1,163 (30 %); OSM rows never carry capacity.
  • Time: no vintage in either source; refineries appear in every year.
  • Scenarios: oil scenarios attribute each country's at-risk crude imports to its refineries — see Refinery attribution.
  • Licence: the 88 OSM rows are ODbL (share-alike), so the refinery layer — and assets.parquet, which mixes them with CC BY and public-domain rows — is view-only. The 1,075 NETL refineries are in the downloadable assets_open.parquet.

Storage hubs

  • Source: NETL GOGI storage feature service, snapshot 2026-05-17. Public domain.

  • Coverage: 7,733 oil and gas storage sites, drawn from zoom 4 upward to keep the world view legible. NETL's layer has 26,102 rows, but 23,501 are in the US and most of those are EPA regulatory records rather than storage facilities. The build drops four kinds of them:

    • leaking-underground-tank cleanup sites (6,025: petrol stations, garages);
    • SPCC spill-prevention plans (11,513: any site holding more than 1,320 US gallons of oil, including schools and farms);
    • an EPA state master list (721: shops);
    • rail, truck, air and port transfer points (110).

    It keeps EPA Facility Response Plan sites (3,669 sites with at least 1 million gallons of oil storage, including the Strategic Petroleum Reserve caverns), the EIA petroleum-product terminals (1,460) and all 2,601 non-US rows.

  • Bias: two-thirds of the remaining rows (5,132) are still in the US, because the US inputs are far more complete than anywhere else. Read the layer as "bulk storage where NETL has records", not as an even global inventory.

  • Gaps: capacity is present on only 4 rows, so the layer shows where storage is, not how much; no vintage; status is mostly blank.

  • Scenarios: not used.

Ports

  • Source: NETL GOGI ports feature service, snapshot 2026-05-17. Public domain.
  • Coverage: 3,694 oil and gas handling ports. Drawn from zoom 4 upward.
  • Gaps: status blank for 93 %; capacity on 23 rows; no vintage.
  • Scenarios: not used.

LNG terminals

  • Sources: LNG-T3 (Zhou, C. 2026, Zenodo, CC BY 4.0) as primary; GEM GGIT (CC BY 4.0) as supplement.
  • Build: LNG-T3's 545 terminals are filtered to operating and in-construction (330); 25 names that carry both an operating and an expansion record are collapsed to the operating record, leaving 305. GEM's per-train records are collapsed to one per terminal; a GEM terminal is dropped if an LNG-T3 terminal in the same country has the same name, or lies within 25 km (terminal campuses are large). 9 GEM terminals survive. Result: 314 terminals (74 export, 240 import).
  • Units: nameplate capacity in million tonnes per annum, known for 312 of 314; LNG-T3 terminals also carry total processed volume (bcm), unit count and UN/LOCODE.
  • Time: commissioned_year known for 306 of 314 (97.5 %) — the best-dated layer on the map.
  • Scenarios: the Hormuz-LNG scenario attributes at-risk LNG imports to import terminals — see LNG import-terminal attribution.

LNG voyages

  • Source: LNG-T3 tanker-voyage table, 17,592 AIS-derived voyages from 2020-01-01 to 2024-12-31. CC BY 4.0.
  • What is drawn: laden (export) voyages active in the selected year with confidence score ≥ 3 (of 5), as arcs from loading to discharge terminal. Voyages are joined to terminals by terminal name (every destination name resolves at build time).
  • Units: cargo in cubic metres of LNG. Where tonnes are shown, 0.4245 t/m³ is used for display only (real density varies 0.41–0.46).
  • Time: only 2020–2024; outside that range the layer is empty.
  • Partial coverage: LNG-T3 is an AIS sample. Summed to annual tonnage it covers 22–41 % of GIIGNL's reported world LNG trade in every year:
Year LNG-T3 (Mt) GIIGNL (Mt) Coverage
2020 76.6 356.1 0.22
2021 105.0 372.3 0.28
2022 136.0 401.5 0.34
2023 164.8 401.4 0.41
2024 129.4 407.0 0.32

(scripts/validate/lng_t3_vs_giignl.py, output checked in at data/validation/lng_t3_vs_giignl.txt.) The voyage arcs are therefore a sample of routes, not a census of trade, and LNG-T3 is never used as a country total anywhere in the site.

Gas storage (EU)

  • Source: Gas Infrastructure Europe, AGSI (storage) — daily, country level, 2020-01-01 to the latest published gas day. File gie_daily.parquet, which also carries ALSI LNG send-out and inventory (not drawn).
  • What is drawn: each country's storage fullness as AGSI reports it (gas in store as a % of working gas volume) on the most recent gas day in the file. Countries GIE does not cover are drawn as no data, not as empty.
  • Time: not affected by the selected year. The map otherwise reads at an annual vintage (2024 by default, or an older year on a pinned link); this layer is a daily reading of the present, so it always shows the latest day, and its tooltip says which.
  • Scale: the ramp tops out at 100 % and clamps above it. About 3 % of readings exceed 100 % (a site filled beyond its declared working volume); rescaling to the maximum would pale every ordinary country.
  • Gaps: country level only. ALSI facility names match our LNG terminal names for only about 71 % of terminals, so terminal-level send-out is not joined.
  • Licence: free with registration, attribution "GIE AGSI / ALSI"; not an open licence, so view-only (see Licences).

Recent imports (UN Comtrade)

  • Source: UN Comtrade monthly imports, HS 2709 (crude) and HS 271111 (LNG), January 2025 to the latest month with at least 50 reporters. File comtrade_monthly.parquet.
  • What is drawn: each country's imports over its own latest 12 reported months, in the commodity selected (crude in the oil view, LNG in the gas view). Countries file months apart — Korea, France and Singapore stopped at December 2025 while most reach May 2026 — so the tooltip names each country's window, and a shared window would have drawn a filing delay as a collapse in imports.
  • As reported, not reconciled. These are the importer's own declarations. BACI, which the scenarios use, reconciles both sides of every flow and is annual to 2024; the tooltip shows the country's BACI figure beside the Comtrade one, and the two are never added together or swapped.
  • Gaps: China and Taiwan — the largest and tenth-largest crude importers in BACI 2024 — file no monthly reports to Comtrade and draw as no data. Comtrade publishes no zero rows, so a month with no cargo of the selected commodity looks identical to a month the country never reported at all — unless it filed the other code (crude or LNG) that month, which proves it was live. A month counts as reported if the country filed either code; a country with fewer than 12 such months in its window gets a lighter "incomplete" fill and the tooltip gives the partial total. Six LNG importers (Bulgaria, Colombia, Denmark, Kazakhstan, Romania, the USA) and nine crude importers count as complete on this rule that would not on cargo months alone; the tooltip says how many of the 12 months had a cargo. A complete total more than 2× off BACI is flagged in the tooltip; the largest such case by volume is Thailand's crude (117 Mt against BACI's 49 Mt for 2024).
  • Time: not affected by the selected year; it always shows the latest months.
  • Licence: UN Comtrade terms limit re-dissemination, so the layer is view-only and not downloadable.

Trade flows (BACI)

  • Source: the same CEPII BACI table the scenarios use — see Trade data (BACI) below for its cleaning, quantity repair and known gaps (Iran suppression, Russia → Belarus). Crude (HS 2709) in the oil view, LNG (HS 271111) in the gas view.
  • What is drawn: country-pair great-circle arcs, one exporter → importer pair per line, coloured light (exporter end) → dark (importer end) — the same light→dark convention LNG voyages uses, so a flow's direction reads without a legend — and widened by volume (square-root scaled). Oil arcs are warm-toned (pale gold → burnt umber), LNG arcs cool-toned (pale cyan → deep blue).
  • World view (no country selected): only the largest 150 pairs by volume for the selected year + commodity are drawn — every pair is a hairball otherwise. 150 was picked by measuring, across every year 1995–2024, how much of world volume the top-N pairs carry: top 150 holds 82–87 % of crude and 94–100 % of LNG every year (2024: crude 86.6 %, LNG 96.1 %). The legend states the cutoff and its coverage.
  • Focused on a country: every one of that country's pairs is drawn instead — not just the ones that make the world top 150 — above a floor of 0.1 % of the country's own total trade (imports + exports) that year + commodity, so a large trader's noise (down to fractions of a tonne) does not draw as a pair. This is what answers "who supplies Japan?" — focus the map on Japan and every real supplier and customer shows, not just whichever happen to also be globally huge.
  • Tooltip: exporter → importer, volume in Mt (+ kb/d for crude, using the same 7.33 bbl/t conversion the scenario panels use), each side's share of its own quantified imports/exports that year, source + as-of.
  • Null quantities: 1,317 of BACI's 53,727 crude+LNG rows (checked 2026-09-19) report a flow with no quantity. Those rows are dropped before any pair, total or share is computed, so every share on the map and in the tooltip is a share of quantified trade, not of everything BACI reports — a country with a disproportionate share of unquantified rows would read as having a smaller footprint here than its full reported trade.
  • Anchors: each side of an arc lands on a fixed lon/lat anchor per country (src/lib/geo/country-anchors.ts) — the representative point of its largest Natural Earth polygon, hand-moved for a handful of countries where that point sits nowhere near where energy actually loads or lands (the US Gulf Coast, not the Great Plains; western Russia, not Siberia; Alberta, not the Canadian centroid; similarly Australia, Norway, Chile, Indonesia, Malaysia, France) — plus a capital/settlement point for BACI codes with no 1:110m polygon (Singapore, Bahrain, Malta, Hong Kong, and more).
  • Time: 1995–2024 only (BACI's coverage); outside that range the layer is on but empty.
  • Downloadable: BACI's catalog entry is CC-derived / Etalab-licensed, so this layer's CSV/GeoJSON export is available (unlike EI reserves or GIE gas storage) — it exports exactly the pairs on screen (the world top 150, or the focused country's set).

Country boundaries and basemap

  • Country polygons: Natural Earth 1:110m admin-0 (public domain), used for the reserves and exposure fills. Small islands and city-states (Singapore, Bahrain, …) have no polygon at this scale; they still appear in scenario tables.
  • Basemap: OpenFreeMap "Positron" vector tiles — © OpenMapTiles, data from OpenStreetMap contributors. No API key; attribution is shown on the map.

Time axis

There is no control that lets a visitor scrub through years. The map reads at the latest year each layer has: infrastructure and scenarios default to 2024 (the last reconciled year of bilateral trade, BACI), reserves stay frozen at 2020, and the live/monthly layers (gas storage, recent imports) always show their own most current reading, independent of everything else.

AppState.year still exists and a link can still pin an older one (?year=2010): a shared link is a citation, and a URL copied today must keep showing today's numbers even after the next data refresh. A pinned historical link shows an "as of {year} · View latest" chip and behaves exactly as the old slider did at that position:

  • Reserves change until 2020, then hold the 2020 value (flagged on the map) for any pinned year after that.
  • Pipelines, extraction sites and LNG terminals hide features whose start/commissioning year is after the pinned year; undated features always show. At the latest year, nothing is hidden by vintage — a newly added feature dated after 2024 stays visible rather than vanishing with no way to reach a year that would show it again.
  • LNG voyages exist only for 2020–2024.
  • US shale regions have EIA data from 2009; earlier years draw outlines only.
  • Refineries, storage, ports and basins have no dates and are the same regardless of the pinned year.
  • Scenario trade data (BACI) starts in 1995; a scenario pinned to 1990–1994 has no trade to put at risk. The Trade flows layer reads the same table and is likewise empty before 1995.

Every scenario result also lists, in a "Data behind this result" disclosure, the vintage of every dataset it is built from (trade year, route-share sources, asset rows), so the honesty the slider used to provide through the year axis is now provided per result instead.

Disruption scenarios

What the scenario computes

For a scenario S (a chokepoint or pipeline), a commodity and a year:

at_risk(importer)  = Σ over exporters X of  imports(X → importer, year) × share(S, X, importer)
share_at_risk      = at_risk(importer) / total imports(importer, year)

share(S, X, importer) is the fraction of X's exports to that importer that moves through the route. A per-pair share wins over a per-exporter share; exporters with no share contribute nothing. The map colours each importer by share_at_risk (red is reserved for this), and the scenario panel ranks importers, refineries or LNG terminals.

The map also marks where the disruption is: a closure glyph at the chokepoint, or — for a pipeline scenario — the route's own GEM features redrawn as a highlighted cut line with the glyph on it. The cut route is shown whether or not the pipelines layer is switched on and whatever year is active, because the route is the subject of the scenario rather than infrastructure you chose to see; its position and vintage still come from pipelines.geojson unchanged. Picking a scenario frames the disruption together with the eight importers losing the most volume; a link that already carries a camera (lon/lat/z) keeps it. Hovering a ranked row highlights its country or asset on the map, and clicking one selects the country (and puts it in the URL as focus=).

This is a static first-order exposure measure: what fraction of last year's supply moved through the route. It does not model rerouting, spare pipeline capacity, strategic stocks, price response, or substitution between suppliers.

Trade data (BACI)

  • Source: CEPII BACI, HS92 release V202601, annual bilateral trade 1995–2024, reconciled from UN Comtrade mirror statistics. Quantities in metric tonnes. HS 2709 (crude petroleum) for oil scenarios; HS 271111 (liquefied natural gas) for the LNG axis of Hormuz, Malacca, Suez+SUMED and Bab el-Mandeb — pipeline gas (HS 271121) never transits a chokepoint, so HS 2711 would overstate any of them.
  • Cleaning: BACI pseudo-country aggregates are removed and duplicate country-pair rows summed.
  • Quantity repair: Some BACI quantities are wrong by one to three orders of magnitude while the values are fine (e.g. Philippines ← Saudi Arabia crude 2023: 80.9 Mt at 26 USD/t against a ~650 USD/t median; Taiwan ← Saudi Arabia 2014: 14 kt for USD 10.5 bn). Because the scenarios work in tonnes, build_trade_flow.py re-estimates any row whose unit value lies outside 5× of the (HS code, year) median as value_usd / median, keeping BACI's figure in qty_reported and flagging qty_imputed (9,655 of 53,727 rows, mostly tiny shipments; net −258 Mt crude and −520 Mt LNG across 1995–2024). Values are never changed.
  • Iran suppression: BACI's Iranian crude falls from 89 Mt (2018) to 28 Mt (2019), about 4 Mt in 2020–21 and near zero in 2023–24 (2022's 31 Mt is mostly one partner). Sanctioned cargoes are reported under other origins; Malaysia→China crude, for instance, grows from 7 Mt (2019) to 41.5 Mt (2024). Exposure of Iran's buyers (China above all) is understated from 2019, and the scenario panel says so for those years.
  • Russia → Belarus: BACI records Russian crude into Belarus through 2021 (16 Mt) and none from 2022, although Belarus's refineries still run on Russian crude. The Druzhba scenario therefore loses its largest single buyer from 2022, and the scenario panel says so.
  • Volumes: panels show crude in kb/d using 7.33 barrels per tonne (EI's mean conversion) and LNG in Mt.
  • Licence: CEPII publishes BACI under the Etalab Open Licence 2.0 (reuse and redistribution with attribution). Our processed bilateral table is downloadable from /data under the same licence; the full dataset is free from CEPII. Cite Gaulier & Zignago (2010), CEPII Working Paper 2010-23.

Route shares

disruption_route.parquet has 527 rows across 16 route-share sets (disruption_id values) drawn from 12 scenarios (2026-10-24; three scenarios — Malacca, Suez+SUMED, Bab el-Mandeb — carry a separate oil and gas/LNG route set each, hence 15 sets from 11 scenarios). Eighteen of those are the original hand-set exporter-wide shares behind Hormuz, Druzhba, BTC and CPC (sixteen crude, two LNG-specific for Hormuz); the rest are either share-0 carve-outs (54 intra-Gulf Hormuz pairs, plus five Turkish Straits pairs for Kazakh crude that demonstrably avoids the Straits, and one partial carve-out for Germany — see below) or region-expanded exporter→importer pairs for the five chokepoints added 2026-09-19 (Malacca, Suez+SUMED, Bab el-Mandeb, Turkish Straits), each row still tied to a document and year (source_title, source_url, source_year, data_year, source_note). Shares are static across years — they do not follow maintenance outages, sanctions or contract changes — except where a route stopped and restarted within the years we hold: such a row carries a year window (valid_from_year/valid_to_year, inclusive, NULL = open) and a result reads only the rows valid in its trade year. Kirkuk–Ceyhan and the Hormuz Iraq share that complements it are split into through 2022 / 2023–2025 / from 2026, and Kazakh crude to Germany through the Turkish Straits takes its 0.53 from 2023 only (the 0.80 Kazakh share before). Six of the original eighteen were revised to source-derived values on 2026-09-10; one (Russian crude via CPC) has no single supporting document and is flagged as an analyst estimate. A share set for an exporter–importer pair overrides the exporter-wide share for that buyer: every Hormuz exporter has a share-0 pair for each other Gulf-coast country (Iran, Iraq, Kuwait, Qatar, Saudi Arabia, the UAE, Bahrain), because a cargo that stays inside the Gulf never crosses the strait (42 crude pairs, 12 LNG). The newer chokepoints use the same override mechanism for direction, not geography inside one region: Malacca, Suez and Bab el-Mandeb only expose the exporter→importer-region pairs whose cargo physically needs that route (Gulf crude to Europe crosses Bab el-Mandeb; to East Asia it does not), so a pair not listed defaults to 0 rather than inheriting an exporter-wide wildcard. Two years per row, and they are not the same thing (2026-09-21). source_year is the year the cited document was published; data_year is the year of the flows or routing it describes, which is the year the site states everywhere a share is dated — the IEA Hormuz pages are published 2026 and give 2025 routing, so calling that "2026 route shares" claimed a currency the data does not have. data_year is set only where the document (or the row's own note) says which year's flows its figure is: 73 of the 522 rows carry one. The rest are NULL, and nothing is implied by it — most are structural rows (the 54 intra-Gulf share-0 pairs; the physical-geography wildcards behind Suez, Bab el-Mandeb and Malacca's Gulf rows, whose shares follow from where the water is rather than from a measured flow), one is design capacity (ESPO's spur), and three are unsourced analyst estimates. Where a run's documents state no data year at all, the site says "route shares published 2019" rather than passing a publication year off as a data year. The table below is generated from the parquet file at build time.

Route shares used by the disruption scenarios, with sources
ScenarioExporter → importerShareData yearSource and derivation
Strait of Hormuz (crude)IRN→*100 %2025IEA, Strait of Hormuz (Oil security and emergency response) (published 2026)

IEA (2025 data): Iran, Iraq, Kuwait, Qatar and Bahrain 'rely on the Strait to deliver the vast majority of their oil exports'; only Saudi Arabia and the UAE have bypass routes. Iran's Goreh-Jask/Jask terminal is 'effectively non-operational' (one test cargo, late 2024).

Strait of Hormuz (crude)IRQ→*87 %through 20222023Reuters, 'Explainer: Why oil flows through the Iraq-Turkey pipeline have been halted' (published 2025)

IEA (2025 data): Iran, Iraq, Kuwait, Qatar and Bahrain 'rely on the Strait to deliver the vast majority of their oil exports'; only Saudi Arabia and the UAE have bypass routes. Iraq's one bypass is the Kirkuk-Ceyhan pipeline to the Mediterranean, which carried about 450 kb/d until 25 Mar 2023 (Reuters) against ~3.5 mb/d of total Iraqi crude exports (BACI 2021-22), so 1 - 0.13 = 0.87 of Iraq's exports cross Hormuz while it runs. Holds through 2022. Was 0.90 for every year before 2026-10-24.

Strait of Hormuz (crude)IRQ→*100 %2023–2025—Reuters, 'Explainer: Why oil flows through the Iraq-Turkey pipeline have been halted' (published 2025)

IEA (2025 data): Iran, Iraq, Kuwait, Qatar and Bahrain 'rely on the Strait to deliver the vast majority of their oil exports'; only Saudi Arabia and the UAE have bypass routes. Kirkuk-Ceyhan was shut from 25 Mar 2023 (Reuters) until the Kurdish exports restarted on 27 Sep 2025 (Al Jazeera), so in 2023-2025 every Iraqi export barrel left through the Gulf. Each of those years is counted shut: the line ran for under three months of 2023 and about three of 2025.

Strait of Hormuz (crude)IRQ→*88 %from 20262026TRT World, 'Iraq resumes oil exports through Türkiye as Kirkuk–Ceyhan pipeline reopens' (published 2026)

IEA (2025 data): Iran, Iraq, Kuwait, Qatar and Bahrain 'rely on the Strait to deliver the vast majority of their oil exports'; only Saudi Arabia and the UAE have bypass routes. Kirkuk-Ceyhan reopened in two steps: Kurdish exports at 180-190 kb/d from 27 Sep 2025 (Al Jazeera) and the federal Kirkuk line at an initial 250 kb/d from 18 Mar 2026 (TRT World), about 435 kb/d together against ~3.5 mb/d, so 1 - 0.12 = 0.88. LOW confidence: both are restart-week figures, and no trade year we hold covers 2026 yet.

Strait of Hormuz (crude)KWT→*100 %2025IEA, Strait of Hormuz (Oil security and emergency response) (published 2026)

IEA (2025 data): Iran, Iraq, Kuwait, Qatar and Bahrain 'rely on the Strait to deliver the vast majority of their oil exports'; only Saudi Arabia and the UAE have bypass routes.

Strait of Hormuz (crude)QAT→*100 %2025IEA, Strait of Hormuz (Oil security and emergency response) (published 2026)

IEA (2025 data): Iran, Iraq, Kuwait, Qatar and Bahrain 'rely on the Strait to deliver the vast majority of their oil exports'; only Saudi Arabia and the UAE have bypass routes.

Strait of Hormuz (crude)SAU→*88 %2025Argus Media, Yanbu gives Aramco limited option for rerouting crude (Kpler data) (published 2026)

Kpler 2025: ~5.5 mb/d of Saudi crude shipped via Hormuz vs ~0.76 mb/d via the Red Sea (Yanbu) -> 5.5 / 6.26 = 0.88. Consistent with IEA (5.43 mb/d Saudi crude through Hormuz, 2025).

Strait of Hormuz (crude)ARE→*65 %2025IEA, Strait of Hormuz (Oil security and emergency response) (published 2026)

IEA 2025: 2.02 mb/d of UAE crude through Hormuz; ~1.1 mb/d of domestic crude exported via the Habshan-Fujairah (ADCOP) pipeline -> 2.02 / 3.12 = 0.65.

Strait of Hormuz (crude)BHR→*100 %2025IEA, Strait of Hormuz (Oil security and emergency response) (published 2026)

IEA (2025 data): Iran, Iraq, Kuwait, Qatar and Bahrain 'rely on the Strait to deliver the vast majority of their oil exports'; only Saudi Arabia and the UAE have bypass routes. Bahrain's own crude exports are ~0 (IEA table: 0.00 mb/d crude, 0.21 mb/d products).

Strait of Hormuz (crude)42 pairs0.0 %—IEA, Strait of Hormuz (Oil security and emergency response) (published 2026)

Structural: both the exporter and the importer have terminals inside the Persian Gulf, so the cargo never crosses the Strait of Hormuz. The exporter-wide share applies only to buyers outside the Gulf. Saudi Arabia and the UAE also have ports outside the strait (Red Sea, Fujairah), but a cargo from a Gulf neighbour lands at their Gulf-coast terminals. Imports into the Gulf from outside are out of scope: the scenario measures Gulf exports.

IRN→IRQ, IRN→KWT, IRN→QAT, IRN→SAU, IRN→ARE, IRN→BHR, IRQ→IRN, IRQ→KWT, IRQ→QAT, IRQ→SAU, IRQ→ARE, IRQ→BHR, KWT→IRN, KWT→IRQ, KWT→QAT, KWT→SAU, KWT→ARE, KWT→BHR, QAT→IRN, QAT→IRQ, QAT→KWT, QAT→SAU, QAT→ARE, QAT→BHR, SAU→IRN, SAU→IRQ, SAU→KWT, SAU→QAT, SAU→ARE, SAU→BHR, ARE→IRN, ARE→IRQ, ARE→KWT, ARE→QAT, ARE→SAU, ARE→BHR, BHR→IRN, BHR→IRQ, BHR→KWT, BHR→QAT, BHR→SAU, BHR→ARE

Strait of Hormuz (LNG)QAT→*100 %—IEA, Strait of Hormuz (Oil security and emergency response) (published 2026)

Structural: the LNG export terminal loads inside the Persian Gulf and there is no pipeline or alternative port for LNG, so all LNG exports transit Hormuz. IEA puts Hormuz LNG flows at about a fifth of global LNG trade, almost all from Qatar and the UAE. Ras Laffan (Qatar).

Strait of Hormuz (LNG)ARE→*100 %—IEA, Strait of Hormuz (Oil security and emergency response) (published 2026)

Structural: the LNG export terminal loads inside the Persian Gulf and there is no pipeline or alternative port for LNG, so all LNG exports transit Hormuz. IEA puts Hormuz LNG flows at about a fifth of global LNG trade, almost all from Qatar and the UAE. Das Island (ADNOC Gas); the crude-only 0.65 share reflects the Fujairah oil bypass, which does not apply to LNG.

Strait of Hormuz (LNG)12 pairs0.0 %—IEA, Strait of Hormuz (Oil security and emergency response) (published 2026)

Structural: both the exporter and the importer have terminals inside the Persian Gulf, so the cargo never crosses the Strait of Hormuz. The exporter-wide share applies only to buyers outside the Gulf. Saudi Arabia and the UAE also have ports outside the strait (Red Sea, Fujairah), but a cargo from a Gulf neighbour lands at their Gulf-coast terminals. Imports into the Gulf from outside are out of scope: the scenario measures Gulf exports.

QAT→IRN, QAT→IRQ, QAT→KWT, QAT→SAU, QAT→ARE, QAT→BHR, ARE→IRN, ARE→IRQ, ARE→KWT, ARE→QAT, ARE→SAU, ARE→BHR

Druzhba pipelineRUS→BLR100 %—Global Energy Monitor, Druzhba Oil Pipeline (GEM.wiki) (published 2026)

Structural: Belarus is landlocked; its two refineries (Mozyr, Naftan/Novopolotsk) are fed by Druzhba and the Unecha-Polotsk line. Residual rail volumes not quantified in the source.

Druzhba pipelineRUS→POL47 %2021IEA, Russian supplies to global energy markets — Oil market and Russian supply (published 2022)

IEA: ~750 kb/d to Europe via Druzhba, ~250 kb/d on the southern branch -> ~500 kb/d on the northern branch shared by Poland and Germany. Poland imported 372 kb/d and Germany 687 kb/d from Russia (Nov 2021); IEA does not give the split, so the branch is allocated pro-rata: 500 / (372 + 687) = 0.47. Was 0.95 before 2026-09-10.

Druzhba pipelineRUS→DEU47 %2021IEA, Russian supplies to global energy markets — Oil market and Russian supply (published 2022)

Northern branch ~500 kb/d allocated pro-rata across Poland (372 kb/d) and Germany (687 kb/d) Russian imports (IEA, Nov 2021): 500 / 1059 = 0.47; the remainder arrived by tanker. Was 0.60 before 2026-09-10.

Druzhba pipelineRUS→SVK100 %2021IEA, Russian supplies to global energy markets — Oil market and Russian supply (published 2022)

IEA: ~250 kb/d via the southern branch to Hungary, Slovakia, Czechia; their Nov 2021 imports from Russia (SVK 109 + HUN 79 + CZE 52 = 240 kb/d) match that volume, i.e. essentially all by pipeline.

Druzhba pipelineRUS→HUN100 %2021IEA, Russian supplies to global energy markets — Oil market and Russian supply (published 2022)

IEA: southern branch ~250 kb/d vs HUN+SVK+CZE Russian imports 240 kb/d (Nov 2021) — essentially all by pipeline.

Druzhba pipelineRUS→CZE100 %2021IEA, Russian supplies to global energy markets — Oil market and Russian supply (published 2022)

IEA: southern branch ~250 kb/d vs HUN+SVK+CZE Russian imports 240 kb/d (Nov 2021) — essentially all by pipeline. Was 0.90 before 2026-09-10.

Baku-Tbilisi-CeyhanAZE→*83 %2023EIA, Regional Analysis Brief: Caspian Sea (published 2025)

EIA: 'about 83% of Azerbaijan's oil exports go through the BTC pipeline' (IEA 2023 profile: ~80%). The 'over 90%' EIA figure is cumulative ACG output, not the share of exports. Was 0.90 before 2026-09-10.

Caspian Pipeline ConsortiumKAZ→*80 %2023EIA, Regional Analysis Brief: Caspian Sea (published 2025)

EIA: 'The CPC carries about 80% of Kazakhstan's crude oil export'.

Caspian Pipeline ConsortiumRUS→*3.5 %—Analyst estimate (unsourced) (published 2026)

Derived, no single document: non-Kazakh (Russian-field) CPC volumes are ~8 Mt/y (63 Mt total 2024 minus 54.9 Mt Kazakh) against ~230 Mt/y of Russian crude exports -> ~0.035. The earlier 0.10 conflated Russia's share of CPC throughput with CPC's share of Russian exports. Was 0.10 before 2026-09-10.

Strait of Malacca (crude)70 pairs100 %—EIA, World Oil Transit Chokepoints: Strait of Malacca (published 2017)

Structural: the shortest sea route between Persian Gulf suppliers and East Asia, with no alternative once past Hormuz (EIA id=32452). Bernama/EIA (1H2025): Saudi Arabia, the UAE, Kuwait and Iraq alone were 'nearly 60 percent' of Malacca crude. IDN excluded: Cilacap/Balongan-bound cargo reaches Indonesia via the Sunda/Lombok straits, not Malacca.

SAU→CHN, SAU→JPN, SAU→KOR, SAU→TWN, SAU→HKG, SAU→SGP, SAU→MYS, SAU→THA, SAU→PHL, SAU→VNM, ARE→CHN, ARE→JPN, ARE→KOR, ARE→TWN, ARE→HKG, ARE→SGP, ARE→MYS, ARE→THA, ARE→PHL, ARE→VNM, KWT→CHN, KWT→JPN, KWT→KOR, KWT→TWN, KWT→HKG, KWT→SGP, KWT→MYS, KWT→THA, KWT→PHL, KWT→VNM, IRQ→CHN, IRQ→JPN, IRQ→KOR, IRQ→TWN, IRQ→HKG, IRQ→SGP, IRQ→MYS, IRQ→THA, IRQ→PHL, IRQ→VNM, QAT→CHN, QAT→JPN, QAT→KOR, QAT→TWN, QAT→HKG, QAT→SGP, QAT→MYS, QAT→THA, QAT→PHL, QAT→VNM, BHR→CHN, BHR→JPN, BHR→KOR, BHR→TWN, BHR→HKG, BHR→SGP, BHR→MYS, BHR→THA, BHR→PHL, BHR→VNM, OMN→CHN, OMN→JPN, OMN→KOR, OMN→TWN, OMN→HKG, OMN→SGP, OMN→MYS, OMN→THA, OMN→PHL, OMN→VNM

Strait of Malacca (crude)28 pairs0.0 %—EIA, World Oil Transit Chokepoints: Strait of Malacca (published 2017)

Structural: Gulf crude to South Asia crosses the Arabian Sea directly and never reaches the strait; India is absent from EIA/Bernama's Malacca destination breakdown (China 7.9 mb/d, Korea 2.4, Japan 2.1 in 1H2025).

SAU→IND, SAU→PAK, SAU→BGD, SAU→LKA, ARE→IND, ARE→PAK, ARE→BGD, ARE→LKA, KWT→IND, KWT→PAK, KWT→BGD, KWT→LKA, IRQ→IND, IRQ→PAK, IRQ→BGD, IRQ→LKA, QAT→IND, QAT→PAK, QAT→BGD, QAT→LKA, BHR→IND, BHR→PAK, BHR→BGD, BHR→LKA, OMN→IND, OMN→PAK, OMN→BGD, OMN→LKA

Strait of Malacca (crude)10 pairs60 %2025Bernama, Strait of Malacca Keeps Top Spot as World's Largest Oil Transit Chokepoint (EIA data) (published 2026)

Bernama/EIA (1H2025): 'the United States also sent 0.8 million barrels per day of crude oil and condensates from its Atlantic coast through the Strait of Malacca to East Asia.' BACI USA->East Asia crude (2024): 67.5 Mt/yr = 1.35 mb/d; 0.8 / 1.35 = 0.59, rounded to 0.60. Was proposed at 1.00 by the first-pass research note; the verifier corrected it against the BACI denominator.

USA→CHN, USA→JPN, USA→KOR, USA→TWN, USA→HKG, USA→SGP, USA→MYS, USA→THA, USA→PHL, USA→VNM

Strait of Malacca (LNG)10 pairs100 %—EIA, World Oil Transit Chokepoints: Strait of Malacca (published 2017)

EIA id=32452: Malacca 'is also an important transit route for [LNG] from Persian Gulf and African suppliers, particularly Qatar, to East Asian countries...The biggest importers...are Japan and South Korea.' No Australia row: the verifier found roughly a third of Australian LNG loads on the east coast (Gladstone/Curtis Island) and sails the Coral/Philippine Sea, never approaching Malacca; the remainder (NW Shelf) routes via Lombok/Makassar/Ombai-Wetar, not this strait.

QAT→CHN, QAT→JPN, QAT→KOR, QAT→TWN, QAT→HKG, QAT→SGP, QAT→MYS, QAT→THA, QAT→PHL, QAT→VNM

Suez Canal + SUMED (crude)138 pairs100 %—EIA, The Suez Canal and SUMED Pipeline are critical chokepoints for oil and natural gas trade (published 2019)

Structural, not the EIA '85% of northbound traffic' composition figure (that describes the chokepoint's own traffic mix, crude+products, 2018 — not the fraction of Gulf->Europe crude that uses Suez, and the verifier flagged the 0.85 reading as misapplied). Per this file's own bypass rule: the Cape of Good Hope is a disruption consequence, not a pre-existing bypass, and SUMED is inside this chokepoint's definition, not outside it - so the structural share is 1.00. No Iran row: BACI shows ~0 Iranian crude to Europe after 2018 sanctions. No USA row: Gulf->US Gulf Coast crude routinely sails the Cape of Good Hope rather than Suez/SUMED, and no cited share exists to split it - see this file's header comment. Coverage gap: Red Sea littoral importers themselves (Egypt, Jordan, Israel, Sudan) are not in the EUROPE_MED importer set this row uses, so their own Suez-transiting imports are out of scope for this scenario, not modelled as zero exposure.

SAU→NLD, SAU→GBR, SAU→FRA, SAU→ESP, SAU→ITA, SAU→GRC, SAU→BEL, SAU→DEU, SAU→POL, SAU→LTU, SAU→DNK, SAU→SWE, SAU→IRL, SAU→PRT, SAU→TUR, SAU→BGR, SAU→HRV, SAU→ROU, SAU→FIN, SAU→EST, SAU→LVA, SAU→CYP, SAU→MLT, ARE→NLD, ARE→GBR, ARE→FRA, ARE→ESP, ARE→ITA, ARE→GRC, ARE→BEL, ARE→DEU, ARE→POL, ARE→LTU, ARE→DNK, ARE→SWE, ARE→IRL, ARE→PRT, ARE→TUR, ARE→BGR, ARE→HRV, ARE→ROU, ARE→FIN, ARE→EST, ARE→LVA, ARE→CYP, ARE→MLT, KWT→NLD, KWT→GBR, KWT→FRA, KWT→ESP, KWT→ITA, KWT→GRC, KWT→BEL, KWT→DEU, KWT→POL, KWT→LTU, KWT→DNK, KWT→SWE, KWT→IRL, KWT→PRT, KWT→TUR, KWT→BGR, KWT→HRV, KWT→ROU, KWT→FIN, KWT→EST, KWT→LVA, KWT→CYP, KWT→MLT, QAT→NLD, QAT→GBR, QAT→FRA, QAT→ESP, QAT→ITA, QAT→GRC, QAT→BEL, QAT→DEU, QAT→POL, QAT→LTU, QAT→DNK, QAT→SWE, QAT→IRL, QAT→PRT, QAT→TUR, QAT→BGR, QAT→HRV, QAT→ROU, QAT→FIN, QAT→EST, QAT→LVA, QAT→CYP, QAT→MLT, IRQ→NLD, IRQ→GBR, IRQ→FRA, IRQ→ESP, IRQ→ITA, IRQ→GRC, IRQ→BEL, IRQ→DEU, IRQ→POL, IRQ→LTU, IRQ→DNK, IRQ→SWE, IRQ→IRL, IRQ→PRT, IRQ→TUR, IRQ→BGR, IRQ→HRV, IRQ→ROU, IRQ→FIN, IRQ→EST, IRQ→LVA, IRQ→CYP, IRQ→MLT, BHR→NLD, BHR→GBR, BHR→FRA, BHR→ESP, BHR→ITA, BHR→GRC, BHR→BEL, BHR→DEU, BHR→POL, BHR→LTU, BHR→DNK, BHR→SWE, BHR→IRL, BHR→PRT, BHR→TUR, BHR→BGR, BHR→HRV, BHR→ROU, BHR→FIN, BHR→EST, BHR→LVA, BHR→CYP, BHR→MLT

Suez Canal + SUMED (LNG)23 pairs100 %2018EIA, The Suez Canal and SUMED Pipeline are critical chokepoints for oil and natural gas trade (published 2019)

EIA id=40152: 'Nearly all (98%) of the northbound LNG transit is from Qatar and mainly destined for European markets.' This LNG transits both Bab el-Mandeb and Suez on the same voyage.

QAT→NLD, QAT→GBR, QAT→FRA, QAT→ESP, QAT→ITA, QAT→GRC, QAT→BEL, QAT→DEU, QAT→POL, QAT→LTU, QAT→DNK, QAT→SWE, QAT→IRL, QAT→PRT, QAT→TUR, QAT→BGR, QAT→HRV, QAT→ROU, QAT→FIN, QAT→EST, QAT→LVA, QAT→CYP, QAT→MLT

Bab el-Mandeb Strait (crude)115 pairs100 %—EIA, The Suez Canal and SUMED Pipeline are critical chokepoints for oil and natural gas trade (published 2019)

Structural, not the EIA '85% of northbound traffic' composition figure used on the 'suez' scenario (that figure describes the chokepoint's own traffic mix, crude+products, 2018 - not the fraction of Gulf->Europe crude that uses this route, and the verifier flagged it as misapplied there; it is not used here either). Per this file's own bypass rule: the Cape of Good Hope is a disruption consequence, not a pre-existing bypass, so Gulf crude bound for Europe that transits the Red Sea at all necessarily crosses Bab el-Mandeb - the structural share is 1.00. Coverage gap: Red Sea littoral importers themselves (Egypt, Jordan, Israel, Sudan) are not in the EUROPE_MED importer set this row uses, so their own Bab el-Mandeb-transiting imports are out of scope for this scenario, not modelled as zero exposure.

ARE→NLD, ARE→GBR, ARE→FRA, ARE→ESP, ARE→ITA, ARE→GRC, ARE→BEL, ARE→DEU, ARE→POL, ARE→LTU, ARE→DNK, ARE→SWE, ARE→IRL, ARE→PRT, ARE→TUR, ARE→BGR, ARE→HRV, ARE→ROU, ARE→FIN, ARE→EST, ARE→LVA, ARE→CYP, ARE→MLT, KWT→NLD, KWT→GBR, KWT→FRA, KWT→ESP, KWT→ITA, KWT→GRC, KWT→BEL, KWT→DEU, KWT→POL, KWT→LTU, KWT→DNK, KWT→SWE, KWT→IRL, KWT→PRT, KWT→TUR, KWT→BGR, KWT→HRV, KWT→ROU, KWT→FIN, KWT→EST, KWT→LVA, KWT→CYP, KWT→MLT, QAT→NLD, QAT→GBR, QAT→FRA, QAT→ESP, QAT→ITA, QAT→GRC, QAT→BEL, QAT→DEU, QAT→POL, QAT→LTU, QAT→DNK, QAT→SWE, QAT→IRL, QAT→PRT, QAT→TUR, QAT→BGR, QAT→HRV, QAT→ROU, QAT→FIN, QAT→EST, QAT→LVA, QAT→CYP, QAT→MLT, IRQ→NLD, IRQ→GBR, IRQ→FRA, IRQ→ESP, IRQ→ITA, IRQ→GRC, IRQ→BEL, IRQ→DEU, IRQ→POL, IRQ→LTU, IRQ→DNK, IRQ→SWE, IRQ→IRL, IRQ→PRT, IRQ→TUR, IRQ→BGR, IRQ→HRV, IRQ→ROU, IRQ→FIN, IRQ→EST, IRQ→LVA, IRQ→CYP, IRQ→MLT, BHR→NLD, BHR→GBR, BHR→FRA, BHR→ESP, BHR→ITA, BHR→GRC, BHR→BEL, BHR→DEU, BHR→POL, BHR→LTU, BHR→DNK, BHR→SWE, BHR→IRL, BHR→PRT, BHR→TUR, BHR→BGR, BHR→HRV, BHR→ROU, BHR→FIN, BHR→EST, BHR→LVA, BHR→CYP, BHR→MLT

Bab el-Mandeb Strait (crude)23 pairs0.0 %—Argus Media, Yanbu gives Aramco limited option for rerouting crude (Kpler data) (published 2026)

Structural: Saudi crude to Europe loads at Yanbu on the Red Sea (reached via the East-West/Petroline pipeline), north of Bab el-Mandeb - it never crosses this strait, though it still crosses Suez/SUMED (see the 'suez' scenario). Kpler 2025 (same figure already used for the Hormuz SAU row): ~0.76 mb/d of Saudi crude moves via the Red Sea, i.e. essentially all of Saudi Arabia's Europe-bound crude.

SAU→NLD, SAU→GBR, SAU→FRA, SAU→ESP, SAU→ITA, SAU→GRC, SAU→BEL, SAU→DEU, SAU→POL, SAU→LTU, SAU→DNK, SAU→SWE, SAU→IRL, SAU→PRT, SAU→TUR, SAU→BGR, SAU→HRV, SAU→ROU, SAU→FIN, SAU→EST, SAU→LVA, SAU→CYP, SAU→MLT

Bab el-Mandeb Strait (LNG)23 pairs100 %2018EIA, The Suez Canal and SUMED Pipeline are critical chokepoints for oil and natural gas trade (published 2019)

EIA id=40152: 'Nearly all (98%) of the northbound LNG transit is from Qatar and mainly destined for European markets.' This LNG transits both Bab el-Mandeb and Suez on the same voyage.

QAT→NLD, QAT→GBR, QAT→FRA, QAT→ESP, QAT→ITA, QAT→GRC, QAT→BEL, QAT→DEU, QAT→POL, QAT→LTU, QAT→DNK, QAT→SWE, QAT→IRL, QAT→PRT, QAT→TUR, QAT→BGR, QAT→HRV, QAT→ROU, QAT→FIN, QAT→EST, QAT→LVA, QAT→CYP, QAT→MLT

Turkish StraitsKAZ→*80 %2023EIA, Regional Analysis Brief: Caspian Sea (published 2025)

EIA: 'The CPC carries about 80% of Kazakhstan's crude oil export' (the same figure and citation as the shipped `cpc` row); essentially all of that Novorossiysk-loaded crude then transits the Turkish Straits, since the Black Sea has no other sea exit. Turkey's Izmit (Marmara) refinery transits only the Bosporus, while EIA's own series is labelled 'Turkish Straits (Dardanelles)' - a nuance this share does not attempt to resolve. Germany is carved out below.

Turkish StraitsKAZ→BGR0.0 %—EIA, Regional Analysis Brief: Caspian Sea (published 2025)

Structural: Bulgaria (Burgas/Lukoil Neftochim) is a Black Sea importer and never sees the Turkish Straits.

Turkish StraitsKAZ→ROU0.0 %—EIA, Regional Analysis Brief: Caspian Sea (published 2025)

Structural: Romania (Constanta) is a Black Sea importer and never sees the Turkish Straits.

Turkish StraitsKAZ→CHN0.0 %—EIA, Regional Analysis Brief: Caspian Sea (published 2025)

Structural: Kazakh crude to China moves by the Kazakhstan-China pipeline (Atasu-Alashankou), not by sea, so it never reaches Novorossiysk or the Straits.

Turkish StraitsKAZ→DEU53 %from 20232024Reuters, 'Russia to halt Kazakhstan's oil flows to Germany via Druzhba, sources say' (published 2026)

ESTIMATE, not a published share - interim pending a year-aware share. Germany takes Kazakh crude by two routes. KEBCO to PCK Schwedt runs overland (Uzen-Atyrau-Samara into Druzhba's northern spur) and never sees a tanker; the rest arrives seaborne or via the TAL pipeline from Trieste, fed by CPC blend that does transit the Bosporus and Dardanelles. The overland leg began only in February 2023 and runs ~1.0-1.5 Mt/y against BACI's 3.1 Mt (2023) and 4.3 Mt (2024) of KAZ->DEU crude, so roughly two-thirds of recent German volumes still transit the Straits; before 2023 essentially all of it did (2.0-2.7 Mt/y, 2018-2022). Derived as the 0.80 exporter wildcard x ~0.66 non-overland = 0.53, for 2023 on; through 2022 the 0.80 wildcard applies, since essentially all of Germany's Kazakh crude transited the Straits. A share-0 pair would be wrong in every year: it deletes an exposure Germany demonstrably had. Until 2026-10-24 this 0.53 covered every year.

Turkish StraitsKAZ→UZB0.0 %—Analyst estimate (unsourced) (published 2026)

UNSOURCED (structural): Uzbekistan is landlocked and borders Kazakhstan directly; no document was found describing Kazakh crude to Uzbekistan moving by any route other than overland (pipeline/rail) via Central Asia's own network. BACI 2024 KAZ->UZB is a small volume (~0.06 Mt) consistent with a regional overland trade, not seaborne CPC-blend crude that would need to reach a Black Sea tanker first.

Turkish StraitsKAZ→KGZ0.0 %—Analyst estimate (unsourced) (published 2026)

UNSOURCED (structural): Kyrgyzstan is landlocked and borders Kazakhstan directly; the same reasoning as Uzbekistan applies, and BACI 2024 KAZ->KGZ is negligible (well under 1,000 tonnes) - consistent with overland regional trade, not seaborne crude that would need to reach a Black Sea tanker first.

Keystone pipelineCAN→USA14 %2020Canada Energy Regulator, Canada's Pipeline System 2021 (Crude Oil Pipeline Transportation System) (published 2021)

CER: 'The Keystone Pipeline...transports about 14% of western Canadian crude oil exports.' Corroborated: CAPP ('Canadian Oil and Gas Export Infrastructure', Feb 2026) gives South Bow Keystone US exports at 579 kb/d (2025 Jan-Sep average) against BACI CAN->USA 2024 = 4,124 kb/d -> 579 / 4,124 = 0.14.

Enbridge MainlineCAN→USA60 %2020Canada Energy Regulator, Canada's Pipeline System 2021 (Crude Oil Pipeline Transportation System) (published 2021)

CER: 'The Enbridge Canadian Mainline...transports about 58% of all Canadian crude oil exports' (i.e. of all Canadian crude exports, not just to the US). Converted to a CAN->USA basis using the CER's own 2020 vintage: BACI CAN total 2020 = 181.71 Mt vs CAN->USA 2020 = 175.03 Mt, so 0.58 x (181.71 / 175.03) = 0.602, rounded to 0.60. CAPP's 3,062 kb/d 'U.S. Exports, Eastern Canada' figure is not usable as a numerator here: it is crude+NGL ex-Gretna including deliveries that stay in Eastern Canada, and CAPP's own table total (4,745 kb/d) exceeds all Canadian crude exports in BACI.

ESPO Skovorodino-Mohe spurRUS→CHN28 %—Erica Downs, testimony to the U.S.-China Economic and Security Review Commission (published 2019)

Downs (USCC, 2019): the ESPO trunk has 'a capacity of 1.2 million barrels per day of which around 630,000 bpd go to Kozmino', leaving ~570 kb/d for the Skovorodino-Mohe spur to Daqing; GEM P5174 gives the spur 602 kb/d. 602 / 2,180 kb/d (BACI RUS->CHN 2024) = 0.28. Design capacity, not metered flow. Kozmino seaborne ESPO Blend is deliberately excluded: it is sold FOB to Asian buyers generally and cannot be separated in BACI from Urals crude reaching China by long-haul tanker.

Kirkuk-Ceyhan pipelineIRQ→*13 %through 20222023Reuters, 'Explainer: Why oil flows through the Iraq-Turkey pipeline have been halted' (published 2025)

Reuters: 'On March 25, 2023 Turkey stopped pumping around 450,000 barrels per day (bpd) of Iraqi oil, including some 370,000 bpd of KRG crude, via the pipeline to Ceyhan.' 450 kb/d / ~3,500 kb/d (BACI IRQ crude exports 2021-22) = 0.13. Holds through 2022 as a constant, which overstates the years the line was repeatedly sabotaged (2003-2013) and does not track the 1990s sanctions years.

Kirkuk-Ceyhan pipelineIRQ→*0.0 %2023–2025—Reuters, 'Explainer: Why oil flows through the Iraq-Turkey pipeline have been halted' (published 2025)

Structural: Turkey stopped pumping on 25 Mar 2023 after the ICC arbitration ruling (Reuters), and Kurdish exports restarted only on 27 Sep 2025 (Al Jazeera). 2023-2025 are counted shut, since the line ran for under three months of 2023 and about three of 2025; cutting a shut pipeline cuts nothing.

Kirkuk-Ceyhan pipelineIRQ→*12 %from 20262026TRT World, 'Iraq resumes oil exports through Türkiye as Kirkuk–Ceyhan pipeline reopens' (published 2026)

TRT World (18 Mar 2026): the federal Kirkuk line resumed 'with an initial export capacity of 250,000 barrels per day'; Kurdish exports had restarted on 27 Sep 2025 at 180,000-190,000 bpd (Al Jazeera). ~435 kb/d / ~3,500 kb/d = 0.12. LOW confidence: restart-week figures, not a settled rate, and no trade year we hold covers 2026 yet.

Partial closures, combined scenarios and the exporter view

Three controls change what the numbers above describe. Each writes one URL parameter, so a link carries exactly what was on screen; a link with none of them means what it always did.

Severity (sev=, 5–100 %). The slider is the fraction of what the route carries that is cut, not a fraction of the country's supply. It multiplies the route share and nothing else:

at_risk(importer) = Σ over exporters X of imports(X → importer) × share(S, X, importer) × severity

Total imports — the denominator of share_at_risk — are untouched, so a 50 % closure is exactly half the volume at risk and half the percentage. Every downstream view (refineries, LNG terminals, the map fills, the CSV) reads the same multiplied share. The scale is deliberately linear and deliberately dumb: it says "this much of the route stops", not "this is what a partial closure would do to prices, queues or rerouting", none of which this model contains.

Combining two scenarios (scenario2=), reported as a range. Each scenario's own rows are resolved first — pair beats wildcard, including a share of 0 — and only then combined, so a flow one scenario carves out cannot be readmitted by another's wildcard. For two closures A and B carrying shares a and b of one flow, we know the fractions but not which cargoes, so the truly-cut fraction is unknown. It is, however, bounded, and both bounds are arithmetic rather than modelling choices:

max(a, b)  ≤  cut  ≤  min(1, a + b)

The lower bound is reached when the routes are in series — the same barrels cross both, so closing both cuts that cargo once. Qatari LNG to Japan transits Hormuz and Malacca; closing both does not cut it twice. The upper bound is reached when they are in parallel — different barrels, e.g. Canadian crude reaching the US Midwest either on Keystone or on the Enbridge Mainline, so the two closures add. Every headline figure quotes the lower bound (the defensible "at least this much"), and the range is shown beside it only where the two ends actually differ once rounded.

Worked examples, both crude, 2024, from the shipped data:

Scenarios Country Range
Hormuz Japan 73.3 %
Malacca Japan 94.9 %
Hormuz + Malacca Japan 94.9 % (in series — no wider than Malacca alone)
Keystone + Enbridge Mainline United States 36.5 – 45.0 % (in parallel)

Limits worth stating plainly: the bounds are only as good as the shares they combine, and the shares are static across years; the range is not a confidence interval and carries no probability; 1 − (1 − a)(1 − b) (independent-probability composition) is not used, because these are fixed physical routings rather than independent random events and that formula lands between the bounds for no reason anyone can cite. Asset-level rows — refineries and LNG terminals — quote the lower bound only: spreading a range across a country's plants by capacity would multiply an already-coarse proxy by an interval, and the CSV header says so.

Exporter view (view=exporters). The same rows read the other way round: what an exporter loses of its outlet, rather than what an importer loses of its supply.

at_risk(exporter) = Σ over importers M of exports(exporter → M) × share(S, exporter, M) × severity
share_at_risk     = at_risk(exporter) / total exports(exporter, year)

Because both sides sum the same products over the same flows, Σ exporter at-risk ≡ Σ importer at-risk — the two views are two readings of one number, and the map's red ramp simply shades the other side. The denominator differs, though: an exporter's total is everything BACI records it exporting of that commodity, so a country with no BACI export rows does not appear at all. For Hormuz crude in 2024 the exporter view ranks Saudi Arabia first (272.1 Mt at risk of 309.2 Mt exported, 88 %), then Iraq (156.2 Mt, 90 %) and the UAE (119.0 Mt, 65 %).

The country panel's exposure list is deliberately not affected by any of the three: it runs every scenario one at a time at full severity, which is what makes its rows comparable with each other. When a partial or combined closure is active the panel says so, so the two figures on screen cannot silently disagree.

Refinery attribution

For oil scenarios, a country's imports (and its at-risk imports) are split across its refineries in proportion to capacity:

refinery_share = capacity(R) / Σ capacity of refineries in the same country

When no refinery in the country has a known capacity, the split is even (1/N). When some do, refineries without a capacity receive no attribution. This is a country-level proxy: real feedstock depends on crude quality, contracts and ownership, which are not public at this resolution. Refineries in net-exporting countries (Saudi Arabia, Russia, …) show little or no exposure because the model only sees imports. The panel ranks refineries by capacity at risk, so rows without capacity are not ranked.

LNG import-terminal attribution

For Hormuz-LNG, each importer's country total always comes from BACI. How it is split across that country's import terminals depends on the year:

  • 2020–2024, country covered by LNG-T3 voyages: the country total is split across its terminals in proportion to the volume of qualifying voyages (laden, confidence ≥ 3) each received, and each terminal's supplier mix comes from those voyages. Terminals in a covered country that received no qualifying voyage are marked "no voyage data" — a data gap, never shown as zero risk.
  • 2020–2024, country not covered, and all years before 2020: the country total is split by terminal capacity ("capacity proxy").

Because LNG-T3 covers only 22–41 % of world LNG trade, it is used only for shares within a country, never for volumes.

In every year, only terminals in service that year take a share: a terminal counts if it received a qualifying voyage that year, or if it is not under construction and its commissioned_year is unknown or not after the selected year. Observed cargoes win over the listed year because several terminals took commissioning cargoes before their formal start (Kuwait's Al Zour: cargoes in 2021, listed 2022). Where a country imported LNG in a year when none of its listed terminals was yet in service, its imports still count at country level but are not attributed to any terminal. This mostly affects terminals missing from the source, such as Kuwait's Mina al-Ahmadi FSRU (2009–2021), for which Al Zour used to stand in.

Scenario notes

  • Close Strait of Hormuz (oil). Chokepoint; one share per Gulf exporter, applied to all its buyers outside the Gulf (intra-Gulf pairs are 0, e.g. Saudi crude to Bahrain's Sitra refinery through the AB pipeline). Imports into the Gulf from outside also cross the strait but are out of scope: the scenario measures the Gulf's exports. Saudi Arabia (0.88) and the UAE (0.65) have bypass pipelines (East-West to Yanbu; Habshan-Fujairah); Iraq follows the northern Kirkuk-Ceyhan route: 0.87 through 2022, 1.00 for 2023–2025 while it was shut, 0.88 from 2026 (a single 0.90 covered every year until 2026-10-24); Iran, Kuwait, Qatar and Bahrain are 1.0. Iran's exports are largely missing from BACI from 2019 (above).
  • Close Strait of Hormuz (LNG). Its own two shares (hormuz_lng), applied to HS 271111: Qatar 1.0 and the UAE 1.0 — both export plants (Ras Laffan, Das Island) load inside the Gulf and the UAE's Fujairah bypass carries crude only. Terminal attribution as above. Buyers inside the Gulf get share 0 (Qatari cargoes into Kuwait's Al Zour or Dubai's Jebel Ali never cross the strait); Kuwait's LNG from outside the Gulf, which does cross it inbound, is not counted.
  • Cut Druzhba pipeline. Per-importer shares of Russian crude: Belarus, Slovakia, Hungary and Czechia 1.0 (landlocked or southern-branch-fed); Poland and Germany 0.47 (the ≈500 kb/d northern branch allocated pro-rata across their 2021 Russian imports; the rest came by tanker). Germany and Poland largely ended Russian pipeline crude in early 2023, but the share is static, so post-2022 results scale whatever Russian volumes BACI still records. From 2022 BACI has no Russia→Belarus rows (above), so Belarus is missing from those years.
  • Cut Baku-Tbilisi-Ceyhan. Azerbaijan 0.83 (EIA: about 83 % of Azerbaijan's oil exports use BTC), applied to all its buyers.
  • Cut Caspian Pipeline Consortium. Kazakhstan 0.80 (EIA); Russia 0.035 — Russian-field CPC volumes against total Russian crude exports, an analyst estimate without a single source.
  • Close Strait of Malacca (oil). Direction-dependent: Saudi Arabia, the UAE, Kuwait, Iraq, Qatar, Bahrain and Oman are 1.0 to East Asia (minus Indonesia, whose Java refineries are reached via the Sunda/Lombok straits instead) and 0 to South Asia, which is reached by crossing the Arabian Sea directly. The US Atlantic/Gulf Coast is 0.60 to East Asia (EIA/Bernama's 0.8 mb/d against BACI's 1.35 mb/d actual trade). Iran's Malacca crude (EIA: ~1.6 mb/d in 1H2025) is a known omission — BACI shows near-zero Iranian crude to China, which does not declare it.
  • Close Strait of Malacca (LNG). Qatar 1.0 to East Asia. No Australia row: roughly a third of Australian LNG loads on the east coast and sails the Coral/Philippine Sea, never approaching Malacca; the rest routes via Lombok/Makassar, a different strait system.
  • Close Suez Canal + SUMED (oil). Direction-dependent: Saudi Arabia, the UAE, Kuwait, Qatar, Iraq and Bahrain are 1.0 to Europe/the Mediterranean, structural (no bypass short of the Cape of Good Hope; the SUMED pipeline is inside this chokepoint's own definition, not a bypass of it) and 0 to East/South Asia, which never enters the Red Sea. No Iran row — BACI shows ~0 Iranian crude to Europe after 2018 sanctions. No USA row (known omission) — an earlier version of this scenario treated all Gulf crude to the US as Suez/SUMED-routed (implying USA was the top-exposed importer, ~30.3 Mt / 9% of US crude imports, on no cited share); Gulf crude to US Gulf Coast refineries routinely sails around the Cape instead, and no EIA/IEA document was found splitting the two routes, so USA was dropped from this scenario's importer set rather than kept on an uncited number. Coverage gap — Red Sea littoral importers (Egypt, Jordan, Israel, Sudan) are not in the Europe/Mediterranean importer set this scenario uses, so their own Suez-transiting imports are out of scope here, not modelled as zero exposure.
  • Close Suez Canal + SUMED (LNG). Qatar 1.0 to Europe (EIA: "nearly all (98%) of the northbound LNG transit is from Qatar and mainly destined for European markets").
  • Close Bab el-Mandeb Strait (oil). Direction-dependent: the UAE, Kuwait, Qatar, Iraq and Bahrain are 1.0 to Europe/the Mediterranean; Saudi Arabia is 0 — its Europe-bound crude loads at Yanbu on the Red Sea via the East-West pipeline, north of the strait, so it never crosses Bab el-Mandeb (it still crosses Suez, above). Coverage gap — as with Suez, Red Sea littoral importers (Egypt, Jordan, Israel, Sudan) are not in the Europe/Mediterranean importer set this scenario uses, so their own Bab el-Mandeb-transiting imports are out of scope here, not modelled as zero exposure.
  • Close Bab el-Mandeb Strait (LNG). Qatar 1.0 to Europe, same EIA citation as Suez LNG (the cargo transits both straits on one voyage).
  • Close Turkish Straits. Kazakhstan 0.80 (EIA, the same figure as the CPC row — of the CPC-blend crude that reaches Novorossiysk, essentially all of it then crosses the Bosporus/Dardanelles, the Black Sea's only sea exit), with explicit share-0 pairs for Bulgaria and Romania (Black Sea importers that never reach the Straits), China (reached by the separate Kazakhstan–China pipeline, not by sea), Germany (KEBCO crude reaches Germany's PCK Schwedt refinery entirely overland via the Uzen-Atyrau-Samara pipeline and Transneft's Druzhba system — Reuters, 2026 — never loaded onto a tanker) and Uzbekistan/Kyrgyzstan (landlocked neighbours reached overland; unsourced but structural, and both are small BACI volumes). Austria, Czechia and Switzerland are deliberately not zeroed even though they too receive Kazakh-blend crude inland: theirs arrives via the TAL pipeline from Trieste, fed by CPC-blend crude that does sail from Novorossiysk through the Straits first. No Russia row: BACI has no port-of-loading field and cannot separate Russia's Black Sea exports (which transit) from its Baltic and Pacific exports (which do not), and the split is itself changing month to month in 2026.
  • Cut Keystone pipeline. Canada 0.14 to the US (Canada Energy Regulator: "about 14% of western Canadian crude oil exports").
  • Cut Enbridge Mainline. Canada 0.60 to the US — CER states "about 58% of all Canadian crude oil exports"; converted to a Canada→US basis using BACI's 2020 Canada-total vs. Canada→US split (the CER figure's own vintage).
  • Cut ESPO Skovorodino-Mohe spur. Russia 0.28 to China — the direct pipeline spur's design capacity (602 kb/d, GEM P5174) against BACI's Russia→China total, deliberately excluding Kozmino's seaborne ESPO Blend, which is sold FOB to Asian buyers generally and cannot be separated in BACI from other Russian crude reaching China by tanker since 2022 sanctions.
  • Cut Kirkuk-Ceyhan pipeline. Iraq exporter-wide, not an Iraq→Turkey pair: Ceyhan is a loading port and BACI records the crude's final buyer (Iraq→Turkey has no HS 2709 rows after 1998). 0.13 through 2022 (≈ 450 kb/d before Turkey stopped pumping on 25 March 2023, Reuters, against ≈ 3.5 mb/d of Iraqi exports — constant, so it overstates the 2003–2013 sabotage years and does not track the 1990s sanctions years); 0 for 2023–2025, when the line was shut, and the scenario says so instead of quoting numbers; 0.12 from 2026 (Kurdish exports restarted on 27 September 2025 at 180–190 kb/d, Al Jazeera; the federal Kirkuk line on 18 March 2026 at an initial 250 kb/d, TRT World — restart-week figures, low confidence, and no trade year we hold reaches 2026 yet). Each window is the complement of the Hormuz Iraq share for the same years.

Scenario context

The scenario panel's Context block (T3) ties live, view-only sources — IMF PortWatch chokepoint traffic, Gas storage (EU) and Recent imports (UN Comtrade) — to the active scenario's own result. Every figure is an honesty check beside a number the scenario already computed from BACI; neither is ever recomputed into exposure, and neither ever appears in the scenario CSV export (BACI/route-share derived analysis only — see Downloads).

  • Observed chokepoint traffic. Shown for the five chokepoint scenarios PortWatch observes (Hormuz, Malacca, Suez+SUMED, Bab el-Mandeb, Turkish Straits; for a combined run, each), on either commodity axis. For each, the mean tanker and all-vessel transits a day over the latest 30 days PortWatch has published, against the same 30 calendar days a year earlier (a window with fewer than 25 reported days is not compared). Source: IMF PortWatch daily chokepoint data, built from AIS by the IMF with the University of Oxford (sources: Kpler; UN Global Platform; IMF PortWatch), file chokepoint_transits.parquet, view-only. AIS-observed, so a lower bound: a ship with its transponder off is not counted, and since US and Israeli strikes on Iran began on 28 February 2026 (Congressional Research Service, R45281) many tankers in the Gulf have run dark — PortWatch shows about 1 tanker a day through Hormuz from March 2026 against about 50 a year earlier, while multi-source trackers reported about 10 vessels a day in September 2026. It is observed traffic beside a modelled closure: it never changes the exposure figures, which model a full closure on the selected year's BACI trade.
  • EU gas-storage cover. Shown only on the gas axis, only when an LNG-carrying chokepoint (Hormuz, Malacca, Suez+SUMED, Bab el-Mandeb) is active, and only for the exposed importers GIE covers with a current reading (a country whose latest published gas day is more than 30 days behind GIE's most recent global day is dropped rather than shown as if current — see below). For each, the block converts the scenario's at-risk LNG (BACI tonnes for the selected year) to energy terms — 1 Mt LNG ≈ 15.644 TWh (53.38 mmBtu/t gross calorific value, the IGU industry convention: International Gas Union, Natural Gas Conversion Guide, 2012 — matching AGSI's own gross-calorific-value basis for gasInStorage) — and shows it beside that country's latest AGSI reading: gas in storage (TWh) and fullness (%, not clamped above 100 — see Gas storage (EU)). "Days of cover" = storage TWh ÷ (at-risk TWh/year ÷ 365). This is a scale comparison, not a forecast: storage is a stock that serves all of a country's gas demand, not just the LNG that would be lost from one chokepoint, so a large days-of-cover figure (Italy's Hormuz-LNG exposure in 2024 runs to roughly 850 days) says the at-risk volume is small next to the stockpile, not that the stockpile would last that long if the route actually closed. BACI's year and AGSI's gas day are named separately because they are different dates — annual vs. daily.
  • Recent imports check. For the same scenario's top exposed importers, the block shows each country's latest-12-reported-month UN Comtrade total (Mt, its own window, completeness and >2× BACI-divergence flags — see Recent imports (UN Comtrade)) beside the BACI figure the scenario itself used. It is a recency check, never a second exposure computation: Comtrade's monthly file does carry an exporter column (partner-level detail), so a true baseline restricted to a scenario's own exporter(s) is possible in principle, but the existing loader aggregates every exporter, and this block only ever compares that importer total to BACI. China and Taiwan file no monthly reports and show as such.
  • All three blocks load lazily (only when they have something to show), are fatal: false (a failed fetch shows an inline notice, never the map's error panel), are excluded from the page's pending/data-ready signal — same as the country panel — and are hidden under ?embed=1.

Known limitations

  • Infrastructure layers are snapshots with partial or no dates; the historical map is an approximation that shows too much in early years.
  • Capacity is missing for most storage, ports, extraction sites and 70 % of refineries.
  • Scenario exposure is annual, static and first-order (see above); route shares do not vary by year.
  • BACI suppresses some flows (Iran from 2019; Russia→Belarus from 2022) and lags by about a year.
  • LNG-T3 is a partial AIS sample (22–41 % of trade).
  • Country polygons are 1:110m; small states appear in tables but not as fills.

Reproducibility

Every shipped file is built by a Python script from public inputs: uv run python -m scripts.build_all runs every transform in order (add --ingest to re-download the pinned sources first) and finishes with scripts.transform.build_catalog, which records each file's size and sha256 in public/data/catalog.json. Every source's URL and release is pinned in one module (scripts/common/sources.py); how and when each is refreshed is in docs/refresh.md. Rebuilding unchanged inputs is byte-identical, and tests/python/test_data_integrity.py fails if a shipped file drifts from its catalog entry. The browser reads the files directly (Parquet decoded in the page, plus GeoJSON sidecars); there is no server-side analytics path and no client-side call to any data provider.

Licences

The code is MIT-licensed. The data keeps its original licences; LICENSE-DATA.md sets out, source by source and in plain language, the licence, what we redistribute and in which file, the attribution line to keep, and the restrictions (it is a summary, not legal advice). In short:

  • CC BY 4.0 — Global Energy Monitor (extraction sites, pipelines, supplementary LNG terminals) and LNG-T3 (LNG terminals, voyages, daily flows). Reuse freely with the attribution line and a note of changes.
  • Public domain / attribution — NETL GOGI (basins, storage, ports, refineries) is a US Government work; NETL's data portal lists it under a Creative Commons Attribution licence, so credit NETL. Natural Earth (country polygons) is public domain.
  • ODbL (share-alike) — the 88 OpenStreetMap refineries. Shown on the map, never offered for download.
  • Energy Institute — reserves and production: quoting with attribution is welcome, extensive reproduction needs EI permission. Shown in the app only.
  • CEPII BACI — Etalab Open Licence 2.0. Our bilateral extract (trade_flow.parquet) is downloadable from /data; the full dataset is free from CEPII.
  • Basemap — OpenFreeMap tiles © OpenMapTiles, data © OpenStreetMap contributors (ODbL); credited on the map.

Downloads

The Data page offers a file only when every row in it is CC BY 4.0, public domain, or the project's own route-share table. The map reads assets.parquet, which is view-only because it includes the OpenStreetMap rows; assets_open.parquet is the downloadable asset table — every other row (GEM, LNG-T3 and NETL: extraction sites, refineries, storage, ports and LNG terminals), same columns, with a source column naming each row's origin. From the map, Share / cite exports the rows of any visible CC BY or public-domain layer (CSV or GeoJSON) and the active scenario table (CSV; derived analysis, with every input cited in the file header).

How to cite

APA

Nag, N. (2026). Global Energy Map (Version 1.1.0) [Computer software]. https://energymap.marain.space

BibTeX

@software{nag2026global,
  author  = {Nag, Narendra},
  title   = {{Global Energy Map}},
  year    = {2026},
  version = {1.1.0},
  url     = {https://energymap.marain.space}
}

To cite a specific map view, open Share / cite on the map: it adds the view URL, the access date and the as-of date of every source behind the visible layers. Cite the underlying datasets to their publishers as well — each file's source is on the Data page and in CITATION.cff (Global Energy Map 1.1.0).

Required attributions

These lines are required by the sources' licences and appear verbatim wherever their data is shown.

  • Data: UN Comtrade
  • Sources: Kpler; UN Global Platform; IMF PortWatch (portwatch.imf.org)
  • Data: GIE AGSI / ALSI
  • Data: Energy Institute Statistical Review of World Energy 2026
  • Data: Global Energy Monitor, CC BY 4.0
  • Data: NETL Global Oil & Gas Infrastructure (GOGI), US DOE
  • © OpenStreetMap contributors, ODbL
  • Data: Zhou, C. 2026, LNG-T3 (Zenodo 10.5281/zenodo.19571058), CC BY 4.0
  • Data: US Energy Information Administration (STEO); county shapes: US Census Bureau
  • Data: CEPII BACI (release V202601); cite Gaulier & Zignago (2010)
  • Basemap: OpenFreeMap © OpenMapTiles, data from OpenStreetMap contributors