February 8, 2019
The Salted Egg Is Asia’s Answer to Parmesan
DSC01708

Curing egg yolks in salt might seem like a culinary novelty, and is a worthy alternative to parm on your pasta. But it can and should be so much more.

Imagine a flaky croissant, with its buttery laminations of pâte feuilletée and those layers shattering as you bite into it. Then out bursts oozy yellow custard, thick as baked Camembert, and just as rich. No, richer. A hearty saltiness washes over your tongue, immediately followed by a lingering subtle, sweet creaminess. This isn’t your regular Parisian patisserie-born croissant stuffed with almond paste—this is in my homeland of Malaysia, where we’re crazy about salted egg and add it to just about everything. Even croissants.

Cooking blogs paint it as a nifty, chef-y trick to try at home, and they’re not wrong—burying egg yolks in a tray of salt for a week and coming back to find little golden hockey pucks you can then shave onto pasta and risotto does make you feel like a poor man’s Ferran Adrià. But to use salted eggs as a mere garnish is like watching The Expendables for the character development—you’re missing the point.

The traditional method for making ham dan (Cantonese for salted eggs) dates back to the 6th century, and the process has remained largely unchanged. Whole eggs (usually duck eggs because of their fattier flavor), raw with the shell still intact, are left to soak in a 15 to 20 percent concentrated salt brine for several weeks. In places like the Philippines and Malaysia, you’ll find these eggs wrapped in a salted paste of clay or ash. Both methods operate under the same principle: With time, the salt penetrates through the porous shell, dissolving the strands of protein called albumin in the whites and solidifying the yolk, drawing out the Parmesan-like umami within.

In Chinese cuisine, salted egg is as common as garlic in stir-fries and red dates in soup. It gets smushed up and haphazardly mixed into plain congee, with its speckles of yolk providing little bursts of rich salinity. It also gets cooked into sam wong dan—a steamed egg custard made with chicken egg, salted egg, and century egg (a Chinese delicacy of alkaline-preserved eggs). But perhaps most iconically, these yolks of sunshine are found in mooncakes eaten during Mid-Autumn Festival. The luminous orange yolk not only acts as a foil to the saccharine lotus paste filling; it also serves as a reflection of the full moon that shines bright in the night sky during the festival.

Salted egg mooncake

Here in Malaysia, we mash the salted yolks to cook them down with sugar, curry leaves, and bird’s eye chiles on the stove, resulting in an aromatic, pasty sauce. And it’s this sauce that we’ve slathered onto every dish conceivable; its punchy, sweet-smelling savoriness gives dishes an umami quality reminiscent of cheddar-dusted pretzels or Five Guys’ cajun fries.

This golden custard has flowed like lava in Kuala Lumpur. It’s filled into baos, tossed into pasta and ramen like an Asian spin-off of carbonara, and coated on deep-fried scampis and squids. This sauce really takes no hostages, as it’s even poured onto burger patties, where the thick sauce clings to the meat like gloopy American cheese; served as a dip for crudités and fries, and folded into croissants and cakes, where the flavor of salted egg brings about a sweet-salty balance not unlike sea-salt-spiked chocolate.

Even in convenience-store snacks, salted egg gets treated like sour cream and onion powder. Walking through any supermarket aisle and you’ll find find shimmering illustrations of salted egg yolks emblazoned on packets of potato and cassava chips, boxes of pineapple tarts oozing with its custard filling, and salted-egg fish skins bearing mock warnings like “Dangerously Addictive” and “Sedap Giler,” a Malay slang phrase for “crazy good.” Most famously, the fish skins at Singapore’s Irvin’s—a snack company that solely manufactures salted-egg products—are known to sell out within two hours of opening, with tourists from China and Thailand flocking to their stands by the busload.

We’ve been bathing in an endless glut of salted-egg dishes, and its golden glint does not seem to be dimming anytime soon.

RECIPE: Salted Duck Eggs

Yi Jun Loh

Yi Jun Loh is a freelance writer and cook. An engineer by training, he immersed himself into the food industry right after graduating from Cambridge, learning to cook in Paris and then at Blue Hill at Stone Barns in New York. He is now based in Malaysia, obsessing over food culture and science through his blog Jun & Tonic.

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