91³Ô¹ÏÍø

Watch CBS News

NYC Mayor Mamdani's wife Rama Duwaji apologizes for 'harmful' social media posts she made as a teen

Rama Duwaji, the wife of New York City Mayor Zohran Mamdani, has apologized for "harmful" social media posts she made as a teenager, responding publicly after a conservative news outlet combed through her online profiles and resurfaced material, including a post in which she used an anti-gay slur.

In an interview with the arts website Hyperallergic, Duwaji, an illustrator, said she felt "a lot of shame being confronted with language I used that is so harmful to others," adding "being 15 doesn't excuse it."

"I've read and seen a lot of what others have had to say in response, and I understand the hurt I caused and am truly sorry," she said in the , published Wednesday, in response to a question about adjusting to life as a public figure.

Duwaji did not specify which comments she was referring to, nor did she address other, more recent social media activity regarding Israel that has attracted heavy scrutiny as Mamdani tries to ease concerns among some in the city's Jewish community over his own criticism of Israel's treatment of Palestinians.

Last month, The Washington Free Beacon reported on years of Duwaji's online activity across a handful of social media platforms, finding she had shared posts praising female Palestinian militants who participated in plane hijackings and bombings in the 1960s and early 1970s. In 2015, she shared a post in which someone else wrote that Tel Aviv was occupying Palestinian land and "shouldn't exist."

Duwaji also once used a racial slur for Black people while affectionately addressing a friend and used an abbreviated slur for gay people in 2013.

The mayor has previously said his wife is a "private person" who does not hold a formal position in City Hall. Asked Thursday about which specific posts his wife regretted, Mamdani demurred.

"She shared some of her reflections in this interview. I won't add much to them, what I will say, however, is that she is someone of incredible integrity," Mamdani told reporters.

He added that questions about Duwaji's social media activity were "part and parcel" of his own choice to run for mayor, "a decision that has ramifications for those that I love."

Separately, Duwaji has also come under criticism for liking an Instagram post that appeared to cheer Hamas' Oct. 7, 2023 surprise attack on Israel. The Free Beacon has also reported that Duwaji provided an illustration for an essay by an author who described the Oct. 7 attack as "spectacular" and had called Jewish Israelis "rootless soulless ghouls."

Mamdani has previously said his wife had been commissioned to illustrate an excerpt of a book by a third party, and said she had never engaged or met with the author, and that Duwaji had not seen the author's previous comments. He called the author's rhetoric "patently unacceptable" and "reprehensible."

___

AP writer Jake Offenhartz contributed

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(); } }); }); }); });