Ukraine has intercepted 31 missiles launched by Russia at Kyiv overnight, Ukraine’s air force said.
At least 17 people, including a child, were injured by falling debris, four of whom are in hospital, authorities said.
It is the largest Russian attack in weeks and follows a vow from Moscow for revenge over recent attacks by Ukraine on its border regions.
The attack prompted Ukraine’s President Volodymr Zelensky to renew his call for more military aid from Western allies.
The alarms first sounded at 03:00 local time with a warning of a ballistic missile threat. The first explosions were heard two hours later.
Debris fell in the Podilsky, Shevchenkivskyi and Sviatoshyn districts, causing fires on the roofs of a power transformer, several residential buildings and cars, the head of the city military administration Serhiy Popko said on Telegram.
“As a result of successful combat operations, all enemy missiles were shot down over Kyiv and on the approaches to the capital,” Mr Popko posted on Telegram.
At this stage, it is not clear what Russia was targeting.
In one residential district of Kyiv, Lukyanivka, the attack left a large, round crater in the street. The blast, and the shockwave, had smashed windows and damaged buildings all around.