A rich, deeply flavorful soup with caramelized onions, savory broth, and melted Gruyère cheese on top of crusty bread. Takes about 1.5 hours, mostly hands-off simmering time. Perfect for a cozy dinner or impressing guests with minimal effort.
Peel and thinly slice all the onions into even half-moon shapes. This ensures they cook uniformly. Don't worry about perfect slices — just aim for consistency.
In a large heavy-bottomed pot or Dutch oven, melt the butter with the olive oil over medium heat. Add all the sliced onions and a pinch of salt. Stir to coat everything in the fat.
Reduce heat to medium-low and cook the onions, stirring every 5-10 minutes, for 40-50 minutes. They should turn deep golden brown and sweet. If they start to stick or burn, lower the heat and add a splash of water. Patience here is key — this is where all the flavor develops.
Once the onions are deeply caramelized, add the minced garlic and fresh thyme leaves. Stir and cook for 1-2 minutes until fragrant. The garlic should soften but not brown.
Pour in the dry white wine and use your wooden spoon to scrape up all the browned bits stuck to the bottom of the pot. Let the wine simmer for 3-4 minutes until it reduces by half.
Pour in the beef broth, add the bay leaves, and a bit of black pepper. Stir well to combine. Bring the soup to a gentle boil, then reduce heat to low and let it simmer uncovered for 20-30 minutes to deepen the flavors.
Remove the bay leaves and taste the soup. Add more salt and pepper if needed. If you want a touch of sweetness to balance the savory depth, add a tiny pinch of sugar.
While the soup simmers, slice the baguette into 1-inch thick rounds. Arrange them on a baking sheet and lightly brush both sides with olive oil. Toast in a 375°F oven for 8-10 minutes until golden and crispy.
Position your oven rack about 6 inches from the broiler element and turn the broiler to high. You want it nice and hot for melting the cheese.
Ladle the hot soup into oven-safe bowls or crocks, filling each about 3/4 full. Place 1-2 toasted bread slices on top of each bowl so they float on the soup.
Generously cover each bread-topped bowl with shredded Gruyère cheese. Don't be shy — a thick layer of cheese is traditional and delicious. The cheese should drape over the edges of the bread.
Carefully place the bowls on a baking sheet (for easier handling and to catch drips) and slide under the broiler. Broil for 2-4 minutes, watching closely, until the cheese is melted, bubbly, and golden brown in spots. Don't walk away — broilers work fast!
Carefully remove the bowls from the oven using oven mitts — they'll be extremely hot. Let cool for 2-3 minutes, then serve with extra black pepper and fresh thyme on top if desired. Warn your guests that the bowls are hot!