How to Assemble a Next-Level NYC Thanksgiving Spread
By
Chris Crowley ,
senior writer at Grub Street
who covers the people who work and eat in New York City’s restaurants
Save this article to read it later.
Find this story in your account’s ‘Saved for Later’ section.
You will be having seconds.
Photo: Michael Marquand/Getty Images
Cooking Thanksgiving dinner in a cramped New York apartment can be … stressful. Luckily, there’s so much world-class culinary talent in the city that there’s really no need for you to do it yourself. You can always go to a restaurant , but with New York’s embarrassment of excellent gourmet markets , you can also hand-assemble a meal of dishes that have the highest culinary pedigree available. Here, some of the finest à la carte options around town for the person who wants their Thanksgiving dinner to be as impressive as possible:
The Bird: A smoked turkey from the Meat Hook ($150 for a 10-to-12-pound bird; turkey gravy is $6)
Ordering Deadline: No set deadline, but they go fast; order online .
Side One: Traditional sourdough stuffing or red rice stuffing with dried apricots, cherries, and chile from R&D Foods ($18 each, serves four)
Ordering Deadline: Orders must be placed by November 23 and can be done by email , in person, or by phone. Delivery is also available.
Side Two: Cranberry and sour corn chow-chow from Harry & Ida’s ($9 per pint)
Ordering Deadline: Available from November 19 to 25, orders can be placed by email , over the phone, or in store.
Side Three: Root vegetable and apple gratin from the the Greene Grape ($40, serves four to six; $65 serves eight to ten)
Ordering Deadline: 9 p.m. Sunday, November 22; order online .
Side Four: Hard-cider-cheddar loaf and cranberry pecan levain from Runner & Stone ($8 each, both 16 ounces)
Ordering Deadline: 12 p.m. on November 24; orders can be placed in store or by calling 718-576-3360.
Side Five: Acorn-squash stuffed with farro and sausage from BKLYN Larder ($9)
Ordering Deadline: November 20; see the menu here and call 718-783-1250.
Dessert One: Apple custard or sweet-potato pie from Sadelle’s ($40 each, serves eight to ten)
Ordering Deadline: Available for pickup from November 23 to 25, order by email .
Dessert Two: Frangipane tart with mulled wine and poached pears from Roberta’s ($38 or $42 for gluten-free, serves eight)
Ordering Deadline: November 18; place your orders via email .
Dessert Three (Yes, you’re getting at least three desserts. It’s Thanksgiving.) : Pecan pie babka from Zucker Bakery ($15, serves eight to ten depending on how you slice)
Ordering Deadline: No deadline set, orders can be placed by email or at 646-559-8425.
What to Drink: This one’s easy: Check out New York ’s excellent guide to boozing up your holiday guests with style.
Assemble a Next-Level NYC Thanksgiving Spread
Things you buy through our links may earn Vox Media a commission.
Latest News from Grub Street
the approval matrix
12:00 p.m.
The Approval Matrix: Cuomo’s Starting to Sweat
Our guide to what’s highbrow, lowbrow, brilliant, and despicable.
the grub street diet
6:00 a.m.
Enrique Olvera Stays Hydrated With a Suero
“It’s just lime, salt, and sparkling water: a Mexican Gatorade.”
By Ben Widdicombe
the other critics
June 11, 2025
Times Restaurant Critics Finally Abandon Anonymity
Ligaya Mishan and Tejal Rao are the new co-critics.
restaurant review
June 11, 2025
Pitt’s Is Country Couture
Jeremy Salamon offers high-concept home cookin’, with pancake soufflés and green-goddess escargot.
By Matthew Schneier
openings
June 10, 2025
Ops Is Expanding to the East Village
The Bushwick favorite is heading to Manhattan, with new pizza inspired by the Midwest.
By Chris Crowley
openings
June 9, 2025
Eddie Huang Is Cooking in New York Again
The chef has a new pop-up, a new family, and a new approach to Chinese cooking.
By Tammie Teclemariam
father's day gifts
June 8, 2025
The Best Gifts for Foodie Dads
Foolproof ideas for the dad who says the quickest way to his heart is through his stomach.
the grub street diet
June 6, 2025
Erik Piepenburg Used to Man-hunt at Veselka
“The dining room isn’t as gay as when I went there in the ‘90s, but whatever.”
By Paula Aceves
1.5x speed
June 3, 2025
What Keith McNally Is Listening To
“Because this is a dangerous time in America, I gravitate to podcasts which concentrate on the lunacy of the Trump administration.”
chef shuffle
June 3, 2025
Victoria Blamey Is Heading to Il Buco
The acclaimed chef will be culinary director for Donna Lennard’s family of Italian restaurants.
openings
June 3, 2025
Dell’anima Returns to the West Village
The 2010s favorite is back where it belongs.
By Anna Hezel
where to eat
June 2, 2025
Where to Eat in June
The best restaurants for right now.
By Grub Street
the approval matrix
May 30, 2025
The Approval Matrix: Elon’s Big, Beautiful Crash
Our guide to what’s highbrow, lowbrow, brilliant, and despicable.
gifts
May 30, 2025
The Best Gifts for Beer Lovers, According to Brewers and Beer Lovers
Because you can do better than a novelty beer helmet.
the grub street diet
May 30, 2025
Restaurateur Natalie Johnson Romanticizes Sandwiches From the ’90s
“We do a seared tuna burger with wasabi-soy glaze, and it’s just what I want to be eating.”
By Alan Sytsma
announcements
May 29, 2025
Introducing Emily Gould, Dinner Party ’s New Host
Here’s what to expect from the newsletter’s next era.
restaurant review
May 29, 2025
Bánh Anh Em Makes Food With Some Tooth
The sandwiches and soups are chewy, crunchy, crispy, and crackly — usually all at once.
By Matthew Schneier
coming soon
May 28, 2025
Millions of People Watch Cugine’s Videos. Will They Eat His Chicken Cutlets?
The social-media food star is opening a café in Brooklyn. “I needed to do something new,” he says.
By Jason Diamond
comebacks
May 27, 2025
This City Is Ready for Some Fro-Yo
Pistachio drizzles top artisanal swirls while once-forgotten chains plot a return to prominence. Is the next big yogurt boom here at last?
By Rachel Sugar
the grub street diet
May 23, 2025
Erika Henningsen Hates a Book-Length Menu
“I’m talking to you, Cheesecake Factory.”
By Zach Schiffman
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()}});
}, {"1":1,"6":6,"19":19,"39":39,"45":45}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(19),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(1),appendLandingPageParams=require(144),pageUri=require(134).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()&&e.classList.add("subscribed"),auth.isMobileAppRequest()&&e.classList.add("nymag-app"),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;
}, {"1":1,"4":4,"19":19,"134":134,"144":144}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(231),_each=require(419),Fingerprint2=require(418),DS=require(417),Eventify=require(257);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();
}, {"231":231,"257":257,"417":417,"418":418,"419":419}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(128),_forEach=require(117),_isString=require(279),_intersectionWith=require(420),_isEqual=require(285),_each=require(419),_debounce=require(161),_sortBy=require(215),page=require(134),visit=require(124);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()})}}]);
}, {"117":117,"124":124,"128":128,"134":134,"161":161,"215":215,"279":279,"285":285,"419":419,"420":420}];
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("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy"}];
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();
// ]]