In a display of Russian might, he sailed on a cutter to review flag-bedecked warships anchored in the bay, greeting the sailors of Russia's Black Sea fleet with a "hello, comrades". After the review, thousands thronged the shore to watch a fly-past of 70 military aircraft including helicopters, MiG fighters and Bear nuclear bombers, to mark 70 years since the city was liberated from German forces in May 1944.
Crowds shouted "Russia!" and "Thank you!" as Putin took to the stage and praised Crimeans for "fidelity to historic justice".
Fighting in Mariupol appeared to have started after rebels seized control of police headquarters after the parade. Interior Ministry troops surrounded the building and opened fire with machineguns mounted on BMP armoured combat vehicles.
The bloodshed was in stark contrast to the scenes in Sevastopol, where military parades doubled as a victory march for the soldiers and civilian irregulars who helped Russia to seize and annex the peninsula.
Usually, Russian and Ukrainian forces march side by side on May 9 in Sevastopol, the descendants of regiments who fought to defend the city from the Nazi onslaught in 1941.
Instead, veterans of WWII and the Soviet war in Afghanistan were joined by those who took part in the seizure and annexation of Crimea in March. Many of the soldiers sported newly minted medals with a yellow and white ribbon - the campaign medal for the "liberation of Crimea".
The Ukrainian Foreign Ministry issued a formal protest the "unauthorised visit" to Crimea by the Russian head of state.
"This provocation once again confirms that Russia deliberately seeks further escalation of tensions," the Ministry said, calling the visit a "flagrant violation of Ukraine's sovereignty".