National Spotlight
Lists
A Miami steakhouse has just been named one of the best new restaurants in the world for its delicious food and atmosphere.
By Clarissa Buch Zilberman
April 25, 2025
Sunny's Steakhouse in Little River has just been named one of the best new restaurants in the world in 2025. Photo by Michael Pisarri
Audio By Carbonatix
`,`
Related
- New Miami Restaurant Wins Michelin Star: What to Know
`,`
Related
- Fort Lauderdale Upscale Restaurant Wins Michelin Star, City’s First
`,`
Related
- 4 Miami Spots Among the Best Bars in North America
`,`
Related
- Is Fort Lauderdale Set to Land its First Michelin Star Restaurant?
`,`
Related
- Miami Ranked Among Friendliest U.S. Cities. Wait. What?
`,`
Related
- 2025 Miami James Beard Award Finalists Announced
`,`
Related
- Miami Steakhouse Makes 15 Best U.S. Restaurants List
` ];
A Miami restaurant has officially gone global. Sunny's, the beloved Little River steakhouse known for its dreamy banyan tree patio and custom martinis, just landed on Condé Nast Traveler's 2025 Hot List, an annual roundup of the best new restaurants in the world. The list, which spans from Mexico City to Melbourne, highlights the year's most buzzworthy openings, and Sunny's earned its spot for turning what started as a pandemic-era pop-up into one of the most exciting places to dine in the U.S.
Kate Kassin of Condé Nast Traveler writes, "It's hard to imagine a time when Sunny's Steakhouse didn't exist in Miami. It instantly took on the air of a classic institution despite debuting in its permanent iteration in only October 2024." She goes on to write, "Whether you’re outdoors encircling the tree or inside the midcentury modern space with windows open to the courtyard, there’s not a bad seat in the house to enjoy the steakhouse-style fare and sip on a 'pick-your-path' martini. Standouts range from fluffy Parker House rolls to housemade pastas like blue crab agnolotti to wood-fired proteins like dry-aged ribeye with potato butter sauce or chimichurri."
The news comes just weeks after Food & Wine named Sunny's one of the 15 Best U.S. Restaurants of 2025 and the Michelin Guideadded it to its list of recommended Miami spots this past March.
click to enlarge
Sunny’s brought back Jaguar Sun's popular corn agnolotti with blue crab.
Photo by Cleveland Jennings
The steakhouse, which reopened in October 2024 with a permanent 220-seat layout, has drawn raves for its nostalgic-but-modern design, wood-fired proteins, and pastas that rival Miami's best. Highlights include the dry-aged ribeye served with a rich potato butter sauce, Parker House rolls that arrive warm and fluffy, and a now-iconic blue crab agnolotti that pays homage to the team's Jaguar Sun roots.There's also an extensive cocktail list with an entire section dedicated to gin and custom vodka martinis.
Inside, midcentury charm meets Florida whimsy — think elegant tablescapes, a spacious open-air courtyard, and illustrated menus. Outside, string lights wind through the towering banyan tree, creating a scene that feels part steakhouse, part fairytale.
click to enlarge
Sunny's stunning outdoor patio is a hit among critics around the world.
Photo by Jeanne Canto
Featured in the Michelin Guide in March 2025
Condé Nast's inclusion isn't Sunny's first national accolade this year. In early April, the restaurant was ranked 13th in Food & Wine's Top 15 U.S. Restaurants List of 2025. A few weeks before that,Sunny's was added to the 2025 Florida Michelin Guide. The popular steakhouse also landed in the New Times' 9 Biggest Miami Restaurant Openings of 2024 list.
Not bad for a spot that used to be just a pop-up in a parking lot.
') let lineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() if (jQuery(element).prop('tagName').match(/HIDDEN/i) !== null) { jQuery(element).children('div').last().css({ marginBottom: `${lineHeight*2}px` }); } else { jQuery(element).css({ marginTop: `${lineHeight*2}px`, marginBottom: `${lineHeight}px` }); } // const insertionBlockClass = `fdn-paragraph-insertion-block`; const styleElementHook = `fdn-paragraph-insertion-styles`; jQuery(element).addClass(insertionBlockClass); if (jQuery(`[${styleElementHook}]`).length === 0) { jQuery('div.fdn-content-body, div #storyBody').append('
') const paragraphLineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() const styleElement = jQuery(`
`); const styleText = ` div.fdn-content-body br+.${insertionBlockClass}:not([hidden]), div #storyBody br+.${insertionBlockClass}:not([hidden]) { margin-top: ${paragraphLineHeight*2}px; margin-bottom: ${paragraphLineHeight}px; } div.fdn-content-body br+.${insertionBlockClass}[hidden] > div:last-of-type, div #storyBody br+.${insertionBlockClass}[hidden] > div:last-of-type { margin-bottom: ${paragraphLineHeight*2}px; } ` styleElement.text(styleText); jQuery('head').append(styleElement); } // } } jQuery(element).insertBefore(this.paragraphEndNodes[index]); } else { console.warn('Foundation.ParagraphTool.insertElemenAt: invalid insertion index', index); } } this.insertElemenAtEnd = function (element) { if (this.paragraphEndNodes.length) { let lastNode = this.getNodeAtIndex(this.paragraphEndNodes.length -1); if (this.isDoubleBrParagraphBreak(lastNode) || this.isBrParagraphBreakBeforeBlockElement(lastNode)) { if (jQuery(element).get(0).tagName.match(/SCRIPT/i) !== null) { jQuery('
').insertAfter(this.paragraphEndNodes[index]); jQuery('
').insertAfter(this.paragraphEndNodes[index]); } else { jQuery('div.fdn-content-body, div #storyBody').append('
') let lineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() if (jQuery(element).prop('tagName').match(/HIDDEN/i) !== null) { jQuery(element).children('div').last().css({ marginBottom: `${lineHeight*2}px` }); } else { jQuery(element).css({ marginTop: `${lineHeight*2}px`, marginBottom: `${lineHeight}px` }); } } } } this.bodyContainer.append(element); } this.getNodeAtIndex = function (index) { return this.paragraphEndNodes[index]; } }
`); } var paragraphCount = myParagraphTool.getParagraphEndNodeCount(); // No need to insert if there aren't enough paragaphs if (paragraphCount >= parseInt(item.requiredCountToDisplay)) { // Matches specific paragraph insertion indexes if (item.insertPoint.match(/^\d+$/) !== null) { var insertIndex = parseInt(item.insertPoint) - 1; // Insert within content if (insertIndex < paragraphCount) { myParagraphTool.insertElemenAtIndex(componentElement, insertIndex); } // Append to the end if the insert point is beyond the paragraph count else { myParagraphTool.insertElemenAtEnd(componentElement) } } // Matches for 1/2, 1/4, 2/3, 5/6, etc else if (item.insertPoint.match(/^[1223456]\/[23456]$/) !== null) { var fractionMatch = new RegExp(/^([123456])(?:\/)([23456]$)/); var fractionPart = parseInt(item.insertPoint.match(fractionMatch)[1]); var fractionWhole = parseInt(item.insertPoint.match(fractionMatch)[2]); var fractionValue = fractionPart / fractionWhole; var fractionIndex = Math.floor(myParagraphTool.paragraphEndNodes.length * fractionValue) - 1; myParagraphTool.insertElemenAtIndex(componentElement, fractionIndex); } // Matches for every Nth insertion point else if (item.insertPoint.match(/^\d*th$/i) !== null) { var intervalIndex = parseInt(item.insertPoint.match(/^(\d*)th$/i)[1]); var startingIndex = parseInt(item.startingPoint) - 1; var insertionMax = parseInt(item.maxInsertions) || 100; var insertionCount = 0; for (var i = startingIndex; i < myParagraphTool.paragraphEndNodes.length && insertionCount < insertionMax; i++) { if ((i - startingIndex) % intervalIndex === 0) { let currentNode = myParagraphTool.getNodeAtIndex(i); const clonedComponent = componentElement.clone(); myParagraphTool.insertElemenAtIndex(clonedComponent, i); insertionCount++; } } } } }); Foundation.Content['22961900'].setupInlineComponents = function () { return true; }; if (typeof callback === 'function') { callback(); } // }, 200); } Foundation.Content['22961900'].previewInsertionPoints = function () { var myParagraphTool = Foundation.Content['22961900'].paragraphTool myParagraphTool.paragraphEndNodes.each((index, item) => { const insertionPointPlaceholder = jQuery(`
`) myParagraphTool.insertElemenAtIndex(insertionPointPlaceholder, index); }); return 'Paragraph insertion placeholders applied.'; }