91³Ô¹ÏÍø

Watch CBS News

NYC Pride March draws more than 1 million to Manhattan to express joy, love, and defiance

The grand finale of Pride Month was held Sunday in New York City, starting with a march past the Stonewall Inn, the birthplace of the gay rights movement.

The march covered 1.8 miles in Manhattan, and the sidewalks were jammed on a day that was all about joy, love, and defiance.

Rise Up: Pride in Protest  

The theme for the march this year was "Rise Up: Pride in Protest." 

Among the estimated 1 million participants was storyteller and advocate Martin Boyce, who was 21 years old when he took part in the uprisings that lit a fire for the gay liberation movement.

"I'm a Stonewall veteran," Boyce said. "It means not letting yourself down, putting your pride first. It's exhilarating because it's not dead. It's alive and it's growing. Stonewall gave us a history, a geography, a cause."

"Protest for those who are marginalized because when those who are marginalized have access, we all benefit," said Kazz Alexander, NYC Pride co-chair.

After the march, PrideFest buzzed with similar excitement into the evening. And while 2025 saw a drop In visible corporate sponsorship and corporate funding, individuals came to the rescue with some extra dollars to keep Pride alive, determined and unapologetic.  

Gov. Hochul vows to defend LGBTQ community

Mayor Eric Adams and those looking to replace him, like Democratic mayoral primary winner Zohran Mamdani, took part in the march, as did Gov. Kathy Hochul, who made the following vow:

"We will always fight back and defend this community," she said.

Participants spoke of the importance of the march, given the current state of affairs in the country.

"I know the world is going to wherever it's going. So I just wanted to come out and enjoy myself today and enjoy everybody honoring themselves," one said.

"Everyone can just be together and happy in their own safe space," another participant said.

"Definitely, the inclusivity. I think that's the best part of it. To see everybody happy and joyful just to celebrate, it's really great," another added.

"Our existence is resistance. So if we're happy, it's defiance. Just like that we're being defiant," said Jen Baquial, president of the Sirens Women's Motorcycle Club.

"I'm so grateful to be here with such an incredible group of people," LGBTQ advocate Steve Love Mendez said.

"It's my first ever New York Pride. I'm from London and I'm visiting friends and this is just truly amazing to see the queer joy and see everyone celebrating their true authentic self," Xavier Segers said.

"We have to learn how to love each other and this just shows you that you're not the only one. I love it," Melissa Shuler said.

Justin Dinks marched in the parade and then cheered from the sidelines.

"It felt like it was 1,000 degrees. If hell was hotter than this, I definitely can't take it," Justin Dinks said. "I had a great time and now I'm coming back to give that same love that people gave me to the other people."

NYPD protests one of march's policies

Police Commissioner Jessica Tisch protested the march over a policy she says discriminates against LGBTQ members of law enforcement.

She stood alongside police members who are part of the Gay Officers Action League, or GOAL, right before the march stepped off on Fifth Avenue. Heritage of Pride, which runs the event, has banned armed officers in uniforms since 2021. It said this year it only banned weapons, but Tisch said officers cannot wear uniforms without weapons.

She called the move a "PR stunt."

"At a time where our rights are so under attack, it is really unbelievable to me that Heritage of Pride has decided to exclude us in this way," Tisch said. "It's a matter of public safety and personal safety for our officers. When they put on their uniforms, they must carry their weapons with them, and I will not budge on that."

Hochul also voiced her support for the NYPD, saying officers deserve to be "seen, respected and fully included."

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });