April 29, 2020
1,000 Ways to Fry Rice
Article-Kimchi-Bokkeumbap

Here’s how to nail it, even when you’re winging it.

The takes hit my Gmail and Slack with fury, like a six-minute downpour in late summer, all prompted by a simple question: “How do you do fried rice?” Oakland chef Kyle Itani, who makes the dish once a week, says the secret ingredient is black pepper. TASTE columnist Priya Krishna does a “reverse fried rice” where she fries onions, mustard seeds, and curry leaves in ghee, then dumps the mixture into a pot of freshly cooked rice. Eater Los Angeles editor Matthew Kang chops up leftover jangjorim (chewy brisket braised in soy sauce and mirin) and tosses it with sesame oil, garlic, and furikake—before topping with some pickled ginger. TASTE’s Anna Hezel takes bacon, blanched kale, and peas (all from the freezer), and tosses them with ginger, onions, garlic, eggs, and kimchi.

These days, I have been thinking about fried rice a lot after revisiting the cookbook I wrote with Deuki Hong in 2016, Koreatown. In addition to our doenjang jjigae (yes, I’ll admit that I have a favorite child), I’ve made our kimchi fried rice with bacon and gochujang butter recipe the most—three times since our worlds turned upside down and virtually all meals have been made in my small Brooklyn kitchen. I love it, not just because it unites two impossibly obvious culinary bedfellows (kimchi and bacon), but because I can sort of fake my way through it every time, no matter how little I have on hand. Plus, there are few rules for fried rice. It’s a recipe (not-recipe) blueprint for this moment.

Although the protein you use, the aromatics, the vegetables, the sauce, and even the grain can be treated as choices based on what you have on hand, the one thing that never changes is the need for a very, very hot pan. “Every drop of soy sauce, or any liquid, added to the wok should sizzle fantastically,” says Jenny G. Zhang, staff writer at Eater. High heat is key, and the dish is almost always cooked in phases (according to most of my friends), to optimize the heat source and avoid crowding ingredients. Again, though, no rules.

Start with the protein (bacon, bulgogi, egg) and cook it in a neutral vegetable oil, or sesame oil, and set it aside. Then add the guts—like ginger, garlic, onions, kimchi, diced raw carrots, frozen peas, along with the cooked rice—and cook it down a bit. Dump the protein back in, then add your liquid components—soy sauce, sambal, shrimp paste, kimchi juice, fish sauce, gochujang butter—and cook it down even more, until it hits that fried rice consistency. I like my fried rice crispy, so I press it down into the wok for a little bit of a Spanish socarrat effect. Add thinly sliced scallions, sesame seeds, and a fried egg for a fancy finish. Serve right away, unless you get distracted by an episode of ZeroZeroZero and let it sit there for 20 minutes. You will be okay.

Everyone who’s ever fried rice has brought some nuance to the process. Itani likes to season his oil with lots of black pepper so that it toasts. TASTE’s Tatiana Bautista adds curry powder. When writer Max Falkowitz makes clay-pot rice, his leftovers become a fried rice made with fish sauce and a dark Thai chile paste. Writer Lukas Volger, via wok master Grace Young, clears away a space in the center of the pan to pour in the soy sauce, then lets it bubble for a few seconds while it caramelizes. Many recipes will tell you that day-old (dried-out) rice is essential for crispy fried rice. Those recipes are not wrong, but it’s not necessarily the rule.

Kang likes to make extra rice and store it in freezer bags for easy access. “I microwave for two and a half minutes, to defrost, and it’s basically in perfect shape,” he says. TASTE columnist Cathy Erway has found that chewier brown rice works okay to use fresh out of the rice cooker. And leftovers? “It’s best reheated in the wok again,” says Zhang. Or, use your fried rice v1 and start the process all over again with v2.

Here, we’ve included four fried rice recipes that can serve as starting points, as well as some extra fried rice reading below. Sure, they aren’t required, but it’s nice inspiration from some great food writers and cookbooks.

kimchi fried rice

Ketchup Fried Rice
A recipe derived from yōshoku—the Japanese style of cooking that interprets Western recipes. Kimchi and Heinz play a leading role.

Indonesian-Style Fried Rice
In the island nation, sambal is served as a condiment with many meals, including in fried rice, and uses the sweet soy sauce kecap manis.

Kani Ankake: Crab Fried Rice
This is more of a project fried rice from the incredible cookbook Japanese Soul Food. Crab is the star, and a thickening sauce called ankake is used.

Kimchi Fried Rice Bowl
A vegetarian version of kimchi fried rice, featuring a unique play with shredded lettuce, from Lukas Volger’s great book Bowl.

READ MORE WORDS ABOUT FRIED RICE!

Matt Rodbard

Matt Rodbard is the editor in chief of TASTE and author of Koreatown: A Cookbook, a New York Times best-seller.

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