All 27 leaders have to agree to the candidacy, but the heads of the bloc's biggest members -- France, Germany and Italy -- gave full-throated support to the idea on Thursday, on a trip to a war-torn Kyiv suburb.
On Friday, the European Commission gave formal backing to the bid, and EU chief Ursula von der Leyen made her position clear by donning a striking jacket in Ukraine's national colours.
"We all know that Ukrainians are ready to die for the European perspective. We want them to live with us for the European dream," she said.
Ukraine's President Volodymyr Zelensky immediately welcomed the decision as a "first step on the EU membership path that'll certainly bring our victory closer".
He said he expected that EU leaders would give Ukraine a "positive result" at the June 23-24 summit.
Putin said Russia had "nothing against" Ukraine joining the EU, saying it was "their sovereign decision to join economic unions or not" -- unlike the security risk he sees in Kyiv joining NATO.
But he said membership of the European Union would turn Ukraine into a "semi-colony" of the West.
Russia had earlier said the West was "manipulating" Ukraine with promises of integration.
As Brussels celebrated their breakthrough, British Prime Minister Boris Johnson returned to Kyiv for his second visit since Russia's 24 February invasion.
Downing Street said Johnson offered to launch a major training operation for Ukrainian forces, to train up to 10,000 soldiers every 120 days and "change the equation of the war".
Each Ukrainian soldier would spend three weeks on the British training course, learning combat tactics, basic medical skills, cybersecurity and counter explosive tactics.
Once Ukraine joins the EU candidates' list -- alongside several countries in the western Balkans -- it could still take years to meet all the formal membership requirements, even if Kyiv prevails in the war.
"Ukraine should be welcomed as a candidate country -- this is based on the understanding that good work has been done but important work also remains to be done," von der Leyen said.
In the meantime, the fighting continued, with Russian forces bombarding pockets of Ukrainian resistance in frontline Severodonetsk, including civilians holed up in a chemical plant in the eastern Ukrainian city.
Four civilians died and six were wounded Friday in Russian bombing in the Donetsk region of the Donbas, governor Pavlo Kyrylenko said on Telegram.
Senior Ukrainian defence officials interviewed by National Defense magazine in the US gave an idea of the heavy losses their country has suffered in terms of equipment in fighting with the Russians.
"As of today, we have approximately 30 to 40, sometimes up to 50 percent of losses of equipment as a result of active combat. So, we have lost approximately 50 percent," Brig. Gen. Volodymyr Karpenko was quoted as saying.
"Approximately 1,300 infantry fighting vehicles have been lost, 400 tanks, 700 artillery systems," he said.
Moscow turned up the pressure on Western allies, sharply reducing flows of natural gas in its pipelines to western Europe, driving up energy prices.
France's network provider said it had not received any Russian gas by pipeline from Germany since 15 June, and Italy's Eni said it expected Russian firm Gazprom to cut its supplies by half on Friday.
Several European countries, including Italy and Germany, are highly reliant upon Russian gas for their energy needs.
Berlin and Rome have rejected Russia's argument that technical issues have caused the drop in supplies, arguing that state-owned Gazprom's move is political.
But western Europe is sweltering in a heatwave and energy prices are already soaring, adding to runaway inflation and industrial action in several economies.
The situation is, of course, starker in Ukraine itself, where Russian troops have occupied a swathe of the south and east of the country, including much of the Donbas region.
"The humanitarian situation across Ukraine -- particularly in the eastern Donbas -- is extremely alarming and continues to deteriorate rapidly," the UN humanitarian agency, OCHA, said.
It is "particularly worrying in and around Severodonetsk" -- where bloody battles have raged for weeks, the body said.
Severodonetsk is in the Lugansk region, where governor Sergiy Gaiday called for a ceasefire, stating hundreds of civilians were trapped in the besieged Azot chemical plant in the city.
"It is now impossible and physically dangerous to get out of the plant due to constant shelling and fighting. There are 568 people in the shelter, including 38 children," he said.
Gaiday said earlier this week that around 10,000 civilians remained in the city, which is controlled mostly by Russian forces.
At least two people were killed and 20 injured in a Russian strike on a residential area in the southern Ukrainian city of Mykolaiv, the local governor said.
Separately, Zelensky announced an end to the visa-free travel that Russian citizens, many of whom have Ukrainian relatives, have enjoyed since Ukraine became independent from the Soviet Union in 1991.