Best places to get queso in Austin
Tex-Mex is Austin's unofficial, official cuisine; here are our favorite places to grab a bowl of creamy, cheesy queso.

Whether you think queso, a Tex-Mex staple, borders on Americanized blasphemy or you would happily bathe in it, there’s no denying its status as Austin’s unofficial, official cuisine – right up there with Texas BBQ.
Formally named chili con queso (chili with cheese) but called simply queso, this melty, unapologetically indulgent dish is as much a part of the city as live music and food trucks. To say that Austinites are obsessed with queso is an understatement; it’s ubiquitous, found on every Tex-Mex restaurant menu and many others. (Where else would you find an Indian restaurant serving Tikka Con Queso?)
Ask any local about their favorite, and you won’t get one answer – you’ll get a list. Seemingly everyone, myself included, has their favorite "plain" queso, a go-to for loaded queso, a queso blanco that’s near and dear to their heart, a particularly memorable yellow queso... I have my preferences, but with every visit, I find a new favorite. Austin chefs make it easy, with plenty of unexpected, contemporary takes on this iconic cheesy dip, in addition to thousands of traditional Tex-Mex variations.
With that, let’s clear the air: there’s a tremendous difference between Austin-style queso and the authentic Mexican dish queso fundido. The latter uses soft, stringy cheese like asadero, Chihuahua, and Oaxaca, and restaurants typically serve it with tortillas. Most Austin queso is proudly Tex-Mex, and that’s just fine by us. If you want to compare the two, El Naranjo and Fonda San Miguel make the best fundido in the city.
History
Queso’s origin is a bit murky. Many credit San Antonio’s Original Mexican Restaurant, which opened in 1900 and not to be confused with the one on the River Walk today, with creating chili con queso. No one ever recovered a recipe, though, so it’s anybody’s guess as to what type of cheese the restaurant used. Lisa Fain, the woman behind Homesick Texan and author of Queso!, found the oldest queso recipe in Texas in a San Antonio women’s club cookbook from the early 1920s. It featuring processed American cheese, and Fain believes this recipe is based on the Original Mexican Restaurant’s version. However, The Land of Sunshine: A Magazine of California and the Southwest published a recipe for “chiles verdes con queso” decades earlier, in 1896.
In 1943, Carl Roettele opened a cannery in tiny Elsa, Texas, creating what the world would come to know as Ro-Tel, a blend of diced tomatoes, green chilies and top-secret spices. From the beginning, Ro-Tel advertised with Velveeta, a relatively new product at the time, encouraging consumers to make the two into a “cheese dip.” Shortly after the ads started, queso was everywhere in Texas. Interestingly, no one seems to know which Austin restaurant introduced the city to queso.
How to order
Ordering a bowl of melted cheese with chips is mostly straightforward, but there are some things to keep in mind. Be sure of what you’re ordering. Austin has hundreds of queso iterations (thousands, maybe), and some restaurants have three or more types. Before throwing out, “An order of queso, please,” look to see if the menu has a loaded queso or a queso fundido. Also, ask your server about his or her favorite way to eat it. Chances are, the waitstaff eats a lot of queso.Exception: The parser function of type "canto_diptych" is not defined. Define your custom parser functions as: https://github.com/shuqikhor/editorjs-html-php#extend-for-custom-blocks in /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php:70 Stack trace: #0 /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php(17): edjsHTML::parse_function_error('canto_diptych') #1 [internal function]: edjsHTML::parse_block(Array) #2 /code/web/modules/custom/editorjs_custom_plugins/src/Parser/CustomParser.php(28): array_map(Array, Array) #3 /code/web/modules/custom/aws_event_pipeline/src/Mappers/v1/ArticleMapper.php(123): Drupal\editorjs_custom_plugins\Parser\CustomParser::parse(Array) #4 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(168): Drupal\aws_event_pipeline\Mappers\v1\ArticleMapper->toAwsPayload(Object(Drupal\node\Entity\Node)) #5 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(151): Drupal\aws_event_pipeline\AwsFormatter->getPayload(Object(Drupal\node\Entity\Node), Array) #6 /code/web/modules/custom/aws_event_pipeline/src/AwsEventSync.php(174): Drupal\aws_event_pipeline\AwsFormatter->getAwsMessage(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent), Array) #7 /code/web/modules/custom/aws_event_pipeline/src/EventSubscribers/EntityEventSubscriber.php(146): Drupal\aws_event_pipeline\AwsEventSync->sendToAws(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #8 [internal function]: Drupal\aws_event_pipeline\EventSubscribers\EntityEventSubscriber->onEntityUpdate(Object(Drupal\Core\Entity\EntityEvent), 'entity.update', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #9 /code/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Drupal\Core\Entity\EntityEvent), 'entity.update', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #10 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(231): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object(Drupal\Core\Entity\EntityEvent), 'entity.update') #11 /code/web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(900): Drupal\Core\Entity\EntityStorageBase->invokeHook('update', Object(Drupal\node\Entity\Node)) #12 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(579): Drupal\Core\Entity\ContentEntityStorageBase->invokeHook('update', Object(Drupal\node\Entity\Node)) #13 /code/web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(781): Drupal\Core\Entity\EntityStorageBase->doPostSave(Object(Drupal\node\Entity\Node), true) #14 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(504): Drupal\Core\Entity\ContentEntityStorageBase->doPostSave(Object(Drupal\node\Entity\Node), true) #15 /code/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php(806): Drupal\Core\Entity\EntityStorageBase->save(Object(Drupal\node\Entity\Node)) #16 /code/web/core/lib/Drupal/Core/Entity/EntityBase.php(339): Drupal\Core\Entity\Sql\SqlContentEntityStorage->save(Object(Drupal\node\Entity\Node)) #17 /code/web/modules/contrib/lightning_workflow/modules/lightning_scheduler/src/TransitionManager.php(212): Drupal\Core\Entity\EntityBase->save() #18 /code/web/modules/contrib/lightning_workflow/modules/lightning_scheduler/lightning_scheduler.module(69): Drupal\lightning_scheduler\TransitionManager->process('node', Object(Drupal\Core\Datetime\DrupalDateTime)) #19 [internal function]: lightning_scheduler_cron(Object(Drupal\ultimate_cron\Entity\CronJob)) #20 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(325): call_user_func('lightning_sched...', Object(Drupal\ultimate_cron\Entity\CronJob)) #21 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(471): Drupal\ultimate_cron\Entity\CronJob->invokeCallback() #22 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(213): Drupal\ultimate_cron\Entity\CronJob->run(Object(Drupal\Core\StringTranslation\TranslatableMarkup)) #23 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(334): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launch(Object(Drupal\ultimate_cron\Entity\CronJob)) #24 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(309): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->runThread('6161951', 1, Array) #25 /code/web/modules/contrib/ultimate_cron/src/UltimateCron.php(64): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launchJobs(Array) #26 /code/web/modules/contrib/ultimate_cron/src/ProxyClass/UltimateCron.php(70): Drupal\ultimate_cron\UltimateCron->run() #27 /code/web/core/modules/system/src/CronController.php(46): Drupal\ultimate_cron\ProxyClass\UltimateCron->run() #28 [internal function]: Drupal\system\CronController->run() #29 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array) #30 /code/web/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #31 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #32 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) #33 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #34 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #35 /code/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(44): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #36 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #37 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #38 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(191): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #39 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(128): Drupal\page_cache\StackMiddleware\PageCache->fetch(Object(Symfony\Component\HttpFoundation\Request), 1, true) #40 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(82): Drupal\page_cache\StackMiddleware\PageCache->lookup(Object(Symfony\Component\HttpFoundation\Request), 1, true) #41 /code/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #42 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #43 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #44 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #45 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #46 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #47 {main}
Best places to get queso in Austin
Matt’s El Rancho
Vibes: Family-run Matt’s El Rancho is an Austin institution that has served consistently good, fresh Tex-Mex since 1952. The perpetually busy South Lamar restaurant is cavernous; multiple dining rooms and a sprawling, brick-paved shady patio seat more than 500. Nearly every table orders a Bob Armstrong dip, Matt’s (literally) beefed-up take on loaded queso. The Bob uses Matt’s chile con queso as a base, then adds taco ground beef and guacamole, serving it with perfectly salted house-made tortilla chips. Don’t like "stuff" in your queso? Stick with the classic chile con queso.
Cost: US$10 for small, US$13 for large Bob Armstrong dip; US$18 Spicy; US$9 small, US$12 large traditional queso
How to get it: Order a “small Bob” or “large Bob;” no need to call it by its formal name. The dip is dense and a small easily feeds two people, especially if you ask for a side of warm flour tortillas. Matt’s El Rancho uses American cheese, not Velveeta, so it starts to congeal fairly quickly as it cools – dig in! Pair your queso with one of the restaurant’s notoriously strong margaritas or the Knockout Martini, which, fair warning, lives up to its name. Prepare to wait up to one hour on weekends, as Matt’s doesn’t accept reservations.
Torchy’s Tacos
Vibes: Hands-down the most polarizing taco joint in the city, Austinites either love or hate Torchy’s, which all have a unique look but identical menus. Nearly everyone agrees that the fast-casual chain’s queso is top-tier, however. The "regular" version is a green chile queso topped with cilantro, guacamole and signature stripes of cotija cheese and Torchy’s Diablo hot sauce. If you want a heartier snack, or to make it a meal, order ‘Hillbilly’ queso, which adds a scoop of chorizo.
Cost: US$7 to US$8 for standard, US$8 to US$9 for Hillbilly; prices may vary slightly across locations
How to get it: Come solely for the queso. I’m firmly in the camp that thinks Torchy’s tacos are just so-so, but its melty, cheesy dip is fire. If you’re on the other side, or a first-timer wanting to form your own opinion, order your tacos "trashy," topped with queso. Metro Austin has nearly 20 locations, including Round Rock, Pflugerville and Georgetown. Most have a full bar or serve at least margaritas and beer.
Dos Batos
Vibes: Many longtime locals haven’t even heard of Dos Batos, but those in the know overwhelmingly sing its praises. Tucked into the end of a north Austin shopping center, the unassuming taco shop specializes in food from northern Mexico (the owners hail from Monterrey), with an emphasis on cooking in wood-fired ovens. The result: a smooth, dark yellow, smoky queso with an unexpectedly complex flavor profile. This is true of all the meats and thick, scratch-made tortillas. Come hungry.
Cost: US$5 for small, US$7 for large
How to get it: Dos Batos is casual and somehow rarely busy, so pop in whenever hunger strikes. Try a few tacos along with the queso, and don’t skip the salsa bar; the smoked pineapple salsa borders on transformative. Carb-counters will love the crispy cheese "tortilla" alternative available with any taco. During happy hour, weekdays from 3pm to 6pm, large queso is just US$5 and margaritas are US$3. Cheers!
Magnolia Cafe
Vibes: Magnolia Cafe exudes small-town diner vibes, and its “Sorry we’re open” sign and "open eight days a week" policy fit right into colorful, eclectic Bouldin Creek. The South Congress location opened in 1988, but the company started with another location in 1979. It’s a true Austin icon, the type of place that serves pancakes at 11pm, or queso for breakfast.
Cost: US$11.50 Mag Queso; US$12.25 Mag Mud; US$13.50 Shredded Beef Queso
How to get it: The move here is an order of Mag Mud, which adds a layer of black beans underneath the OG Mag Queso (queso, sizable chunks of avocado and pico de gallo). Stirring the dip creates an ultra-creamy, oh-so-satisfying "mud." There’s also the Shredded Beef Queso, swapping black beans for slow-roasted shredded beef. It’s equally amazing and unique in the sea of Austin queso. Exception: The parser function of type "canto_diptych" is not defined. Define your custom parser functions as: https://github.com/shuqikhor/editorjs-html-php#extend-for-custom-blocks in /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php:70 Stack trace: #0 /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php(17): edjsHTML::parse_function_error('canto_diptych') #1 [internal function]: edjsHTML::parse_block(Array) #2 /code/web/modules/custom/editorjs_custom_plugins/src/Parser/CustomParser.php(28): array_map(Array, Array) #3 /code/web/modules/custom/aws_event_pipeline/src/Mappers/v1/ArticleMapper.php(123): Drupal\editorjs_custom_plugins\Parser\CustomParser::parse(Array) #4 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(168): Drupal\aws_event_pipeline\Mappers\v1\ArticleMapper->toAwsPayload(Object(Drupal\node\Entity\Node)) #5 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(151): Drupal\aws_event_pipeline\AwsFormatter->getPayload(Object(Drupal\node\Entity\Node), Array) #6 /code/web/modules/custom/aws_event_pipeline/src/AwsEventSync.php(174): Drupal\aws_event_pipeline\AwsFormatter->getAwsMessage(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent), Array) #7 /code/web/modules/custom/aws_event_pipeline/src/EventSubscribers/EntityEventSubscriber.php(146): Drupal\aws_event_pipeline\AwsEventSync->sendToAws(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #8 [internal function]: Drupal\aws_event_pipeline\EventSubscribers\EntityEventSubscriber->onEntityUpdate(Object(Drupal\Core\Entity\EntityEvent), 'entity.update', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #9 /code/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Drupal\Core\Entity\EntityEvent), 'entity.update', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #10 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(231): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object(Drupal\Core\Entity\EntityEvent), 'entity.update') #11 /code/web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(900): Drupal\Core\Entity\EntityStorageBase->invokeHook('update', Object(Drupal\node\Entity\Node)) #12 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(579): Drupal\Core\Entity\ContentEntityStorageBase->invokeHook('update', Object(Drupal\node\Entity\Node)) #13 /code/web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(781): Drupal\Core\Entity\EntityStorageBase->doPostSave(Object(Drupal\node\Entity\Node), true) #14 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(504): Drupal\Core\Entity\ContentEntityStorageBase->doPostSave(Object(Drupal\node\Entity\Node), true) #15 /code/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php(806): Drupal\Core\Entity\EntityStorageBase->save(Object(Drupal\node\Entity\Node)) #16 /code/web/core/lib/Drupal/Core/Entity/EntityBase.php(339): Drupal\Core\Entity\Sql\SqlContentEntityStorage->save(Object(Drupal\node\Entity\Node)) #17 /code/web/modules/contrib/lightning_workflow/modules/lightning_scheduler/src/TransitionManager.php(212): Drupal\Core\Entity\EntityBase->save() #18 /code/web/modules/contrib/lightning_workflow/modules/lightning_scheduler/lightning_scheduler.module(69): Drupal\lightning_scheduler\TransitionManager->process('node', Object(Drupal\Core\Datetime\DrupalDateTime)) #19 [internal function]: lightning_scheduler_cron(Object(Drupal\ultimate_cron\Entity\CronJob)) #20 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(325): call_user_func('lightning_sched...', Object(Drupal\ultimate_cron\Entity\CronJob)) #21 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(471): Drupal\ultimate_cron\Entity\CronJob->invokeCallback() #22 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(213): Drupal\ultimate_cron\Entity\CronJob->run(Object(Drupal\Core\StringTranslation\TranslatableMarkup)) #23 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(334): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launch(Object(Drupal\ultimate_cron\Entity\CronJob)) #24 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(309): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->runThread('6161951', 1, Array) #25 /code/web/modules/contrib/ultimate_cron/src/UltimateCron.php(64): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launchJobs(Array) #26 /code/web/modules/contrib/ultimate_cron/src/ProxyClass/UltimateCron.php(70): Drupal\ultimate_cron\UltimateCron->run() #27 /code/web/core/modules/system/src/CronController.php(46): Drupal\ultimate_cron\ProxyClass\UltimateCron->run() #28 [internal function]: Drupal\system\CronController->run() #29 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array) #30 /code/web/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #31 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #32 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) #33 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #34 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #35 /code/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(44): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #36 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #37 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #38 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(191): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #39 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(128): Drupal\page_cache\StackMiddleware\PageCache->fetch(Object(Symfony\Component\HttpFoundation\Request), 1, true) #40 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(82): Drupal\page_cache\StackMiddleware\PageCache->lookup(Object(Symfony\Component\HttpFoundation\Request), 1, true) #41 /code/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #42 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #43 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #44 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #45 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #46 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #47 {main}
Eldorado Cafe
Vibes: Despite its location in a nondescript North Shoal Creek strip mall, Eldorado Cafe consistently has a long wait, even on weekdays. The restaurant’s interior also defies its facade; bright blue, yellow and teal walls and warm, dark wood paneling would be right at home in Havana. Longtime locals opened Eldorado, which focuses on “hearty, Mexican-inspired comfort food,” including some of the city’s best queso blanco – and intriguingly, mashed potatoes in everything from flautas to enchiladas.
Cost: US$5 for small, US$11 for large classic queso; US$12.95 Supa Queso; US$7 Choriqueso (vegan)
How to get it: The house queso is delicious on its own, but adding beef picadillo makes it a standout. Or, try Eldorado’s famed Supa Queso, with black beans, guacamole and pico. Add one of the six made-in-house salsas; the avocado salsa and Salsa X are the perfect complement. Not only does Eldorado also have vegan queso with a house-made vegan chorizo add-on, but it offers a dedicated vegan menu. For another way to enjoy the queso, try the No Hater Tater side: queso-laden mashed potatoes with green onions. Make reservations online; hour-plus waits are not uncommon.
El Alma Cafe y Cantina
Vibes: Everything about El Alma is vibrant, from the Mexican folk art donning the walls to the Westgate location’s green exterior and the colorful food and cocktails. Of the two locations, Barton Springs is more popular, with an airy rooftop patio overlooking the park and spring-fed pool. A rock wall and lush plants along the interior stairway leading to it make you feel like you’re entering a grotto, but the approachable food and drinks keep things low-key. El Alma has two types of queso plus a traditional queso fundido, inspired by namesake chef Alma Alcocer-Thomas’ Mexico City upbringing.
Cost: US$9 for small, US$11 for large queso blanco y rojo (made with white cheese and a touch of salsa); US$14 jalapeño crab queso; US$12 queso fundido
How to get it: You truly can’t miss with any queso here; all three come with corn tostadas, which are freshly fried, perfectly salted tortillas. But the Jalapeño Crab y Queso Dip is the undeniable star, with ancho butter, crab and grilled jalapeños. Alternatively, make the queso fundido a meal by adding poblanos, mushrooms, and chorizo. Bonus: both the queso blanco and fundido have US$3 happy hour discounts, as does the refreshing and one-of-a-kind Avocadorita. Make reservations, especially for weekend dinner and brunch, but note that Barton Springs’ rooftop is strictly first-come, first-served.
Kerbey Lane Cafe
Vibes: Family-owned Kerbey Lane Cafe has several locations throughout ATX, all of them with a small-town diner feel and a bit of Austin flair. Open early and late, easy on the wallet, and prime people-watching. The original, still-running location opened in 1980, a small green and yellow bungalow on–you guessed it–Kerbey Lane. For years, the owners lived in the attached studio with their son, who now owns the mini-chain with his wife. Beyond one of the city’s most beloved quesos, scratch-made comfort food and brunch, specifically migas and pancakes, are the stars here.
Cost: $7.49/9.99 classic queso (small and large); $10.49 Kerbey and Cowboy queso; $9.49/11.99 vegan cashew queso
How to get it: The classic queso is straightforward and, notably, a bit drippier than other Austin queso. It serves the uber-popular Kerbey Queso well, though, keeping it light despite the addition of pico and fresh guac. You can also go all-in on the Cowboy Queso, adding black beans or pork or vegan chorizo. There’s even a vegan queso, reportedly one of the best in the city. If the Cowboy Queso sounds oddly familiar, it’s nearly identical to Magnolia Cafe’s Mag Mud. And that’s not a coincidence—Kerbey Lane’s original owners worked at Magnolia Cafe the year it opened.
Visit one of the Austin metro’s nine Kerbey Lane Cafe locations, including Round Rock and San Marcos, plus one in San Antonio. The Mueller one and the original, Central, are consistently the best.
Other noteworthy Austin queso
Beyond traditional Tex-Mex queso, Austin has several variations pushing the boundaries of what melted cheese can be. Beet pico de gallo and goat cheese yogurt crema top the poblano queso blanco at Austin Daily Press, and Lamberts adds brisket burnt ends to its version. Velvet Taco has a wholly unexpected red curry coconut queso, while Yellow Ranger’s is a black garlic queso topped with house-made chili crisp and scallions, served with wonton strips and chilled wok-charred broccoli.
Looking for vegan queso? Vegan chorizo shines in Local Foods’ cashew queso, and Bouldin Creek Cafe makes theirs from cauliflower, tahini and oats. The Vegan Nom food truck sells theirs in convenient to-go pouches.
Try it at home
We’ve all been there: a late-night queso craving hits when you’ve already changed into pj's. Or you recently resolved to spend less on takeout and food delivery. And isn’t everyone curious about how queso would taste on your signature breakfast sammy or, heck, in pasta? Luckily, local grocery stores including H-E-B, Fresh Plus, and Whole Foods sell ready-to-eat queso. Culinary Cowgirls Lone Star Queso and Austin Slow Burn Green Chile con Queso are the best, rivaling many restaurants (really).
Chef Matt Martinez, Jr., son of "the" Matt behind Matt’s El Rancho, also published his recipe for the famed Bob Armstrong dip in his book MexTex. Everyone knows there’s nothing like a Tex-Mex restaurant’s steaming hot queso and fresh chips, but this is a perfect at-home substitute.