December 12, 2019
Big Ideas in Small Bites
Article-Canapes-Trends-Entertaining-Recipe

How tiny toasts and cucumber cups took over cocktail parties.

When you hear that an upcoming event will feature trays of “canapés,” you know exactly the type of party you’re in for—one that is planned down to the minute, detailed down to the type of cocktail stirrer. And there will be herb garnishes, many of them. But more than anything, you know that you’re in for platters of carefully preened finger food. Sometimes passed, sometimes resting on the host’s coffee table. Always a welcome sight to the itinerant snacker.

This particular category of appetizer, which you might associate with stuffy cocktail parties and catered fundraisers in hotel conference rooms, includes deviled eggs dabbed with caviar, tiny quiches, tuile cornets full of jewel-like salmon tartare, and gumdrop-sized baked brie wrapped in phyllo dough. But as an anchor concept for home entertaining, the luxurious snacks have always fit into a few broad categories, which have spawned their own permutations over and over again across the eight decades or so that people have been writing down recipes for them.

Think of these as the prevailing formats—the three big ideas that have been around since the dawn of hors d’oeuvres and are still as relevant as ever. They may have picked up a few more watermelon radishes, strips of sea urchin, and flakes of Maldon salt along the way, but they take their cues from the canapés that came before them.

The Fussy Veggie Cup

The history of canapés is full of innocent vegetables that have been whittled into thimble-sized bowls—cucumber slices that have been carved out to hold whitefish salad, radishes that have been hacked to hold crème fraîche, and baby potatoes that have been drilled into for a filling of sour cream.

Anyone who has ever made any of these elaborate vegetable cups insists that it’s easy. “The next step sounds very complicated but it is actually quite simple,” wrote Florence Fabricant in 1984 in the New York Times, before launching into a multistep cucumber-carving technique involving a series of shallow, angled cuts. In her 1984 book Hors d’Oeuvres, Martha Stewart insists that “A cherry tomato is easily hollowed out with a melon-ball scoop or small spoon and the salmon mousse piped in with a decorative tip pastry bag.”

But beyond these vessels that selfless party hosts have risked trips to the ER to make, there’s a world of vegetables that were born to hold creamy, salty fillings. A mushroom cap doesn’t require any hacking before stuffing it with bread crumbs and cheese and baking it. Hollow peppadews were born to hold goat cheese. Short lengths of celery stalk can be spread with a little cream cheese and sprinkled with everything bagel seasoning. Or you can spoon a quenelle of taramosalata into a tidy endive canoe and leave it at that.

The Thing Wrapped in a Thing

Want to elevate a water chestnut, a melon ball, or a pale, midwinter cherry tomato to the upper echelons of canapé status? Just wrap a basil leaf, a vegetable, or a slice of charcuterie around it, and skewer it with a toothpick.

The most enduring example of the art form might be the devil on horseback—a Victorian specialty that dates back to the late 1800s in England. This involves sprucing up a pitted prune or a date by stuffing it with blue cheese (or sometimes simply an almond), wrapping the whole thing in bacon, and baking until the rendered fat mixes with the caramelized sugars from the dried fruit to create a rich, dark brown glaze.

Martha Stewart was all about the wrapping and skewering technique in the legendary Hors d’Oeuvres when she told readers to wrap blanched asparagus in prosciutto, or to wrap poached shrimp in waxy snow peas (to be served in a head of cabbage, obviously). In 1992, Molly O’Neil wrote a spirited article in the New York Times about canapés. “Small Wonders” suggests wrapping shrimp in prosciutto, baking them, and serving them with a curry vinaigrette. And in the early aughts, parties were inundated with skewered caprese salads—where basil leaves were skewered around tiny balls of mozzarella and cherry tomatoes.

Today, a round of mortadella or a slice of salami wrapped around a peperoncini wouldn’t feel out of place in a party spread. A white anchovy wrapped around an olive channels the spirit of Spanish gildas (little one-bite skewers of conservas). And devils on horseback will never, ever go out of style.

The Bready Sofa

Although the word “canapé” has come to describe lots of forms of finger foods, the word is also French for “sofa.” Many canapés are constructed on little couches of toast, crackers, or pastry. James Beard’s 1940 book Hors d’Oeuvre & Canapés has a whole chapter of these—tidy carbs used as a foundation for dips, salads, and smoky fishes.

In a recipe published in the New York Times in 1955 that would alarm any modern reader, a “canapé pie” is made by creating a bullseye of cheese, ham, and egg salad on a large round slice of pumpernickel bread, and cut into dainty wedges. In a 1967 recipe, also in the New York Times, a “seafood canapé” is made by topping Holland Rusks (round, dry toasts) with tomato slices, hard-boiled egg halves, and crab meat—all slathered in a mixture of mayo and ketchup.

As foreboding as some of these midcentury riffs might sound, the tiny toast round might be the best utility player in the canapé universe—working in every scenario, from high tea to Pinot Grigio–soaked friend gatherings. In the ’90s, thin baguette slices transformed into crostini spread with goat cheese, pesto, and roasted red peppers took over the cocktail party scene.

Today, the format is finding new life in restaurants. Delicate rye toasts provide beds for smoked fishes at Kachka in Portland, Oregon. At Larrys in Montréal, two tidy, bite-size rectangles of toasted, fluffy Pullman bread are spread with rusty-red ‘nduja and topped with parallel stripes of white anchovy. A far cry from the thrifty days of piling ham salad onto rye bread, at the Pool Lounge in New York, $23 will buy you a pair of matchbox-size toasts brushed with spicy mustard and topped with creamy uni.

Anna Hezel

Anna Hezel is the senior editor of TASTE.

[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://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://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>