Kyiv
uk ru en

About the data and method

All clear

since 02.10.2026 00:28 · all clear 1 h 32 min ago · Duration: 15 min

About the data and method

Two sources, different jobs

Nothing here is our own measurement: everything comes from two public feeds, and each answers a different question.

Kyiv Digital Open API (no key required) — the fact of an alert in the city of Kyiv and its boundaries, plus the entire history since 25 February 2022. Every count, duration and distribution on this site is built on it.

«Мапа тривог» (alerts.in.ua), built and maintained by volunteers — access by personal API token (support the project). We take from it threat types and level: ten kinds of threat against Kyiv Digital's three, plus a red or yellow level for the alert and for each threat separately. The same response covers the whole country, and that is what the Ukraine page is built from. Alert boundaries are never taken from it — otherwise the two feeds would disagree by minutes and the statistics would drift.

How durations are counted

An alert is the interval between a state=1 and the following state=0 transition. In February–March 2022 the feed contains 47 alerts with a start but no recorded all-clear: they are counted in totals but excluded from every duration figure — we do not guess when they ended. An ongoing alert counts up to the present moment.

Our alert count matches the source's own counter exactly (2,601 vs 2,601), and that is re-checked daily. The sum of durations does not: Kyiv Digital does not publish how its total_lasts_for is derived, so we compute our own and describe the method here rather than repeat a number we cannot reproduce.

Daylight saving time

The sources report local wall-clock time without an offset, so one hour each autumn is ambiguous. We take the earlier occurrence: otherwise a 38-minute alert would be recorded as 1 h 38 min.

“How much longer” on the status card

During an alert the card shows when similar alerts ended: among completed alerts of the past year that had already lasted as long as the current one, half ended within the first figure and 9 in 10 within the second. It is a conditional estimate on purpose — the longer an alert runs, the longer it usually still lasts, so the plain median would mislead. The past year rather than all history: the pattern changes from year to year. Figures are rounded to 5 minutes; with fewer than 30 similar alerts the line is hidden. It is not a forecast — leave the shelter only after the all-clear.

Nights

A night is 23:00 to 06:00 Kyiv time, labelled by its pair of dates. A quiet night had no alert at all within it, even one that started earlier. Only completed nights are counted; on clock-change nights the window is 6 or 8 hours long.

Threat types and level

Threat types are recent on both feeds. Kyiv Digital started publishing them on 07.09.2026 with three values; alerts.in.ua gives ten, including ballistic and cruise missiles, guided bombs and MiG-31K takeoffs. Neither has any history: everything before those dates carries no type at all, and we do not invent one. The breakdown therefore covers only the period since collection began, and says so on the page.

The level (red or yellow) comes from alerts.in.ua and reaches roughly a month back — that is the full depth of its history endpoint.

The map of Ukraine

The map shows the current situation only; there is no country-wide history here. A region is filled solid when the alert covers the whole region and hatched when only some districts are affected — colouring a whole region for two districts out of eight would misstate the scale. Shelling and urban-fighting alerts are listed separately and never colour the map.

District alerts are attached to their region by the text of the location_oblast field: the numeric parent id in the feed repeats the district's own id, which would produce forty "regions" out of twenty-seven.

Region outlines come from Natural Earth 10m (public domain). That dataset assigns Crimea and Sevastopol to Russia; we select regions by their ISO 3166-2 UA- codes, that is, by the internationally recognised borders.

The Kyiv close-up map

The map on the “Kyiv close-up” page is drawn from open geodata, not from a tile service: nothing about a visitor is sent anywhere. Built-up areas and the regional boundary come from Natural Earth 10m (public domain). Water, motorways, the city’s district boundaries, the district boundaries of Kyiv oblast and every label come from OpenStreetMap (© OpenStreetMap contributors, ODbL). Neighbourhood labels are ranked by population from GeoNames (CC BY 4.0).

Labels are shown in the page language where OpenStreetMap has that name. Where it does not, the Ukrainian name stays as it is: that is the local name, and inventing a translation would be worse than showing the real one.

The dashed circles are distance from the centre of Kyiv, every 10 km, and the bar at the bottom left is the scale. They exist so a marker can be read as “over the city” or “40 km out” — the channels report a place name, not a distance.

On a phone the map is a third as wide, so small labels would be unreadable rather than merely small: only the larger towns keep their names there, everything else stays a dot.

A grey marker is a target whose type the channel did not name — “Київ: ❗️ 1х Сирець”. The place is known, the type is not, and we will not fill in “drone” for it. Such a marker has the shortest life on the map, because what it really was stays unknown. Reports of targets shot down produce no marker at all.

The share of parsed messages under the feed counts only messages that name at least one place from the gazetteer. Region-wide reports such as “from Sumy region across the north of the country through Chernihiv and Kyiv regions” are left out of the denominator: they contain no point to put on the map, and counting them as “not parsed” would measure how many overview posts the channel wrote that day, not the quality of the parser.

Mentions of settlements

The Mentions page counts something else entirely: how often a settlement of Kyiv oblast is named in the posts of the volunteer channel @kyiv_nebo, read through the same public web preview, with no tokens or Bot API. These are mentions, not confirmed strikes: one event usually produces several posts, and the channel's silence is not evidence that nothing happened.

Two measures stand side by side on purpose. Mention counts are inflated by a talkative night, when a single flyover yields five posts in a row; days-mentioned shows how often a place came up at all. Settlements of the oblast and localities of Kyiv are counted separately, and the boundary is geometric — a place is “Kyiv” when it falls inside the city districts, which is why Bortnychi and Bilychi count as Kyiv while Vyshneve, right against the city, does not.

Names are resolved by rules, not by a language model, and an ambiguous single word yields nothing rather than a guess: «Димерка» alone is not turned into a village 90 km away. The raw post is shown next to every parsed place, so a parsing error stays visible.

What this page is not

The source warns that data may be delayed and the service may be temporarily unavailable. Do not rely on this page for safety decisions and do not use it for critical infrastructure: act on official alerting. This site is statistics, not a warning system.

How often it refreshes

Both feeds are polled once a minute, the overview page reloads itself every 30 seconds and the status card every 15. If a source goes quiet for more than 10 minutes, the card says there is no data instead of showing a stale state as current.