The parade marked the 74th anniversary of the defeat of Nazi Germany. It included about 13,000 servicemen and 130 pieces of military equipment, ranging from a T-34 tank — renowned for its effectiveness in World War II — to lumbering Yars intercontinental missile launch units.
For the second time in three years, the parade did not conclude with an aerial display of helicopters and warplanes speeding above the square due to heavy clouds and concerns about storms. Putin said later that he regretted the aircraft could not perform but added "there's no need to risk the safety of the pilots and the people on the ground."
Among the guests were recently resigned Kazakhstan President Nursultan Nazarbayev and Steven Seagal, the American actor who obtained Russian citizenship in 2016 and later was named a special envoy for humanitarian ties with the United States.
"We have done and will do everything necessary to ensure the high combat capability of our armed forces," Putin said in his speech. "At the same time, Russia is open for cooperation with all who are ready to resist terrorism, neo-Nazism and extremism."
In the afternoon, an estimated half a million people streamed down one of Moscow's main thoroughfares, many holding photos of relatives who fought or suffered in the war. The Soviet Union is estimated to have lost 26 million people in World War II, including 8 million soldiers.
Dozens of other Russian cities also held parades for the country's most significant secular holiday. In neighboring Ukraine, which also observes the holiday, outgoing President Petro Poroshenko struck out at Russia.
"For five years, the descendants of the glorious victors over Nazism have defended with arms the freedom of the Ukrainian people and their civilization choice from Russian aggression," Poroshenko said.
Russia annexed Crimea from Ukraine in 2014 and backs separatist rebels who have been fighting Ukrainian forces in the country's east for the past five years, a conflict that has left over 13,000 dead.
TV actor Volodymyr Zelenskiy roundly defeated Poroshenko in Ukraine's April 21 presidential runoff.
A previous version of this story corrected the day to Thursday, not Friday.