January 15, 2020
Panna Cotta Is Whatever You Want It to Be
Article-Panna-Cotta-Stewed-Apricot-Fruit-and-Pistachios

From the raspberry-coulis-clad iterations of the ’90s to the brown-sugar-roasted pineapple toppings of today, panna cotta has always found a way to keep up with the times.

I was 18, on a big date with my new college boyfriend. We wanted to do something grown-up—we were probably celebrating a six-week anniversary—and so we had reserved a table at the less expensive offshoot of a famous chef’s restaurant on Chicago’s Gold Coast. And although Chicago was known to card hard, and I looked approximately three years old in my oversize thrift-store dress, we made the bold decision to try to order a bottle of Merlot.

But no, we were not served wine. The poor waiter looked very embarrassed on our behalf, and to make up for it, he was nice enough to bring us a free dessert: two perfect, jiggling rounds of snow-white panna cotta, speckled with vanilla bean and arranged over a squeeze-bottle-administered, Abstract Expressionist vista of raspberry coulis. It was a taste of what dairy can be if it really, really tries.

Panna cotta—the Italian word for “cooked cream”—is said to trace its lineage to the Piedmont region, which is known for its rich, tangy dairy (several panna cotta recipes I like use this fact to explain the inclusion of yogurt, buttermilk, or sour cream in the base). Traditionally, it involves a glug of peach eau de vie for flavor. It looks like a custard, but it’s paler and much easier to make. Genetically, it’s in the wobbly Bavarian cream family, but it doesn’t involve any whipping or really anything beyond heating some dairy and dissolving some gelatin.

It was a taste of what dairy can be if it really, really tries.

The dessert may owe its ’90s ubiquity to the upscale Italian restaurant boom that began during the previous decade. Starting in the late 1980s, regional, rustic Italian was embraced with gusto, and New York became awash in Barolo and white truffles. In a 1990 New York Times piece discussing Piedmont, Florence Fabricant described a Union Square Cafe panna cotta to readers as “a satiny, super-rich caramel custard made without eggs but with plenty of heavy cream.” Gramercy Tavern was also a pioneer—founding pastry chef Claudia Fleming’s simple recipe is pretty much the paradigm—and to this day, it continues to turn out a fabulous panna cotta.

panna cotta

It’s not hard to see why this creamy creation caught on. It’s indulgent, but it feels sort of refreshing at the same time. It celebrates the friendly familiarity of gelatin—so much less finicky than egg custards—while stripping its rococo stigma. And unlike its predecessor, the haughty crème brûlée, it doesn’t require a blowtorch. Perhaps the dish is a ’90s cliché, but panna cotta is one that’s endured on its merits. Short of serious measuring errors or bad refrigeration, it’s hard to screw up. On a recent trip to London, I counted—and ate—no fewer than four in takeout sandwich shops.

Of course, panna cotta never really went away—it’s withstood Cronuts and gone head-to-head with budino, like a dessert Ozymandias—but right now, we happen to be living in a time of glorious panna cotta. Not least because you can find it everywhere; it makes as much sense in those sandwich shops as it does in the unfussy Italian restaurants that crown best-of lists. You can go classic at LA’s Bestia, or mysterious and chocolaty at DC’s All-Purpose Pizzeria. The Chicago Firehouse Restaurant adds a rakish cap of hibiscus gelée; New York’s Estela tops its honey panna cotta with Moscato vinegar. My current favorite is the yogurt panna cotta topped with orange marmalade and olive oil I had at Jody Williams’s Via Carota—both relaxing and exciting. And when you’re feeling battered or uncertain (and who isn’t?), is there anything better than what is essentially very rich baby food?

Of course, panna cotta never really went away—it’s withstood Cronuts and gone head-to-head with budino, like a dessert Ozymandias—but right now, we happen to be living in a time of glorious panna cotta.

Not long after the abortive wine dinner, I made my first panna cotta in my dorm’s kitchen from an Epicurious recipe. With the cheapest whipping cream available and a dash of fake vanilla extract, I portioned the milky mix into the University of Chicago mugs doled out at orientation. For garnish, I’d stolen a few strawberries from the dining hall. They looked, needless to say, fabulous. And I was thrilled and almost slightly disappointed by how easy it was.

I’ve made it hundreds of times since: vegan iterations, emergency-ration versions, and batches that have been portioned off and served in Solo cups. I’ve served it to people I was wooing and to kids and to nice people and to jerks. It always goes over well, and it lends itself to a hundred seasonal variations. Spring and summer are easy—just serve it with macerated berries or cherries or stone fruits. In winter, I like it with poached dried apricots (the sour Blenheim kind), or long-cooked quince, or pineapple roasted with brown sugar and rum. And, of course, there’s always the classic route: aceto balsamico or the squeeze bottle full of strained berry coulis.

