Crimea Is
Ukraine

How do maps, data libraries, streaming platforms, travel services, and internet infrastructure classify Crimea? We audited 121 digital platforms across 12 categories.

Crimea is internationally recognized as Ukrainian territory (UN GA Resolution 68/262, 100-11 vote). We found that a single upstream geographic dataset assigns SOVEREIGNT=Russia to Crimea, cascading to 30 million weekly npm downloads across D3, Plotly, Leaflet, and ECharts.

180
Platforms Audited
47
Correct (Ukraine)
21
Incorrect (Russia)
75
Ambiguous
29
Blocked
Sovereignty Classification Results
180
platforms
Correct Incorrect Ambiguous Blocked

Sovereignty Classification Results by Category

Data Visualization Libraries
18
Open Source Geographic Data
13
Map Services
18
Tech Infrastructure & Streaming
46
Weather Services
12
Reference & News Media
31
Travel & Booking Platforms
11
IP Geolocation
5
Social Media
11
Gaming Platforms
4
Search Engines
6
Sports Organizations
5
Correct Incorrect Ambiguous

The Root Cause: One Dataset, Millions of Wrong Maps

Natural Earth — the foundational geographic dataset — explicitly assigns SOVEREIGNT=Russia to Crimea. This single upstream decision silently propagates through the entire open source ecosystem.

33 open GitHub issues demand the change. All ignored.

Only Highcharts deliberately overrides the default to correctly show Ukraine.

Weekly npm Downloads
d3-geo 13.4M/wk
Leaflet 4.2M/wk
topojson-client 3.8M/wk
ECharts 2.3M/wk
Highcharts 2.3M/wk — Correct!
Plotly.js 965K/wk
Total affected: 30.4M weekly downloads

The 2022 Bifurcation

After Russia's full-scale invasion, consumer platforms changed. Developer infrastructure did not.

