Note: All of the protesters interviewed for this article refused to give their names out of fear for their safety.
St Petersburg, Russia – “No to war!” chanted the crowd of mostly young Russians gathered on Nevsky Prospekt, the main street in St Petersburg, on Thursday night.
In the morning, Russian President Vladimir Putin had ordered what he called a “military operation” into Ukraine after months of tensions with Kyiv and its Western allies.
In a speech before the attacks began, Putin claimed he had been left with “no other option” but to invade Ukraine because “the war machine is moving and coming close to our borders”, referring to NATO.
Russian forces attacked far beyond the conflict-ridden zones of eastern Ukraine, where Moscow-backed separatists run areas recently recognized by the Kremlin as independent, with air attacks hitting apartment blocks in Kharkiv and beyond.
By night, as Ukrainians fled to escape their country, thousands in Russia, where protests are tightly restricted, rallied in solidarity.
While East-West frictions grew over Russia’s military build-up at the Ukrainian border these past few months, dissent in the world’s largest nation was limited to a handful of one-person pickets.
Few here believed the standoff would actually lead to war.
But after Putin opened what has been described as one of Europe’s “darkest chapters” since the Second World War, dissent has sharply risen.
“I have no words, it’s just disgusting,” a young woman at the St Petersburg rally told Al Jazeera. “What is there to say? We feel powerlessness, anguish. ”
She was among thousands of Russians across several cities who took to the streets to express their outrage; hundreds were arrested.
Earlier on Thursday, dozens of journalists, reporters and media figures, mainly from independent outlets as well as the BBC, signed a petition condemning the operation in Ukraine.
And more than a hundred municipal deputies from Moscow, St Petersburg, Samara, Ryazan and other cities signed an open letter to the citizens of Russia, urging them not to take part or stay silent.
“We, the deputies elected by the people, unreservedly condemn the attack of the Russian army on Ukraine,” the letter read. “This is an unparalleled atrocity for which there is and cannot be justified.”
In St Petersburg, protesters started gathering outside the historic Gostiny Dvor shopping arcade at about 7pm local time (16:00 GMT).
The atmosphere was tense, with a few people crying against the backdrop of a heavy police presence.
One woman held up a bouquet of balloons in the colors of the Ukrainian flag.
The crowds seemed to have little confidence their rare protests would change anything, but the rallies were cathartic for some.
“At least I’m not ashamed to be here,” one man said. “I was so ashamed this morning.”
“Hope? The only hope is us. While we are here there is still hope, ”added a more optimistic attendee.
When the rally started, police were already in position, with the OMON riot squad fully kitted out with body armor, helmets and batons, standing by buses brought to take demonstrators away.
But there was no effort to cordon off the area.
Instead, a policeman with a loudspeaker walked around, warning that this was an unauthorized demonstration and that anyone attending risked arrest and prosecution.
“Ukraine is not our enemy!” the crowd chanted and clapped.
“Russia is against war!”
In a surreal scene, loud jazz music from the shopping center could occasionally be heard between the chants and shouts.
It was difficult to gauge the rally’s size, but there were at least several hundred people.
The crowd ebbed back and forth as teams of riot police periodically lunged forward and grabbed protesters, seemingly at random, dragging them into buses to be taken away.
Applause broke out as one of their own was led away, accompanied by shouts of “Shame!” and “One for all, and all for one!”
“My friend was snatched away for nothing, he was literally just standing there,” said one man. “At least it’s warmer on the bus,” he joked.
Despite the periodic arrests, the crowds grew larger as the evening went on.
At about 9pm (18:00 GMT), this reporter witnessed some people being carried away by their arms and legs. Although the police were carrying batons, this reporter did not see them being used.
“Police with the people, don’t serve the monster!” someone shouted.
“I wonder what those cosmonauts are thinking,” one girl said to herself, referring to the riot squad’s helmets.
“Why aren’t you with us? If we go to war, it’s you who’ll have to fight and die, ”a woman asked the riot officers.
By 10pm (19:00 GMT), the crowd thinned amid repeated pressure from the police, although a large group crossed an underpass and reassembled on the other side of the street.
“Putin is a killer! Putin is the shame of Russia! ” they shouted. “Ukraine! Ukraine! ”
“How long this war will go on is a lottery,” one protester grumbled. “No one can predict what this man will do next.”