You can perfume the compliant base with just about every steepable flavor available, from cardamom pods to peppercorns to herbs to rose petals. If you have truly good dairy, allow that to shine: panna cotta made with tart whole-milk yogurt or really rich, yellow cream needs little else (the one I made on a camping trip with condensed milk needed a lot of help in the toppings department). A very good vegan version can be made with coconut milk. The only tricks, such as they are, are to make sure your gelatin is well softened; to not prepare the mixture more than a day in advance, so the texture doesn’t start to separate (I usually bring it together the night before a dinner); and to cover it well, so no other aromas creep in. (Believe me, I speak from bitter, garlic-laced experience.)

These days, I typically make it in an earthenware mixing bowl, although if I want it to set quickly, I distribute it into teacups (or mugs, for nostalgia’s sake). I generally don’t bother with unmolding, although there’s a visceral thrill to feeling the panna cotta break contact with the sides of a ramekin, not to mention the slight slurping sound as it unmolds—and it has a certain retro flair. (Serve it on square plates for maximum ’90s authenticity.) Not only do I like the abundance of a big dish, but it encourages people to dive in with spoons—taking as much or as little as they like. And if you can have panna cotta with a bottle of Merlot? So much the better. This is one of the many perks of being a grown-up.

RECIPE: Yogurt Panna Cotta

Sadie Stein

Sadie Stein is a writer based in New York.

[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://www.tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>
[email_signup id="3"]
<div class="email-subscribe exp-subscribe subscribe"> <div class="alert alert-success exp-success ga-etembed-success" style="display:none;"> Great! You've signed up successfully! </div> <div class="alert alert-danger exp-error" style="display:none;"> We are experiencing an error, please try again. </div> <form name="subscribe" id="email-signup" class="email-signup-form" action="https://www.tastecooking.com/wp-admin/admin-ajax.php" method="POST" target="_top" data-event-assigned="false"> <fieldset class="form-group form-inline email-submit-group"> <label for="email-address" class="sr-only">Email Address</label> <input id="email-newsletter" type="email" placeholder="your@email.com" class="email-newsletter text email form-control" name="email" value=""> <button type="submit" value="Subscribe" name="subscribe" class="btn btn-primary email-submit-btn ga-etembed-success"> <i class="fa fa-envelope"></i> Subscribe </button> </fieldset> <small class="exp-small terms" style=""> By clicking Subscribe, I acknowledge that I have read and agree to the Penguin Random House <a href="http://www.penguinrandomhouse.com/privacy/" target="_blank">Privacy Policy</a> and <a href="http://www.penguinrandomhouse.com/terms/" target="_blank">Terms of Use</a> and agree to receive news and updates from TASTE and Penguin Random House. </small> <fieldset class="field-group checkboxes" style="display:none"> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50501,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook General</strong></span> </label> </div> <div class="checkbox"> <label> <input type="checkbox" name="programs[]" value="505,50502,1" class="exp-checkbox" checked="checked"> <span><strong>Tastebook Promo</strong></span> </label> </div> </fieldset><!-- /.checkboxes --> <input type="hidden" name="data_acq_code" value="TASTE_POPUP_STATIC_ONGOING" /> <input type="hidden" name="data_programs" value="50501|505,50502|505" /> <input type="hidden" name="form_id" value="3" /> <input type="hidden" name="partner" value="" /> <input type="hidden" name="action" value="crown_email_signup_submit" /> <input type="hidden" name="ref_url" value="" /> </form> </div> <script> jQuery(document).ready(function () { var unassigned_forms; setInterval( function() { //Check for unassigned forms var forms = jQuery( '.email-signup-form' ); unassigned_forms = false; forms.each( function( index ) { if ( jQuery( this ).attr( 'data-event-assigned' ) === 'false' ) { unassigned_forms = true; } }); if ( unassigned_forms ) { forms.off( 'submit' ).on( 'submit', function ( e ) { forms.attr( 'data-event-assigned', 'true' ); e.preventDefault(); // Basic email validation var email = jQuery(e.target).find('.email-newsletter').val(), valid_email = false, groupEl = jQuery(e.target).closest('.email-subscribe'); if ( !!email && typeof(email) === "string" ) { var email_array = email.split('@'); if ( email_array.length === 2 ) { if ( email_array[1].split('.').length > 1 ) { valid_email = true; } } } if ( valid_email ) { jQuery('.alert-danger').hide(); // Show loading gif groupEl.find('.email-signup-form').hide(); groupEl.find('.email-submit-loading').show(); // Populate ref_url jQuery(this).find('input[name="ref_url"]').val(window.location.href); // Generate Payload var payload = jQuery(this).serializeArray(); jQuery.ajax({ url: jQuery(this).attr('action'), type: 'POST', data: payload, success: function (data) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display success msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-success').show(); jQuery(e.target).parent().find('#downloadbtn').show(); }, fail: function (err) { // Hide loading spinner groupEl.find('.email-signup-form').show(); groupEl.find('.email-submit-loading').hide(); // Display failure msg var target = jQuery(e.target); jQuery(e.target).hide(); jQuery(e.target).parent().find('.alert-danger').show(); } }); } else { groupEl.find('.alert-danger').html('Please enter a valid email address.').show(); } }); forms.off( 'keypress' ).on( 'keypress', function ( e ) { if ( e.which === 13 ) { e.preventDefault(); jQuery( this ).submit(); } }); } }, 100); }); </script>