They arrived by trains, buses and cars, carrying signs and wearing T-shirts in defiance of bigotry and hate.
"I'm Jewish and have never confronted this kind of hate," Sarah Lutz, 29, of Quincy, Mass., said as she marched in downtown Boston on Saturday. "And then to come here and see all these people supporting each other was overwhelming in the most positive kind of way."
Lutz joined tens of thousands of counter-protesters who peacefully descended on Boston Common, the nation's oldest city park, on Saturday as far-right speakers held a so-called free speech rally claiming their 1st Amendment rights to assemble and express their views.
The rallies came a week after violent clashes in Charlottesville, Va., between far-right activists — including white supremacists and neo-Nazis — and counter-protesters. One woman was killed and several injured when a white nationalist rammed his car Aug. 12 into a crowd of counter-protesters.
With the Charlottesville violence still fresh, Boston police said they took extra precautions, implementing a tight security plan to stave off any bloody battles. The plan was largely successful and there were no major incidents.
Officials deployed 500 police officers, extra security cameras and barriers to separate the opposing rallies. The city also banned participants from carrying sticks or flagpoles — which were used in the Virginia violence.
William B. Evans, Boston's police commissioner, said 27 arrests — mostly for disorderly conduct — were made on Saturday.
"Thank God nobody got hurt," Evans said during an afternoon news conference. "We didn't want what happened in Virginia here. … We didn't want that."
Earlier in the day, even as the protests were largely peaceful, tensions were running high.
Police helicopters circled overhead as officers kept the groups separated. The free speech group — about 50 in total — were dwarfed by counter-protesters associated with a "Fight White Supremacy" rally in which participants marched from Roxbury, a historically black neighborhood in Boston, to the Common. A little before 1 p.m., the free speech demonstrators were escorted from the Common by police in the opposite direction from the huge crowd of counter-protesters.
"Go home, losers," chanted the counter-protesters, many of whom carried signs with anti-racism slogans. "No Trump, no KKK, no fascist USA," read one. Another protester carried a sign with a photo of Heather Heyer, the woman killed at the Charlottesville protest. It read, "American hero."
As a group of police officers escorted what appeared to be a member of the free speech group from the park, several counter-protesters swarmed around yelling "Nazi scum" and "go home." Officers placed the man in the back of a police van and drove off to applause from the crowd.
Some of the counter-protesters claimed their message had attracted more support than the one heard at the free speech rally.
Myiesha Wilson, 28, of Boston, said she came out to show her sons, ages 5 and 8, that opponents of racism were speaking out.
"It's about Black Lives Matter. It's about everyone out here coming together, taking a stand for peace in a nonviolent way," Wilson said. Noting the thousands of counter-protesters, she added, "It's great. It's making me a little emotional."
Pat Scalon, 70, of Andover, Mass., had attended the counter-protest with about 30 members of the Massachusetts chapter of Veterans for Peace.
Scalon, a Vietnam vet, said that the group included veterans from Iraq and one man who fought in World War II. Referring to the far-right activists, he said: "These people are not going to come back because we lost too much blood over the centuries to make this country."
Organizers of the free speech rally said they don't condone racism, and some far-right speakers who attended last week's rally in Charlottesville were uninvited from the Boston event.
On Saturday afternoon, President Trump seemed to assail the counter-protesters of the free speech rally.
"Looks like many anti-police agitators in Boston. Police are looking tough and smart! Thank you," Trump said on Twitter.
Trump has faced strong pushback from Democrats, Republicans and the business community for blaming both sides for the violence in Charlottesville. (Later Saturday afternoon, Trump sent a follow-up tweet to "applaud the many protestors in Boston who are speaking out against bigotry and hate. Our country will soon come together as one!")
Demonstrations to show solidarity with the city of Charlottesville and to push back against racism were planned for Saturday in cities across the country, including New Orleans and Dallas. Authorities in both cities said they planned to deploy extra officers to maintain order.
But Boston was by far ground zero for protests on Saturday.
Far-right activist Kyle Chapman, a Bay Area resident who has developed an online following using the moniker "Based Stickman," was among those who spoke at the free speech rally. He's the founder of the Fraternal Order of Alt-Knights, a fringe right wing group that has shown up to rallies prepared to fight. Chapman, who sometimes carries a stick and shield during protests and wears a motorcycle helmet, was arrested after he clashed with protesters in Berkeley earlier this year.
"I will not stand down," said Chapman, whose speech was streamed on his Periscope account. "As long as I'm free, I will continue to show up at these rallies, and I will continue to support my right-wing brothers and sisters."
Evans, who has been police commissioner since 2014, said "99.9% of the people here were here for the right reason."
"And that's to fight bigotry and hate," he said.
Special correspondent Haller reported from Boston and Times staff writer Lee from Los Angeles.
5:15 p.m.: This article was updated with new comments from protesters.
2:55 p.m.: This article was updated with comments from the Boston police commissioner.
1:35 p.m.: This article was updated with comments on Twitter from President Trump and from Kyle Chapman, one of the rally's speakers.
11:40 a.m.: This article was updated with the rally ending peacefully and additional details.
9:55 a.m.: This article was updated with the rally beginning.