ByJoshua David Stein,
a cookbook author, critic, and journalist.Despite what his kids say, he's not a boomer.
The towering breakfast sandwich at Sunday in Brooklyn.
Photo: Bobby Doherty
In thousands of years, historians may regard modern brunch as the terminal stage of a soft civilization in decline. Now, however, there is no more important social meal, which is less about sustenance and more about making a declaration of leisure. Within brunch, of course, are many subgenres: the boozy brunch, the lox brunch, the really boozy brunch, bottomless brunch, singles brunch, Scandinavian brunch, solo brunch, guys’ brunch, girls’ brunch, all-day brunch. In the end, the ideal brunch is one that balances culinary ambition with comforting pleasure, technical dexterity with a spirit of leisure, waits that are relatively reasonable, booze that isn’t boring, and eggs in astonishing array. These are the New York City spots that do it better than anyone else.
The Absolute Best
1. Sunday in Brooklyn 348 Wythe Ave., nr. S. 2nd St., Williamsburg; 347-222-6722
Naming a brunch spot Sunday in Brooklyn is like naming an album Greatest Hits. It’s ballsy and maybe even a little too on the nose. Thankfully, the brunch pleasure dome on Wythe Avenue delivers. Spanning three stories and serving 400 people on Sundays, chef Jamie Young slings cleverly fantastic brunch classics that you can’t make at home. The sausage, egg, and cheese sandwich is a wonder of both architecture and gastronomy. It’s the sausage, which is made from hog shoulder that is broken down in-house and scattered across the menu, that makes it superlative. Laced with sage (fresh and dried) and maple syrup, the meat is on just the right side of sweetness. But there are other treasures here, too. Malted pancakes, too often brunch’s great sham, are here worth the $16, if only for the hazelnut-studded maple praline syrup that tops them. Nearly everything on the menu has a touch of ambition: hot-sauce hollandaise in the steak and eggs, pastrami-spiced black cod with rye sour cream, sambal in the Bloody Mary. All of it is good. You will wait, but that wait will be rewarded.
2. Upland 345 Park Ave. S., at E. 26th St.; 212-686-1006
Chef Justin Smillie has turned Upland into an embassy of opulent-yet-chill California. Though the Roman and Williams–designed space sparkles at night, it exists in a perpetual golden state during the day. Smillie isn’t a flashy chef and his menu might make you think you could cook this stuff at home. Maybe you could, but it wouldn’t be nearly so perfect: Could you shave some bitter chocolate onto glistening grapefruit and orange slices, shimmering with olive oil? Probs. Would you? Nah. Would the eggs you poach be as perfectly yielding, quivering under a layer of Meyer-lemon hollandaise? No. Smillie’s omelettes, fortified with Bulgarian feta and spinach, are good-natured. He places smoked salmon on a pizza with tangy soft Cloumage cheese, caper berries, and sunflower seeds, and it all seems effortless. Meanwhile, one is surrounded with New Yorkers intensely and intently cultivating weekend-chill vibes while the staff, professional as ever, conduct themselves with the firm friendliness of airline stewards.
3. Prune 54 E. 1st St., nr. First Ave.; 212-677-6221
Prune is famously crowded, and has fewer than two dozen tables. It’s made bearable, though, by the staff, which can cross over from being professional into next-level hospitable (after being married at City Hall, my wife and I showed up with a small party of nine, unannounced; the GM pushed together a few tables, a manager actually ran to get us a cake at a nearby bakery, and we were eating the restaurant’s fluffy Dutch pancake with blueberries an hour after we arrived). The Bloody Mary list is famously exhaustive. There is Champagne. Opened in 1999, Prune is still a plum spot for that pancake, plates of smoked fish, slab-like Monte Cristo sandwiches and enough eggs (scrambled, coddled, ranchero’d) to last a lifetime.
In 2014, Australian cafés invaded New York City. No blood was shed nor coffee spilled. Indeed, New Yorkers became, on the whole, perkier, friendlier, and even more caffeinated. Brunch also got better. No place better balances a laid-back vibe, airy disposition, Instagram friendliness, and serious cooking as Two Hands Restaurant & Bar, the Tribeca restaurant that is the larger, younger sibling to a Nolita café. The feel-good brunch is largely about virtue: a breakfast bowl with acai, granola, and blueberries; a bowl of Brassicas including charred broccolini, kale, and brussels sprouts, a top-heavy avo toast on sourdough with pickled shallots. Bright-green juices in Mason jars add to the air of healthfulness. But hot damn, the scrambled eggs with a tiara of watercress leaves on a slice of bread is just plain good. And the burger is, too. The ricotta pancakes, meanwhile, are topped with dollops of cashew ricotta and blackberries.
5. Paowalla 195 Spring St., at Sullivan St.; 212-235-1098
One reason the brunch canon remains so steadfastly conservative is one does not associate adventurous eating with leisure. But for those souls who awake with a taste for the unfamiliar, Floyd Cardoz’s Paowalla extrudes brunch through the Indian (specifically Goan) pantry in ways that are as enlightening and as unexpected as they are satisfying. So it is with bacon naan and bacon-cheddar kulcha. There are also traditional Indian breakfast items that are all-too-rare here, like the egg-and-cheese toast known as Egg Kejirwal. Cardoz’s own genius results in the dosa waffle — looks like a waffle, tastes like a dosa! — with sweet jaggery syrup.
This venerable establishment doesn’t serve a Bloody Mary, and on weekend mornings it can feel like you’re marooned inside a tiny, desperately crowded train terminal. But the location (the brunch-mad Upper West Side), the selection of iconic breakfast-nosh classics (the bursting bagel bins, the shimmering slabs of lox, the legions of omelettes and egg scrambles), and the timeless gestalt (we once enjoyed our sturgeon-and-lox scramble sitting next to a stone-faced Philip Roth) make everything worthwhile. — Adam Platt
Go for the wet, purist bowl of huevos rancheros, the buttery, crumbly fried johnnycakes, and Enrique Olvera’s superb lamb barbacoa tacos, which we like to wash down with the intoxicating house “Bloody Marías,” made with tequila, instead of the usual cheap vodka, and real muddled tomatoes. — A.P.
This little taste of L.A. down on eastern Canal Street is perpetually jammed during the brunch-time hours, but the purist West Coast breakfast specialties — the power bowls, the egg tacos, the excellent scrambled-egg-and-avocado sandwich — are worth the wait. — A.P.
Estela 47 E. Houston St., nr. Mulberry St.; 212-219-7693
In our humble opinion, Ignacio Mattos’s buzzy Nolita bar and restaurant is a much more peaceful, pleasant place to dine on weekend mornings than during the raucous evening hours. Even more important, the spare, carefully edited breakfast menu is a thing of beauty. — A.P.
You can’t guzzle Bloody Marys at this classic dining counter, but the wizard cooks will whip up a serviceable eggs Benedict in about five seconds, if you ask politely. No less an authority than Wylie Dufresne himself told us once that he likes to visit on weekend mornings, to listen to the vanishing short-order patois of the staff, and enjoy what he considers to be the finest glass of fresh-squeezed orange juice in New York. — A.P.
Okonomi 150 Ainslie St., nr. Lorimer St., Williamsburg; no phone
This is not your traditional Brooklyn brunch. There’s no hollandaise, the main attraction is a Japanese omelette called tamagoyaki, and there’s no bacon in sight. The Williamsburg restaurant’s set multicourse meal includes roasted local seafood like bluefish, a duo of mild pickles, and the tamagoyaki, a soothing miso soup, and austere brown rice. — Chris Crowley
Reynard 80 Wythe Avenue, at N. 11th St., Williamsburg; 718-460-8004
In the early afternoon, there’s no more agreeable place in Brooklyn than Andrew Tarlow’s dressed-down restaurant in the Wythe Hotel. The charm of the handsome room is obvious, and the food is brunchy in the right way, tweaked just enough to be interesting, and changing all the time. It doesn’t hurt that the coffee is so good, or that the brunch cocktails go well beyond the basics. — C.C.
The faux-deli setup is a little twee by downtown fresser standards, it’s true. But if you don’t feel like gobbling your Russ & Daughters bounty (the lox, the sable, the endless delicious varieties of herring) outside on the sidewalk, or in the comfort of your own home, you could do an awful lot worse. — A.P.
Shopsin’s Essex Street Market, 120 Essex St., nr. Rivington St.; no phone
Kenny Shopsin and his eclectic, voluble crew are avowed brunch haters, it’s true. But there’s no more sprawling, creative, generally delicious short-order breakfast menu in the city (or possibly the world), and as long as the great man keeps this Essex Market operation open on weekday mornings, he makes the list. — A.P.
Tom’s Restaurant 782 Washington Ave., at Sterling Pl., Prospect Heights; 718-636-9738
The home-style diner Tom’s is, really, much better than it has to be. The endearing and long-tenured Prospect Heights institution draws long lines of eager customers no matter what, and could easily coast on its reputation. Instead, the egg creams are solid, the beef sausage is crisp and juicy, and the lemon-ricotta pancakes are even fluffier than you might hope. The coffee is diner-style, and infinite, and the service is friendly, efficient, and fast but never frantic. — C.C.
Vinegar Hill House 72 Hudson Ave., nr. Water St., Vinegar Hill; 718-522-1018
This seasonally focused secluded restaurant on a quiet street near Dumbo hits all of the farm-to-table must-haves — buttery grits, an egg sandwich, Benton’s bacon — and offers an uncommonly secluded space in which to work off your hangover. — C.C.
`;
// 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(3),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(136),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,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),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(408),_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,"408":408,"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","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.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();
// ]]