Best Of 2024
- 2024
- 2023
- 2022
- 2021
- 2020
- 2019
- 2018
- 2017
- 2016
- 2015
- 2014
- 2013
- 2012
- 2011
- 2010
- 2009
- 2008
- 2007
- 2006
- 2005
- 2004
- 2003
- People
- Shopping
- Around Town
- Services
- Nightlife
- Best Of San Antonio
- 2024
- Readers' Choice
Winner: Josephine Street
400 E. Josephine St.
(210) 224-6169
Longevity is a leitmotif with many San Antonio favorites, and Josephine Street, known for its neon “Steaks and Whisky” signage, is among the city’s most durable restaurants, counting more than 45 years under its big-buckled belt. Its chicken fried steak arrives mantled with classic cream gravy and makes for a full Texas experience. It’s big, crisply coated and as decadent as one would expect. Try it with an order of deep-fried stuffed jalapeños and aRanger Creek Rye to bolster the proud Lone Star State theme.
2. Little Red Barn Steakhouse
1836 S. Hackberry St.
(210) 532-4235
3. MK Davis
1302 N. Flores St.
(210) 223-1203
facebook.com/mkdavisrestaurant
Previous Winners
- 2023Josephine Street
- 2022Good Time Charlie's
- 2021Good Time Charlie's
- 2020De Wese’s Tip Top Cafe
- 2017Best Chicken Fried Steak
- 2017Best Chicken Fried Steak
- 2016Best Chicken Fried Steak
- Best Of San Antonio
- 2024
- Readers' Choice
Winner: La Panadería
Multiple locations
Brothers David and José Cáceres brought their experience with “long-fermented” breads from Mexico City to San Antonio in 2014. The pair now operate three La Panadería locations, which ply tequila almond croissants, classic conchas, trendy Nutella “cruffins” and seasonal pan de muerto. Traditional teleras and birotes find their way into tortas too, and both bubbles and a house country loaf can accompany fresh salads. Don’t miss the spiral croissants that cradle eggs with ham, chorizo, kiolbassa and more.
2. Bird Bakery
5912 Broadway
(210) 804-2473
3. Lily's Cookies
2716 McCullough Ave.
(210) 832-0886
- Best Of San Antonio
- 2024
- Readers' Choice
Winner: Rios Barbacoa
Multiple locations
2. Tellez Tamales & Barbacoa
Multiple locations
3. Tommy’s Restaurant
Multiple locations
- Best Of San Antonio
- 2024
- Readers' Choice
Winner: Smoke Shack BBQ
3714 Broadway
(210) 957-1430
There’s more than one way to get your brisket fix at Smoke Shack BBQ, the durable, Baja 09 favorite. The smoky Texas staple comes blended with mac and cheese, slipped into sliders, piled high with pulled pork atop a snappy sausage link and even mated to melty cheese in the grilled classic sando. Tejas Hot Chicken comes amped up with chili piquin oil and cooled by crunchy slaw. Comforting sides of fried okra and collard greens keep all orders good company.
2. 2M Smokehouse
2731 S. WW White Road
(210) 885-9352
3. Blanco BBQ
13259 Blanco Road
(210) 251-2602
- Best Of San Antonio
- 2024
Winner: Pete's Tako House
502 Brooklyn Ave.
(210) 224-2911
2. Bill Miller Bar-B-Q
Multiple locations
3. Taqueria Datapoint #1
4503 De Zavala Road
(210) 455-3888
- Best Of San Antonio
- 2024
- Readers' Choice
Winner: Magnolia Pancake Haus
Multiple locations
San Antonio’s Magnolia Pancake Haus mini-chain has been family owned and operated since 2000. Its namesake pancakes are a key draw, and diners can order them with a variety of ingredients stirred into the batter, including blueberries, chocolate chips, pecans, bananas foster, granola, apple cinnamon and even bacon. Though the fluffy buttermilk flapjacks steal the show, Magnolia locations also serve a full menu of brunch favorites, including omelets, waffles and eggs Benedict. Those who feel like honoring the hair-of-the-dog brunch tradition also have their choice of the standard-issue mimosa or the “beer mosa,” a citrus brew combined with fresh-squeezed OJ.
2. La Panadería
Multiple locations
3. Box St. All Day
Multiple locations
- Best Of San Antonio
- 2024
- Readers' Choice
Winner: Burger Boy
Multiple locations
2. Cuarto De Kilo
12411 Bandera Road, Suite 108, Helotes
(210) 263-9228
3. Chris Madrid's
1900 Blanco Road
(210) 735-3552
- Best Of San Antonio
- 2024
Winner: The Jerk Shack
10234 TX-151, Suite 103
(210) 776-7780
2. La Marginal
2447 Nacogdoches Road
(210) 804-2242
3. Jamaica Jamaica Cuisine
2026 Austin Highway
(210) 590-0515
- Best Of San Antonio
- 2024
- Readers' Choice
Winner: Cured
306 Pearl Parkway, Unit 101
(210) 314-3929
If you’re sick of the same old happy-hour sliders and nachos, this spot has the cure. (Sorry, not sorry.) It should come as no surprise that this Pearl fixture has taken home the gold for the best charcuterie in San Antonio. Specializing in Texas farm-to-table fare, the rustic-chic New American restaurant takes its curing seriously, from meats to pickles, and its boards remain a highlight for fans. Cured’s menu is in constant evolution, upholding multi-James Beard Award-nominated chef Steve McHugh’s core values of “smart, seasonal and sustainable.” In addition to the extensive charcuterie offerings, expect exceptional seafood, lamb, chicken livers, craft co*cktails and more.
2. Copa Wine Bar
19141 Stone Oak Parkway, Suite 704
(210) 495-2672
3. The Board Couple
2218 N. Zarzamora St.
(210) 573-2100
'Object.defineProperties(this, {'items': { get: function() { return jQuery(this.itemContainerSelector).find(this.itemSelector)}},'currentItem': {get: function() {var foundItem = nullvar foundItemInView = nullthis.items.each(function () {var currentInView = elementInView(jQuery(this), scrollTopOffset, 0)if (currentInView) {// An in view item is already located extra logicif (foundItemInView && foundItemInView.inView) {// The entire previously found item is visible - it winsif (foundItemInView.topInView && foundItemInView.bottomInView) return// The previously found item covers the visible area - it winsif (foundItemInView.middleCoversView) return// The previously found item has more surface area - it winsif (foundItemInView.percentVisable > currentInView.percentOfViewHeight) return}foundItem = jQuery(this)foundItemInView = currentInView}})return foundItem}},'currentItemIndex': {get: function() {var currentElement = this.currentItem.closest('[bestof-index]')if(currentElement) {return parseInt(currentElement.attr('bestof-index'))}return null}},'currentItemId': {get: function() {var currentElement = this.currentItem.closest('[bestof-id]')if(currentElement) {return currentElement.attr('bestof-id')}return null}}})var bestOfInstance = thisvar scrollTopOffset = window.innerHeight > this.smallMenuBreakPoint ? 110 : 140var originUrl = window.location.hrefthis.scrollToIndex = function (index) {var bestOfItem = this.items.filter('[bestof-index="' + index + '"]')if (bestOfItem.length) { var topOffset = bestOfItem.offset().top - scrollTopOffset// window.scrollTo({ top: topOffset, behavior: 'smooth' })window.scrollTo({ top: topOffset, behavior: 'auto' })}else {this.fetchMore(index, function () {bestOfInstance.scrollToIndex(index)})}}this.fetchMore = function (startIndex, callback) {var currentItemOnFetch = this.currentItemvar url = window.location.origin + window.location.pathnamevar params = {ajaxComponent: componentId,action: 'grabMore',startIndex: startIndex,startingItem: jQuery('[bestof-starting-item]').attr('bestof-starting-item'),}var keywords = currentItemOnFetch.attr('bestof-keywords')if (keywords) {params.keywords = keywords}var featureValue = currentItemOnFetch.attr('bestof-feature')if (featureValue) {params.feature = featureValue}jQuery.ajax({url: url,type: 'GET',data: params,dataType: 'json',beforeSend: function () { console.log('Fetching results') },success: function (data) {console.log('success', data.results, data.results.length, data.error, data)if (data) {if (data.error) {console.log(data.error)}else if (data.results) {console.log('bestOfInstance.items', bestOfInstance.items)for (var i = 0; i < data.results.length; i++) {var resultItem = jQuery(data.results[i])var resultItemIndex = parseInt(resultItem.attr('bestof-index'))var resultAlreadyInserted = bestOfInstance.items.filter('[bestof-index="' + resultItemIndex + '"]').length > 0console.log('result', resultItemIndex)var previousItem = nullvar previousItemIndex = 0if (!resultAlreadyInserted) {bestOfInstance.items.each(function () {if (resultAlreadyInserted) returnvar currentItem = jQuery(this)var currentItemIndex = parseInt(currentItem.attr('bestof-index'))if (resultItemIndex === currentItemIndex ) {resultAlreadyInserted = truereturn}else if (resultItemIndex > previousItemIndex && resultItemIndex < currentItemIndex) {var topOffsetBeforeInsert = currentItemOnFetch.get(0).getBoundingClientRect().topresultItem.insertBefore(currentItem)resultAlreadyInserted = truevar adjustedTopPosition = currentItemOnFetch.offset().top - topOffsetBeforeInsertwindow.scrollTo({ top: adjustedTopPosition, behavior: 'auto' })}previousItem = currentItempreviousItemIndex = currentItemIndex})if (!resultAlreadyInserted) {var topOffsetBeforeInsert = currentItemOnFetch.get(0).getBoundingClientRect().topresultItem.insertAfter(bestOfInstance.items.last())resultAlreadyInserted = truevar adjustedTopPosition = currentItemOnFetch.offset().top - topOffsetBeforeInsertwindow.scrollTo({ top: adjustedTopPosition, behavior: 'auto' })}}}}else { console.log('How did we get here?') }}else { console.log('No result or error returned from content request.') }},complete: function () { bestOfInstance.items = jQuery(bestOfInstance.itemSelector) // Update items resultjQuery(bestOfInstance.itemContainerSelector + ' div[uk-spinner]').remove()if (typeof callback === 'function') { callback() }},error: function (error) { console.log(error) }})}var lazyLoadTimeout = nullvar lazyLoadSurroundingItems = function (index) {if (bestOfInstance.lazyLoadMoreResults) {// Give lazyLoad a chance to finish before submiting more requestsvar lazyLoadTimeout = setTimeout(function () {var prevIndex = Math.max(index - 1, 1)var prevPrevIndex = Math.max(index - 2, 1)var nextIndex = index + 1var nextNextIndex = index + 2var prevIndexLoaded = bestOfInstance.items.filter('[bestof-index="' + prevIndex + '"]').length > 0var prevPrevIndexLoaded = bestOfInstance.items.filter('[bestof-index="' + prevPrevIndex + '"]').length > 0var nextIndexLoaded = bestOfInstance.items.filter('[bestof-index="' + nextIndex + '"]').length > 0var nextNextIndexLoaded = bestOfInstance.items.filter('[bestof-index="' + nextNextIndex + '"]').length > 0if(!prevIndexLoaded) {jQuery(bestOfInstance.itemContainerSelector + ' div[uk-spinner]').remove()// jQuery(bestOfInstance.itemContainerSelector).prepend(bestOfInstance.spinnerHTML)bestOfInstance.fetchMore(Math.max(prevIndex - 9, 1))}else if(!prevPrevIndexLoaded) {jQuery(bestOfInstance.itemContainerSelector + ' div[uk-spinner]').remove()// jQuery(bestOfInstance.itemContainerSelector).prepend(bestOfInstance.spinnerHTML)bestOfInstance.fetchMore(Math.max(prevPrevIndex - 9, 1))}if(!nextIndexLoaded) {jQuery(bestOfInstance.itemContainerSelector + ' div[uk-spinner]').remove()jQuery(bestOfInstance.itemContainerSelector).append(bestOfInstance.spinnerHTML)bestOfInstance.fetchMore(nextIndex)}else if(!nextNextIndexLoaded) {jQuery(bestOfInstance.itemContainerSelector + ' div[uk-spinner]').remove()jQuery(bestOfInstance.itemContainerSelector).append(bestOfInstance.spinnerHTML)bestOfInstance.fetchMore(nextNextIndex)}}, 500)}}var lastIndex = bestOfInstance.currentItemIndexjQuery(window).on('scroll resize', function () {// Give lazyLoad a chance to finish before submiting more requests// var lazyLoadTimeout = setTimeout(function () {// }, 200)var currentIndex = bestOfInstance.currentItemIndexif(currentIndex !== lastIndex) {lastIndex = currentIndexlazyLoadSurroundingItems(currentIndex)console.log(`BestOf Item index: ${currentIndex}`)fireEvent('foundation:bestof:itemchange')}})this.initialized = falsethis.init = function () {if (this.initialized === true) return// Prevent the browser from trying to scroll to the last scroll position before reloadif (history.scrollRestoration) {history.scrollRestoration = 'manual'}var startIndex = this.items.first().attr('bestof-index')var oid = window.location.pathname.match(/\d+$/)if (oid) {var grabIndex = parseInt(this.items.closest('[bestof-id="' + oid[0] + '"]').attr('bestof-index'))if (!isNaN(grabIndex)) {var startIndex = grabIndex}}if (startIndex > 1) {this.scrollToIndex(startIndex)}if(jQuery(this.itemContainerSelector + '[single-listing]').length === 0) {this.lazyLoadMoreResults = true}this.initialized = truelazyLoadSurroundingItems(startIndex)}return this}var BestOfItems = new BestOfItemsObj()// Timeout to prevent fast jogging from item to itemvar itemChangeTimeout = nulljQuery(document).on('foundation:bestof:itemchange', function () {itemChangeTimeout = setTimeout(function () {updateMetaDataFromElement(BestOfItems.currentItem)// Google track pageviewif (typeof ga === 'function') {console.log("foundation:bestof:itemchange event", "sending pageview navigation to:", window.location.href);ga('set', 'location', window.location.href)for (let i = 1; i <= 3; i++) {let currentDimension = jQuery(BestOfItems.currentItem).attr('ga-dimension'+i)if (typeof currentDimension === 'string') {ga('set', 'dimension' + i, currentDimension)}else {ga('set', 'dimension' + i, '') }}ga('send', 'pageview')}}, 200)if (typeof (Foundation.Ad.slots['_LeaderboardHeader-1']) === 'object') {Foundation.Ad.refresh('_LeaderboardHeader-1')}if (typeof (Foundation.Ad.slots['_Footer-1']) === 'object') {Foundation.Ad.showFooter('_Footer-1');}})// Try to init immediatelyBestOfItems.init()// On document loadedjQuery(function () {BestOfItems.init()})})();