Directions
<ol class="no-list-style"><li class="MethodStepper"><h4 class="step-title">Step 1</h4>Preheat your oven to 200°C. In a large bowl, combine the ground beef, breadcrumbs, eggs, minced garlic, thyme, parsley, Dijon mustard, Worcestershire sauce, salt, and pepper. Mix gently with your hands until just combined – overmixing will result in tough meatballs.</li><li class="MethodStepper"><h4 class="step-title">Step 2</h4>Form the mixture into 18-20 meatballs, each about 4-5cm in diameter. Place them on a plate and refrigerate for 15 minutes to firm up, which helps them hold their shape during cooking.</li><li class="MethodStepper"><h4 class="step-title">Step 3</h4>Heat 1 tablespoon olive oil in a large heavy-bottomed skillet over medium-high heat. Working in batches to avoid overcrowding, brown the meatballs on all sides (about 2 minutes per side). They don't need to be fully cooked through at this stage. Transfer to a plate lined with paper towels.</li><li class="MethodStepper"><h4 class="step-title">Step 4</h4>In the same skillet, reduce heat to medium-low. Add butter and remaining olive oil. Add the thinly sliced onions and bay leaves with a pinch of salt. Cook for 25-30 minutes, stirring occasionally, until the onions are deeply caramelized to a rich golden-brown. This slow caramelization process develops the signature sweet-savory flavor that makes French onion so distinctive.</li><li class="MethodStepper"><h4 class="step-title">Step 5</h4>Once onions are caramelized, sprinkle the flour over them and stir continuously for 1 minute to cook out the raw flour taste. Gradually add the wine, using a wooden spoon to scrape up any flavorful browned bits from the bottom of the pan. Allow the wine to reduce by half, about 2 minutes.</li><li class="MethodStepper"><h4 class="step-title">Step 6</h4>Pour in the beef stock and bring to a gentle simmer. Cook for 5 minutes until the sauce thickens slightly. Remove bay leaves and taste for seasoning, adding more salt and pepper if needed.</li><li class="MethodStepper"><h4 class="step-title">Step 7</h4>Transfer the caramelized onion mixture to your baking dish. Nestle the browned meatballs into the onion sauce, leaving a little space between each one.</li><li class="MethodStepper"><h4 class="step-title">Step 8</h4>In a small bowl, toss the bread cubes with melted butter and garlic powder until evenly coated. Sprinkle the grated Gruyère evenly over the meatballs and onions, then scatter the seasoned bread cubes on top.</li><li class="MethodStepper"><h4 class="step-title">Step 9</h4>Bake in the preheated oven for 20-25 minutes, until the meatballs are fully cooked (internal temperature of 70°C), the cheese is melted and bubbling, and the bread cubes have turned into golden croutons.</li><li class="MethodStepper"><h4 class="step-title">Step 10</h4>Remove from the oven and let rest for 5 minutes before serving. This allows the sauce to settle and the flavors to meld. Garnish with additional fresh thyme if desired. The finished dish should have tender, juicy meatballs, a rich onion gravy, gooey cheese, and crispy croutons that combine the best elements of French onion soup in a satisfying main course.</li></ol>