Ratatouille Froide: Cold Mixed Vegetable Stew
4
servings
Main
Course
Print Recipe
Ingredients
Directions
Ingredients
1 lb
white onions
Jump
c
olive oil
Jump
4 lg
firm, well-ripened tomatoes
Jump
1 lb
sweet peppers (red, yellow and green, mixed, or 1 large of each)
Jump
1 lb
eggplant (the small violet elongated variety, if available)
Jump
1 lb
baby zucchini (the smallest available, in any case)
Jump
6
cloves garlic
Jump
Salt
Jump
Tiny pinch of cayenne pepper
Jump
1 tsp
thyme leaves
Jump
A bouquet of parsley and 1 bay leaf, tied together
Jump
A handful of finely chopped parsley
Jump
Freshly ground pepper
Jump

This recipe comes from The French Menu Cookbook by the late, legendary Richard Olney. He wrote cookbooks that exalted simple home cooking, in the same tradition as Elizabeth David, and was a master practitioner of the long recipe. I like so many things about this one—for a dish that, in general, doesn’t really move me.

I like how he puts the prep instructions in the method, where they can be sufficiently detailed, rather than confining them to the ingredient list, where they can’t be. I like how he advises you to start cooking the onions before prepping the other ingredients (though I can’t forgive his omission of the ideal pot size), which is a practical suggestion that few short recipes have the space to provide. And in particular, I like this little master class on how to help normal people succeed at reducing a liquid: “[F]irst, the liquid will foam up—it must be rapidly stirred to prevent it from boiling over—then it will settle down to a loose, rapid boil, and finally, as it approaches the correct consistency, it will bubble in a more explosive way. There should be around 1/2 to 3/4 cup of syrupy liquid remaining….”

Not only can you be sure that these detailed instructions will help you succeed in making the dish if you decide to attempt it, but his obvious care in their construction might even convince even a ratatouille skeptic to get cooking in the first place.

Directions

  1. Peel the onions and cut each in quarters or eighths, depending on their size. Put them to cook gently in 1/3 cup of the olive oil while preparing the other vegetables. Stir from time to time and do not let them brown.
  2. Peel and seed the tomatoes and cut each half into 6 or 8 pieces. Cut the peppers in 2 lengthwise, discard the stems and all the seeds and cut them into pieces 3/4 to 1 inch square; wipe the eggplant and zucchini clean with damp paper towels and cut off the tip ends of both. Cut the eggplant into 3/4-inch cubes without peeling, and cut the zucchini crosswise into 1/2- to 1-inch sections, depending on its thickness. Smash the garlic cloves with the blade of a knife, discard the hulls, and chop the garlic.
  3. When the onions are yellowed and soft from cooking, add the peppers, the eggplant pieces, the garlic, salt, and cayenne. Continue to cook gently for 10 minutes or so, stirring occasionally with a wooden spoon, then add the tomatoes, the zucchini (if desired, the zucchini may be added halfway through the cooking process, for it cooks very rapidly, and if delayed it remains firmer), thyme, and the parsley and bay-leaf bouquet. At this point, one may turn up the flame until the boil is reached, easing a wooden spoon to the bottom of the cooking pot and stirring from time to time to prevent sticking. Leave to cook over a tiny flame, at a bare simmer, with the lid ajar, for 2 hours.
  4. Place a colander or sieve over another saucepan, pour in the vegetables and allow to drain well; then return the vegetables to their saucepan and to the fire, leaving the lid off (they will continue to give off liquid, which in this way evaporates in part). Place the saucepan containing the liquid over a very high flame and, stirring constantly with a wooden spoon, reduce it to a light, syrupy consistency (first, the liquid will foam up—it must be rapidly stirred to prevent it from boiling over—then it will settle down to a loose, rapid boil, and finally, as it approaches the correct consistency, it will bubble in a more explosive way). There should be around 1/2 to 3/4 cup of syrupy liquid remaining—pour it back into the vegetables and leave to cool.
  5. Add the remaining olive oil, half the chopped parsley, season with pepper (and more salt, if necessary), and mix together thoroughly, stirring carefully to avoid crushing the vegetables. Pour into the serving dish, chill thoroughly, and sprinkle with the remaining parsley before serving.

JJ Goode

JJ Goode helps great chefs write cookbooks.

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