In the indelible words of Jasmine Masters: “I’m here! We made it bitches!” Yes, it’s the finale of RuPaul’s Drag Race season 15, and we have a newly crowned queen. Congrats to Sasha Colby!
Sasha winning is the only right decision. She killed the competition, she’s a legend, and she represents hope for those at home. Also, we haven’t had a winner with Sasha’s level of notoriety and respect since maybe Bianca. Sometimes, it’s worthwhile for this show to take a step back and allow a legitimate legend within the drag scene to have her moment. It’s a reminder that Drag Race is not solely about drag, and part of the show’s legacy is the importance of our queer elders. Sasha’s only 38, but Drag Race has skewed increasingly young in its casting over the past two years, and I think it was high time that the show reminded viewers of what an icon is.
But how did we arrive at this moment? Well, they started off the episode with their typical parade of eliminees, who showed what they could do with a heightened budget. My favorite, for perhaps the first time ever on the runway, is Salina EsTitties — so proud of you, girl! My least favorite (and this feels a little like punching down, my apologies) was Amethyst, whose 2000s pop star drag still doesn’t feel fully formed. While we’re critiquing, it’s worth noting Malaysia’s nude illusion was not doing its job. Drag queens and bad nude illusion, some things never change. The top four all look appropriately gorgeous; congrats to them. Anetra is probably my least favorite of the group, but it’s still a well-conceived, very Anetra outfit. I just happen to be allergic to those contacts. Luxx is in baby pink and, like she often does, elevates the outfit by being absolutely stunning. Mistress’s shimmery coral is probably the best gown we’ve seen this season, and we’ve seen a lot of gowns. I’m not prone to loving My Fair Lady drag, but even I can admit that Sasha looks fantastic. Plus, she gets the best intro line: “Welcome to her meet and greet.” Who wouldn’t want to be introduced that way?
Then we get to see Ru perform, which I’m never against. The bitch is 62 and in heels. Let her do her little “strut then step-touch” if she wants to! What I am against is this gown, which is ugly.
Ru then nods to the political unrest surrounding drag, shouting out gay bars in states where anti-drag and anti-trans bills are being passed and urging folks at home to donate to the ACLU Drag Defense Fund.
It’s then announced that the format is doing individual numbers written for each queen before a final two are chosen. I think that’s a cute option and no less fair than anything else they could do. The numbers are always of vastly different qualities, but this show is never fair. This is the most entertaining option possible (barring Sasha Velour), so I support it. The final two will then compete in one final reveal-off, I mean lip sync, which means that Luxx and Mistress have got to know that if Sasha or Anetra makes it into the final two, they’ll be hard to beat. *Cue ominous music*
Anetra is up first, and, I’ll be honest, I don’t love it. The song is called “Lotus,” and it mostly just sounds like a Christina Aguilera B-side. If you’re going to write a song for a drag queen, make it a drag queen song. Her talent show number is iconic and shows that she can do something that is both fierce and funny. “Lotus” is neither. If you’re just going to replicate the sound of basic pop music, you might as well just let Anetra perform to a better pop song. Also, we know this girl is only okay at picking up choreo, but she’s world-class when she is just performing on her own. This type of number, with all the dancers and choreography, doesn’t play to her strengths. If we’re going to do numbers written for the queens, I don’t just want nods to their heritage and stories; I want numbers that cater to them as performers. I’ll watch Anetra’s talent show performance approximately 1,000 more times before I die. I can’t imagine I’ll watch this again.
Luxx’s number is a bit more to my taste. It’s appropriately titled “It’s Giving Fashion,” which is adorable and spot-on for our resident high-fashion-inspired girl of the season. Luxx is a queen who comes alive when given choreography, and the campier nature of the number helps her punch through more than Anetra could. “Thread count. Hemlines. Pain. It’s giving fashion,” is probably the line of the night, and she lip-syncs it with aplomb. Her look is cute enough, even if I’m not obsessed with the wig. Good work, Luxx.
We then get a tribute to Bob Mackie, who was the very first guest judge on Drag Race, and who wins the brand new “Giving Us Life-time Achievement Award.” Cute! Next season I hope it goes to Meryl Streep.
Mistress Isabelle Brooks is the next performer, and she has the biggest handicap going in since she is by far the worst of the group at picking up choreo. The number is “Delusion,” and it’s very cute and campy, but there’s only so much excitement you can muster in an arena when your limit is walking and clapping. The most exciting moment is when the dancers pick her up in the splits, but Mistress will never win a choreography competition against these girls. Her attitude mostly makes up for it, but it’s notable how much more fun Mistress is when doing other types of challenges than this — especially when it’s been choreo and lip-syncing for two weeks in a row now.
But Sasha Colby is so unequivocally the best of the night — it isn’t even funny. Her number is, appropriately, called “Goddess,” and anyone who’s seen Sasha’s 2012 Miss Continental talent number knows that this is a queen who knows how to perform. Her song is the best of the night, but she also performs it with such ferocity that her star quality is undeniable. When she stops lip-syncing for a second and just does a snake tongue? Gag. Her choreography is the hardest, her song is the best, and she looks like a Goddamn star. Nobody is doing it like Sasha Colby.
Next, Sasha and Anetra are announced as the final two. If it feels a little pre-ordained, so be it. Those two have captured the hearts of the most viewers, and they’re both superstar performers. It doesn’t hurt that, like Brooke v. Yvie four seasons ago, the possibility of a second round of these two lip-syncing against each other is definitely the most tantalizing prospect. If we were being completely fair, I might have put Luxx there over Anetra, solely based on the numbers. But this isn’t a show about fairness, and both are great picks. Not mad at it!
Next, we get a pro-drag statement from across America. It’s overall cute, but, c’mon guys, you have to know that “Queer people are your police officers” is not the move. This show loves to invoke Stonewall, but I think it’s worth asking if the show actually endorses the kind of revolutionary politics that Stonewall represents.
We then get a performance of a song from Wigloose led by Leland and Orville Peck. I am loath to use the word “cringe” because it is clearly a moment coming from a good place. So I will instead move on!
Then comes the awarding of Miss Congeniality, as presented by Kornbread, who won last year, and who raps about each of the queens while dressed as a lion. No notes. The winner is Malaysia Babydoll Foxx. Only on this show could a queen go through Metal-gate, and then all the pouting that occurred after Metal-gate, and still have her Miss Congeniality win make sense. Again, no notes.
Future Dr. Who star and Queen of all Queens Jinkx Monsoon then performs “When You’re Good to Mama” from Chicago. Her incredibly successful run in Chicago is something that absolutely should be celebrated, and I’m thrilled that the show is immortalizing her in this way. It’s a testament to the kind of career highs these queens have reached due to this show, claiming their rightful place among the most talented in our culture.
Finally, Anetra and Sasha square off in the final lip sync of the season. The song is “Knock on Wood” by Amii Stewart, which first appeared when Alexis Mateo and Stacy Layne Matthews faced off to it in season three. Here, it’s taken to its maximalist conclusion, with both queens producing reveals and giving it their all. Is it quite as good as their “In Love with a Monster” lip sync from earlier in the season? Not quite, but the sequel’s never better than the original. Anetra serves, as she always does, with a heart on her body suit that reveals into a bola, which she swings around the stage with abandon. Sasha has two costume reveals before ultimately ending up basically naked, as is the Sasha way. It’s the best final two lip sync since season 11, making the final decision all the more impactful.
And ultimately … it goes to Sasha! As I said above, I think it went to the right queen, with the added bonus that she edged out Anetra in the final lip sync. Overall, she’s an absolutely fantastic addition to the Drag Race pantheon, and, more than that, it’s an honor to have her included in the legacy of the show.
And also on Untucked…
• Didn’t write up the Reunion last week, so here’s my review in a nutshell: It was a perfectly fine way to spend an hour of my time.
• Looking back, I’d probably give the season around three stars? While it was never one of my favorites, there were some breathtaking moments and legitimate drama. Honestly, I have high hopes for next season because I think the consistent eliminations are the start of a good trend, and I’m hoping the editing serves the story better moving forward.
• My favorite look of the season: Luxx’s House of Fashion garment.
• Best lip sync: Anetra v. Marcia, obviously.
• Funniest queen: In challenges, Loosey. In the Werk Room, Mistress.
• Biggest single showing of CharismaUniquenessNerveTalent: Honestly, maybe I’m just riding this high, but I’ll go for Sasha’s finale number. It was the good shit!
• And that’s all for my Rucaps of season 15 of Drag Race! I’ve had a great time, and I hope you all did too. Always be on the lookout for me taking Drag Race far too seriously across all of Vulture. It’s my favorite thing to do.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"3":3,"6":6,"17":17,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(17),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(3),appendLandingPageParams=require(135),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let i=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||i.classList.remove("open")})}function gtmSendReport(e,n,t){let i={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(i.eventLabel=n.href),gtm.reportNow(i)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const i=t.split("?"),o=new URLSearchParams(i[1]);for(let e of n.entries())o.set(e[0],e[1]);t=`${i[0]}?${o.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),(auth.isSubscriber()||auth.isMobileAppRequest())&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"3":3,"4":4,"17":17,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(406),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"406":406,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]