The Redhead’s Buttermilk Fried Chicken.
Photo: Hannah Whitaker
There’s comfort food — all of it cozy and warming and generally terrific for making you feel better — but what’s the most comforting comfort food? Is a roast chicken better than perfect braised short ribs? Who can say for sure? Grub Street can. We’ve taken thirteen classic comfort foods and ranked them on a scale of 1 to 5 according to four factors: fattiness (self-explanatory), carb appeal (ditto), homeyness (did you grow up eating it?), and warming bubble (how much does a dish’s comforting steam just totally envelop your face as you eat it?). When added together, the final tally gives a dish its official Grub Street Comfort Food Index Number (CFIN). Read on to see how everything measures up.
13. Cassoulet Fattiness: 3; Carb Appeal: 1; Homeyness: 0; Warming Bubble: 3 (7) Why: This super-rich dish ranked surprisingly low on the scale. It’s because it’s a little too fancy; true comfort food is so lowbrow that it’s socially acceptable to lick the plate. Where to Eat It: Pot of Slow-Cooked Duck, Pork, and Beans at Buvette; Kassulet Toulousain de la Maison at La Sirene; Brasserie Les Halles
12. Meatballs Fattiness: 2; Carb Appeal: 0; Homeyness: 5; Warming Bubble: 1 (8) Why: Meatballs are hearty and filling, causing the best kind of food belly. Top with pasta and creamy sauce to up the CFIN score. Where To Eat It: Lamb Barbacoa Meatballs with Drunken Risotto, Picholine Olives, and Cucumber at Empellon Cocina; Lamb Meatballs with Mint Yogurt (Albondiga) at La Vara; anything and everything at the Meatball Shop
12. Meatballs Fattiness: 2; Carb Appeal: 0; Homeyness: 5; Warming Bubble: 1 (8) Why: Meatballs are hearty and filling, causing the best kind of food belly. Top with pasta and creamy sauce to up the CFIN score. Where To Eat It: Lamb Barbacoa Meatballs with Drunken Risotto, Picholine Olives, and Cucumber at Empellon Cocina; Lamb Meatballs with Mint Yogurt (Albondiga) at La Vara; anything and everything at the Meatball Shop
The Offerings at The Meatball ShopPhoto: Hannah Whitaker
11. Meatloaf Fattiness: 3; Carb Appeal: 2; Homeyness: 4; Warming Bubble: 0 (9) Why: It’s a shame that a food that includes ground beef, onions, egg, milk, and bread gets such a bad rap. Sure, it’s homely as well as homey, but this isn’t a beauty contest. Where To Eat It: Meatloaf BBQ Sandwich at Ted & Honey; Meatloaf with Mashed Potatoes & Gravy at Bubby’s; Iris Café
10. Chicken Soup Fattiness: 0; Carb Appeal: 1; Homeyness: 5; Warming Bubble: 4 (10) Why: The flu remedy is light on the stomach, but it makes you feel wholesome and strong — chicken soup for the seasonally affective disordered soul. Where to Eat It: Chicken Soup With Farro and Dumplings at Hearth; Estelle’s Chicken Soup at Fred’s at Barneys New Year; Chicken Soup With Matzo Ball at Mile End
10. Chicken Soup Fattiness: 0; Carb Appeal: 1; Homeyness: 5; Warming Bubble: 4 (10) Why: The flu remedy is light on the stomach, but it makes you feel wholesome and strong — chicken soup for the seasonally affective disordered soul. Where to Eat It: Chicken Soup With Farro and Dumplings at Hearth; Estelle’s Chicken Soup at Fred’s at Barneys New Year; Chicken Soup With Matzo Ball at Mile End
Chicken Soup at Fred’sPhoto: Hannah Whitaker/New York Magazine
9. Braised Short Ribs Fattiness: 4; Carb Appeal: 1; Homeyness: 1; Warming Bubble: 5 (11) Why: A stick-to-your-bones winter dish that, if done properly, causes cold-fighting meat sweats. Where to Eat It: Slow-Roasted Short Ribs at Il Buco Alimentari; Braised Short Ribs With Gruyère, Baguette, and French Onion Broth at Jeffrey’s Grocery; Braised Short Ribs With Roasted Root Vegetables and Potato Purée at Gotham Bar and Grill
8. Roast Chicken Fattiness: 2; Carb Appeal: 1; Homeyness: 5; Warming Bubble: 4 (12) Why: Best prepared laden with butter, this old favorite smells as good as it tastes. If eaten at home, it can substitute for a space heater. Where to Eat It: Crispy Roast Chicken With Stuffed Cabbage and Carrots at Calliope; Whole-Roasted Chicken With Foie Gras, Black Truffle, and Brioche at the NoMad; Cast-Iron Chicken at Vinegar Hill House
8. Roast Chicken Fattiness: 2; Carb Appeal: 1; Homeyness: 5; Warming Bubble: 4 (12) Why: Best prepared laden with butter, this old favorite smells as good as it tastes. If eaten at home, it can substitute for a space heater. Where to Eat It: Crispy Roast Chicken With Stuffed Cabbage and Carrots at Calliope; Whole-Roasted Chicken With Foie Gras, Black Truffle, and Brioche at the NoMad; Cast-Iron Chicken at Vinegar Hill House
Cast-Iron Chicken at Vinegar Hill HousePhoto: Vinegar Hill House
7. Grilled Cheese Fattiness: 3; Carb Appeal: 4; Homeyness: 5; Warming Bubble: 1 (13) Why: Whether it’s fancy with foie or made out of good ol’ American, melted cheese between buttered bread works to fight both the cold and hangovers. Where to Eat It: Foie Gras and Smoked Cheddar Grilled Cheese at Chez Sardine; Grilled Kimcheese at Porsena Extra Bar; the Maefred With Double-Cream Brie at Noorman’s Kil
7. Grilled Cheese Fattiness: 3; Carb Appeal: 4; Homeyness: 5; Warming Bubble: 1 (13) Why: Whether it’s fancy with foie or made out of good ol’ American, melted cheese between buttered bread works to fight both the cold and hangovers. Where to Eat It: Foie Gras and Smoked Cheddar Grilled Cheese at Chez Sardine; Grilled Kimcheese at Porsena Extra Bar; the Maefred With Double-Cream Brie at Noorman’s Kil
Grilled Kimcheese at Porsena Extra BarPhoto: Celeste Sloman/New York Magazine
6. Shrimp and Grits Fattiness: 4; Carb Appeal: 3; Homeyness: 4; Warming Bubble: 3 (14) Why: This Southern staple is packed with cheese, cream, and butter (win), but the real selling point is that it can be eaten with a spoon. Or slurped. Where to Eat It: Char No. 4; Peels; the Brindle Room
5. Fried Chicken Fattiness: 4; Carb Appeal: 4; Homeyness: 4; Warming Bubble: 3 (15) Why: Deep-fried meat is one of life’s simple pleasures. It’s especially good when dipped in honey during the chilly winter months. Where to Eat It: The Redhead; Blue Ribbon Bakery Kitchen; Dirty Bird to Go
4. Macaroni and Cheese Fattiness: 4; Carb Appeal: 4; Homeyness: 5; Warming Bubble: 3 (16) Why: Kraft macaroni and cheese is all well and good, but the best, most comforting options are made from scratch. Where to Eat It: Smoky macaroni and cheese with optional bacon at Westville; Blue Smoke; Queens Kickshaw (a “Best of New York 2012” favorite)
4. Macaroni and Cheese Fattiness: 4; Carb Appeal: 4; Homeyness: 5; Warming Bubble: 3 (16) Why: Kraft macaroni and cheese is all well and good, but the best, most comforting options are made from scratch. Where to Eat It: Smoky macaroni and cheese with optional bacon at Westville; Blue Smoke; Queens Kickshaw (a “Best of New York 2012” favorite)
Mac ‘n’ cheese at Blue SmokePhoto: William Brinson
3. Lasagne Fattiness: 4; Carb Appeal: 5; Homeyness: 5; Warming Bubble: 3 (17) Why: It’s a slam dunk when meat, cheese, tomato sauce, and multiple sheets of pasta are packed into one family-style dish. Add rich béchamel for extra points. Where to Eat It: Porsena; Hundred-Layer Lasagna at Del Posto; Lasagna at Nicoletta*
3. Lasagne Fattiness: 4; Carb Appeal: 5; Homeyness: 5; Warming Bubble: 3 (17) Why: It’s a slam dunk when meat, cheese, tomato sauce, and multiple sheets of pasta are packed into one family-style dish. Add rich béchamel for extra points. Where to Eat It: Porsena; Hundred-Layer Lasagna at Del Posto; Lasagna at Nicoletta*
Lasagne at Del PostoPhoto: Hannah Whitaker/New York Magazine
2. Potpie Fattiness: 5; Carb Appeal: 3; Homeyness: 5; Warming Bubble: 5 (18) Why: If anyone knows what to eat when the weather is shitty, it’s the Brits, who more or less invented the idea of putting meat in puff pastry. Where to Eat It: Shepherds Pie at the Fat Radish; Steak and Guinness Pie at Tea & Sympathy; Lobster Thermidor Potpie at Maloney & Porcelli
1. Ramen Fattiness: 5; Carb Appeal: 5; Homeyness: 4; Warming Bubble: 5 (19) Why: A sizzling bowl of noodles filled with pork belly, and if you’re lucky, an extra-runny poached egg. There’s a reason why people endure two-hour waits at Ipuddo in the heart of winter. Where to Eat It: Akamaru Modern Ramen at Ippudo; Shoyu Ramen at Jin Ramen; Momofuku Ramen at Momofuku Noodle Bar
1. Ramen Fattiness: 5; Carb Appeal: 5; Homeyness: 4; Warming Bubble: 5 (19) Why: A sizzling bowl of noodles filled with pork belly, and if you’re lucky, an extra-runny poached egg. There’s a reason why people endure two-hour waits at Ipuddo in the heart of winter. Where to Eat It: Akamaru Modern Ramen at Ippudo; Shoyu Ramen at Jin Ramen; Momofuku Ramen at Momofuku Noodle Bar
Ramen at IpuddoPhoto: Hannah Whitaker/New York Magazine
*This post inadvertently included Insieme, which is now closed (its lasagna was pretty killer, though).
`;
// 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()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(12),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(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 o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.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"),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,"12":12,"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();
// ]]