Changed After 2022

  • Apple Maps — Crimea as Ukraine (outside Russia)
  • GeoPandas — Fixed in v0.12.2 (PR #2670)
  • TikTok — Separated Ukraine from Russia region
  • Booking.com, Airbnb, Netflix, Spotify — Exited Russia

Still Unchanged (2026)

  • Natural Earth — SOVEREIGNT=Russia (33 open issues)
  • Google Maps — "Disputed" dashed border since 2014
  • IANA tzdata — RU,UA (Russia listed first)
  • Plotly, D3, Cartopy, rnaturalearth — Inherit NE
  • Instagram — Dual "Crimea, Ukraine" AND "Russia, Crimea"

The Infrastructure Stack

Occupied territory has a split digital identity: legally Ukrainian, operationally Russian.

Layer Legal Basis → Ukraine Operational → Russia
IP Geolocation MaxMind, GeoNames (UA) Post-2014 RU ISPs → RU
CDN Routing Cloudflare: UA-43 (~20% of web)
Geocoding OSM Nominatim: all cities UA
DNS / TLD .crimea.ua active .crimea.ru doesn’t exist
Timezones zone.tab: UA only zone1970.tab: RU,UA; UTC+3
Phone Numbers libphonenumber: +7-365/978 = RU
Postal Codes Russian Post: 295xxx = RU

The Gold Standard: Weather Services

If every weather app can get it right, so can everyone else. All 10 correctly classify Simferopol as Ukraine.

AccuWeather
Weather Underground
TimeAndDate
Weather Spark
Meteoblue
Ventusky
Weather Atlas
Weather-Forecast
BBC Weather
weather.com

All Findings (180)

Data Visualization Libraries (18)

Status Platform
Highcharts Maps (Russia map)
Highcharts Maps (Ukraine map)
GeoPandas (naturalearth_lowres)
D3 world-atlas (110m)
D3 world-atlas (50m)
Cartopy (SciTools)
rnaturalearth (R package)
spData (R, 'Geocomputation with R')
⚠️ Plotly
⚠️ npm: world-atlas (dependents)
⚠️ npm: topojson-client (dependents)
⚠️ npm: plotly.js (dependents)
⚠️ npm: highcharts (dependents)
⚠️ npm: echarts (dependents)
⚠️ npm: d3-geo (dependents)
⚠️ npm: leaflet (dependents)
⚠️ Apache ECharts (world map, deep)
Apache ECharts (world map)

Open Source Geographic Data (13)

Status Platform
mledoze/countries (GitHub, 6.2K stars)
Natural Earth (disputed areas layer)
Natural Earth (50m countries)
Natural Earth (110m countries)
Natural Earth Propagation (aggregate)
iso3166-2-db (esosedi/3166)
mledoze/countries (area analysis)
Natural Earth (ne_110m_admin_0_countries)
Natural Earth (ne_50m_admin_0_countries)
GitHub: datasets/geo-countries
GitHub: johan/world.geo.json
npm: i18n-iso-countries
npm: country-list

Map Services (18)

Status Platform
OpenStreetMap Nominatim
Apple Maps
OSM Overpass API (admin boundaries)
Yandex Maps
⚠️ Google Maps
⚠️ Bing Maps (Microsoft)
⚠️ OpenStreetMap
⚠️ National Geographic
⚠️ HERE Maps
⚠️ Mapbox
⚠️ TomTom
⚠️ Google Maps (browser check)
⚠️ Tesla Navigation
⚠️ Waze (Google)
⚠️ Garmin
⚠️ Google Earth
⚠️ Esri / ArcGIS
⚠️ Google Business (Maps reviews)

Tech Infrastructure & Streaming (46)

Status Platform
IANA Timezone Database (zone.tab, legacy)
Google libaddressinput
OurAirports (SIP/Simferopol)
Cloudflare CDN
Domain TLD (.crimea.ua/.crimea.ru)
Vodafone Ukraine
Kyivstar
moment-timezone (npm)
libphonenumber-js (npm)
Postal code databases (Russian Post)
⚠️ IANA Timezone Database (zone1970.tab)
⚠️ Google libphonenumber
⚠️ Domain TLD (.ru/.ua)
⚠️ Akamai CDN
⚠️ Deezer
⚠️ SWIFT
⚠️ Coursera
⚠️ Duolingo
⚠️ Google Play Store
⚠️ Indeed
⚠️ Glassdoor
⚠️ NordVPN
🚫 Spotify
🚫 Netflix
🚫 Amazon Prime Video
🚫 Disney+
🚫 Apple Music
🚫 Uber
🚫 eBay
🚫 Etsy
🚫 UPS
🚫 FedEx
🚫 DHL
🚫 PayPal
🚫 Visa / Mastercard
🚫 Apple App Store
🚫 AWS (Amazon Web Services)
🚫 Microsoft Azure
🚫 Google Cloud
🚫 Uber Eats
🚫 Glovo
🚫 Binance
🚫 Coinbase
🚫 GoDaddy
🚫 Namecheap
Yelp

Weather Services (12)

Status Platform
AccuWeather
Weather Underground
TimeAndDate.com
Weather Spark
Meteoblue
Weather-Forecast.com
Ventusky
Weather Atlas
weather.com (The Weather Channel)
BBC Weather
AccuWeather (browser verified)
weather.com (browser verified)

Reference & News Media (31)

Status Platform
GeoNames
CIA World Factbook
UN M49 / UNGA Resolution 68/262
Encyclopaedia Britannica
Reuters
Associated Press (AP)
BBC News
Interpol
WHO (World Health Organization)
Lonely Planet
Rough Guides
Wikitravel
ICAO (Intl Civil Aviation Org)
IATA
Wikipedia (Ukrainian)
Wikipedia (Italian)
RT (Russia Today)
Sputnik
TeleSUR (Venezuela)
Wikipedia (Russian)
⚠️ Wikipedia (English)
⚠️ Wikipedia (German)
⚠️ Wikipedia (Spanish)
⚠️ Wikipedia (French)
⚠️ Wikidata (Q7835: Crimea)
⚠️ Al Jazeera
⚠️ CGTN (China)
⚠️ Google Scholar
⚠️ Scopus (Elsevier)
⚠️ ORCID
⚠️ ITU (International Telecommunication Union)

Travel & Booking Platforms (11)

Status Platform
Google Flights (SIP airport)
⚠️ Skyscanner
⚠️ Google Flights
⚠️ TripAdvisor
⚠️ Skyscanner (SIP airport)
⚠️ TripAdvisor (browser check)
🚫 Booking.com
🚫 Airbnb
🚫 Expedia / Hotels.com
🚫 Booking.com (browser check)
🚫 World Nomads (travel insurance)

IP Geolocation (5)

Status Platform
ipapi.co
MaxMind GeoIP2
ip-api.com
ipinfo.io
⚠️ IP Geolocation (extended, ip-api.com)

Social Media (11)

Status Platform
Instagram
⚠️ TikTok
⚠️ Facebook
⚠️ X / Twitter
⚠️ YouTube
⚠️ Tinder
⚠️ Telegram
⚠️ WhatsApp (Meta)
⚠️ Signal
⚠️ Reddit
🚫 LinkedIn

Gaming Platforms (4)

Status Platform
⚠️ Steam
⚠️ Epic Games Store
⚠️ EA Sports FC / FIFA
⚠️ Hearts of Iron IV

Search Engines (6)

Status Platform
⚠️ Google Search
⚠️ Bing Search
⚠️ DuckDuckGo
⚠️ Bing Search (knowledge panel)
⚠️ Google Search (knowledge panel)
⚠️ DuckDuckGo (info box)

Sports Organizations (5)

Status Platform
Transfermarkt
⚠️ ESPN
⚠️ FIFA / EA Sports FC
⚠️ UEFA
⚠️ Olympics / IOC

About This Research

Automated Checks

GeoJSON geometry analysis, API queries, npm/PyPI dependency analysis, GitHub issue verification, IP geolocation testing across 8 Crimean IPs.

Media & Political Analysis

2,485 GDELT articles. 7 language clusters. Named politicians with dated sovereignty endorsements across Italian, French, German contexts.

Reproducible

All scripts on GitHub. JSON + CSV datasets. Zero cloud cost.