A barrage of rockets struck residential blocks and an open-air market in the eastern outskirts of Mariupol in the early hours of Saturday morning, reportedly killing at least 27 people and injuring more than 90 others. The attack is the first in months on the strategically important port city, and yet another sign that all-out war has returned to Ukraine's troubled east.
Video footage of the aftermath of the assault shows bodies sprawled in street next to burned-out cars and still-smoking buildings with shattered windows. In the hours after the attack, locals told VICE News that electricity and phone service was out in several districts.
"There were massive explosions and my windows trembled as never before," 54-year-old Sergey, who lives less than two kilometers from where the rockets hit, told VICE News by telephone. "When it was quiet I came outside and saw black smoke rising to the east. There have been another two rounds this afternoon, but much further away."
The attack on Mariupol, a city of nearly 500,000 people, came just hours after Alexander Zakharchenko, the prime minister of the so-called "Donetsk People's Republic," warned that rebel forces were preparing a new multi-pronged offensive.
"First we will take Sloviansk and then Mariupol. We will fight until we reach the Donetsk border," he told a crowd of hundreds of students gathered Friday afternoon at the city's university. "Kiev does not seem to understand we can fight them on three fronts."
The latest assault appears to have scuttled any hope of reviving the defunct peace deal reached in September in Minsk, Belarus. Speaking Saturday afternoon in Kiev, Olexander Turchynov, the Secretary of the National Security and Defense Council of Ukraine, called the attack in Mariupol a "bloody crime against humanity," and laid the blame at Russia's door. "This act was committed by terrorists under the control of the Russian military and was a direct result of Putin's goals," he said.
Mariupol's city council urged residents Saturday not to panic and offered reassurances that Ukrainian forces were holding their positions. "All units are fully battle-ready. Security measures in the city have been strengthened," a statement on the council's website said. Ukrainian media outlets reported Friday that the army had completed work on a 250 mile-long trench equipped with artillery to reinforce the eastern edge of the city.
Lying on the Azov coast, Mariupol is the largest city on the route between rebel-held territory and the Crimean peninsula annexed by Russia in March. Last August, separatist forces pushed a new front along Ukraine's southeast border with Russia stretching down to Novoazovsk, but suddenly halted the rapid summer offensive just short of Mariupol.
Now, in a further sign that the push to open a corridor may be back on, Crimean politician and alleged Russian intelligence agent Rustam Temirgaliev wrote a goading celebratory post about the attack on his Facebook page, suggesting that Donetsk People's Republic forces were on their way. "The liberation of Mariupol has begun. The Ukrainian army is retreating. It is 280 kilometers [173 miles] to Crimea," he wrote.
Clashes have reignited all along Ukraine's eastern front over the last week. According to the latest United Nations stats, the uptick in violence has killed 262 in nine days alone, pushing the conflict's overall death toll above 5,000.
Earlier this week, Ukrainian forces were forced to retreat from Donetsk airport after suffering heavy losses. Fierce fighting has raged for months at the airport. Speaking to security officials in Kiev after the withdrawal, Ukrainian President Petro Poroshenko blamed separatists for not keeping a September ceasefire, but also said it was time to fight back.
"If the enemy does not want to stop the suffering of innocent people in Ukrainian towns and villages, we will give it to them in the teeth," Poroshenko said.
All signs, however, are that Ukraine is on the defensive rather than the offensive. Speaking Friday at the World Economic Forum in Davos, Poroshenko said government forces were coming under heavy attacks and claimed as many as 9,000 Russian troops were fighting inside Ukraine.
On Saturday, the US State Department circulated images from the Ukrainian government that purportedly show Russian military documents captured from Russian soldiers near Donetsk airport.
"The National Security and Defense Council recently reported that Ukrainian artillery destroyed a column of Russian mercenaries near Donetsk airport and detained more than 10 of them," Sheila Casey, the State Department's acting press attaché in Ukraine, said in an email to reporters. "The detained individuals had military IDs/tickets of the 'DPR' and Russian Federation as well a passport of a citizen of the Russian Federation."
Reports coming out of the government-held city of Debaltseve suggest that the town is now surrounded on three sides by separatist forces and coming under heavy bombardment from artillery and missile fire every day. Commenting on the latest offensive, Evgeniy Kryzhin, a lieutenant in the Yenakiyevo unit of a rebel fighting group called Bezler's Battalion, said it was already on its way to being "successful."
"Ukrainians are already pulling out of the villages around Debaltsevo and we expect to push our frontline forward to Artiomovsk and Dzerzhinsk any day now," he told VICE News.
Follow Harriet Salem on Twitter: @HarrietSalem