Soups & Stews
This 99 French onion soup recipe delivers the quintessential comfort of Parisian bistros—deeply caramelized onions, rich beef broth, and a golden blanket of Gruyère that transforms simple bread into crispy perfection. The secret lies in slow, patient caramelization, where onions develop complex sweetness over 45 minutes, forming a flavor base that builds layer upon layer of depth. This isn't just soup; it's a symphony of textures and aromas that warms the soul on chilly evenings.
What sets this recipe apart is the balance between tradition and modern efficiency. While purists insist on hours of onion caramelization, I’ve included a pressure cooker shortcut for the broth—cutting time without sacrificing flavor. The key to the crispy bread topping? Toasting it until golden before adding cheese, ensuring every bite delivers that satisfying crunch. Gruyère’s nutty richness melts into a bubbly, golden crust when baked, creating the iconic "99" effect that makes this dish legendary.
The result is a bowl of soup that’s velvety yet robust, with onions so tender they melt at the first spoonful, and a bread topping that’s crisp enough to stand alone. The aroma alone—warm beef broth infused with caramelized onions and thyme—will have your kitchen smelling like a Parisian café. This is the kind of dish that turns ordinary weeknights into memorable meals, where every spoonful feels like a little taste of France.
Serve with a sprinkle of fresh parsley for brightness or a drizzle of truffle oil for extra luxury. Whether you’re cooking for a cozy dinner or a gathering of friends, this recipe delivers restaurant-quality results that are impossible to resist. Let’s get started on creating your own masterpiece.
Ingredients for 99 french onion soup
Simple ingredients that transform into the iconic French bistro classic.
| Ingredient | Amount | Notes |
|---|---|---|
| Yellow Onions 🧅 | 4 whole | Sliced thinly for caramelization |
| Beef Broth 🍲 | 6 cups | Homemade or high-quality store-bought |
| Gruyère Cheese 🧀 | 1 ½ cups | Freshly grated, not pre-shredded |
| Baguette 🍞 | 1 whole | Crust removed, sliced into strips |
| Unsalted Butter 🧈 | 4 tbsp | For caramelizing onions |
| Fresh Thyme 🌿 | 1 tbsp | Leaves only, chopped finely |
| Garlic Cloves 🧄 | 4 cloves | Minced for depth of flavor |
| Olive Oil 🫒 | 2 tbsp | For sautéing onions |
| Dry White Wine 🍷 | ½ cup | Optional, for deglazing |
| Salt 🧂 | 1 ½ tsp | Kosher or sea salt |
| Black Pepper 🌶️ | ½ tsp | Freshly ground for warmth |
| Fresh Parsley 🌿 | ¼ cup | Chopped, for garnish |
| Truffle Oil 🍯 | 1 tbsp | Optional, for luxury touch |
The onions are everything here—4 large yellow onions sliced paper-thin for maximum surface area. Whole Foods or Trader Joe's carry the best for this, but any grocery store will do. Look for onions that feel firm and smell sweet, not pungent. The butter matters too—unsalted so you control the seasoning. I always grab European-style butter like Plugrá if I'm feeling fancy, but regular works just fine. For the Gruyère, avoid pre-shredded—it gets gummy when melted. Buy a wedge and grate it yourself.
No white wine? Substitute extra beef broth with a splash of balsamic vinegar—it adds depth without alcohol. Fresh thyme is ideal, but dried works at half the amount. The baguette? Any crusty French bread will do—Sara Lee even works in a pinch. Short on time? Pressure cook the broth for 20 minutes instead of simmering—same rich flavor, way faster. For extra richness, add a splash of heavy cream at the end, but it's not traditional.
This soup tastes even better the next day—3-4 days in the fridge, covered. The bread topping? Toast it fresh before serving so it stays crisp. Store leftovers with the broth separate from the bread topping—re-toast the bread and re-melt the cheese before serving. Freezes beautifully for up to 2 months—just thaw the broth and reheat the bread separately. The truffle oil? Use sparingly—it's pricey, but a little goes a long way.
Why You'll Love This Recipe
- One-Pot Magic: I swear by this recipe because it’s all about one pot—just onions caramelizing in butter until they’re sweet and jammy, then beef broth simmering away while I slice the bread. No chopping boards to wash, no extra pans to scrub.
- Cheese Pull Factor: That moment when the Gruyère melts into golden, bubbly perfection over the toasted baguette? Yes. It’s rich, salty, and just salty enough to make you crave another sip—no sad, flavorless cheese here.
- Weeknight to Party: I’ll make this on a Tuesday when I’m too tired to think, then serve it at my friend’s holiday gathering. The same simple steps work for both—just double the batch if you’re feeding a crowd, and no one will guess it took less than 30 minutes.
- Budget Warmth: Onions and broth stretch for days, and a block of Gruyère lasts longer than you’d think. I’ve reheated leftovers for lunch with fresh bread, and it’s still ridiculously good—proof that comfort food doesn’t have to break the bank.
Step-by-step instructions for French onion soup
Here's how to make this classic comfort food with a golden cheese crust and rich, caramelized flavor.
Caramelize the Onions Slowly
Slice the 4 whole yellow onions paper-thin, about 1/16-inch thick. Heat 2 tablespoons olive oil and 4 tablespoons unsalted butter in a large Dutch oven over medium-low heat. Add the onions and sprinkle with 1 teaspoon salt and 1/4 teaspoon black pepper.
Cook for 40-45 minutes, stirring occasionally, until the onions are deep golden brown and almost jam-like in texture. This slow process develops the natural sugars into sweet caramelization. If they start to darken too quickly, reduce the heat. You'll know it's ready when the onions release easily from the pan and have a rich, sweet aroma.
Here's the thing—don't rush this step. The deeper the caramelization, the more complex the flavor. If you see any browned bits sticking to the bottom, add a splash of water to deglaze and scrape them up. These bits are pure flavor.
Build the Broth and Flavor Base
Add the 4 cloves minced garlic and 1 tablespoon chopped fresh thyme to the caramelized onions. Cook for 1 minute until fragrant, stirring constantly. Pour in the 6 cups beef broth and bring to a gentle simmer over medium heat.
For that extra depth, add the 1/2 cup dry white wine now and let it simmer for 5 minutes to integrate the flavors. Taste and adjust seasoning with more salt and pepper if needed. The broth should be rich and flavorful, with the caramelized onions fully incorporated. Let it simmer uncovered for 15 minutes to develop the flavors further.
I like to stir occasionally to prevent skin from forming, but don't over-stir or you'll break up the onions. The soup should be velvety smooth with chunks of caramelized onion throughout.
Toast the Baguette Strips
While the soup simmers, remove the crust from the 1 whole baguette and slice it into 1/2-inch thick strips. Heat 1 tablespoon olive oil in a large skillet over medium heat.
Add the baguette strips in a single layer and toast for 2-3 minutes per side until golden brown and crisp. They should be just crisp enough to hold their shape but still soft enough to melt into the soup. Remove and set aside on a paper towel-lined plate to keep them crisp.
Don't overcrowd the pan or the bread will steam instead of toast. If you need to do it in batches, work quickly so the bread stays hot when you serve it. The toasted bread is what makes this soup so satisfying—it soaks up all that rich broth.
Assemble and Bake to Perfection
Preheat your oven's broiler to high. Ladle the hot soup into 4 oven-safe bowls, dividing it evenly. Place 2-3 baguette strips in each bowl so they float on top of the soup.
Sprinkle each bowl generously with 1.5 cups freshly grated Gruyère cheese, dividing it evenly. Place the bowls on a baking sheet and broil for 2-3 minutes until the cheese is bubbly and golden brown on top. Watch closely—the cheese melts quickly and can burn easily.
For that extra luxury touch, drizzle each bowl with 1/4 teaspoon truffle oil right before serving. The aroma alone will make your guests swoon. Garnish with 1 tablespoon chopped fresh parsley for a pop of color and freshness.
Serve Immediately
Let the soups rest for 1 minute after coming out of the broiler—this allows the cheese to set slightly and makes it easier to serve. The cheese should be golden and bubbly on top with crispy edges, while the baguette strips remain toasted and sturdy enough to hold.
Serve each bowl right away with a spoon and a side of crusty bread for dipping. The contrast between the velvety soup, crispy bread, and melted cheese is what makes this dish so irresistible. Each bite should deliver layers of caramelized onion, rich broth, and that perfect balance of crispy and creamy textures.
Real talk: If you make this ahead of time, don't assemble the bowls until just before serving. The cheese needs to be freshly melted and bubbly to achieve that restaurant-quality finish. The flavors only get better as they sit, so if you have leftovers, reheat gently and broil the cheese again before serving.
Pro Tips For Making 99 French Onion Soup
- Caramelize Slowly: I learned this the hard way—rushing the onions turns your soup into a sad, watery mess. Use a heavy pot (Dutch oven if you have one) and cook the onions on medium-low heat for at least 45 minutes, stirring every 5-10 minutes. They should turn deep amber, almost sticky, before you even think about adding broth. No shortcut here—this is where the flavor lives.
- Use Two Broth Batches: Most recipes call for one batch of beef broth, but I double it—first batch for cooking the onions (discard after caramelizing), then second batch for the actual soup. The first batch extracts all the bitter, sweet goodness from the onions, while the second keeps the soup rich without overpowering it. Sounds like extra work, but it’s the thing that matters most.
- Toast the Baguette Right: Skip the pre-slicing—toast whole baguettes in the oven at 375°F (190°C) for 8-10 minutes until they’re golden and crisp. Then slice them after toasting. This guarantees a sturdy crust that won’t turn to mush when melted cheese floods it. (Yes, even if you’re impatient like me.)
- Cheese Matters—Don’t Skimp: Gruyère is non-negotiable here, but buy the good stuff—pre-shredded cheese is full of anti-caking agents that make the topping grainy. Grate your own and mix it with a splash of cold water before melting to make it smoother. Also, cover the soup while the cheese melts—this traps heat and gives you that perfect, gooey blanket instead of a sad, uneven puddle.
Essential equipment for 99 french onion soup
Dutch Oven
The heart of this recipe is a heavy-bottomed Dutch oven—it's essential for even heat distribution during the 40-45 minute onion caramelization. I use a Le Creuset 6-quart for its durability and heat retention, but any enameled cast iron (like Lodge or All-Clad) works perfectly. The deep sides prevent spills when stirring, and the material maintains consistent medium-low heat without hot spots. For smaller batches, a 5-quart Dutch oven still works, but leave extra space between onions to prevent crowding. 🔥
Skillet for Toasting
A large stainless steel skillet (like All-Clad or Calphalon) is ideal for toasting the baguette strips—its flat surface ensures even browning. I avoid nonstick pans here because they can make the bread too soft. Heat the skillet over medium heat and use 1 tablespoon olive oil to coat the strips lightly. For extra crispiness, I like to add a pinch of salt while toasting. If you're short on skillets, a cast iron griddle works too, but watch the heat closely to avoid burning.
Oven-Safe Bowls
Choose deep, oven-safe bowls (like Corelle or Le Creuset stoneware) that can handle broiler heat without cracking. The bowls should be large enough to accommodate 2-3 baguette strips per serving without overflowing. If you're using glass baking dishes, ensure they're tempered (like Pyrex) to prevent thermal shock. For a rustic touch, I sometimes use individual oven-safe ramekins—they look stunning when served. Always preheat the broiler for 2-3 minutes before adding the bowls to ensure even melting.
Cheese Grater
Freshly grated Gruyère makes all the difference—pre-shredded cheese contains anti-caking agents that prevent proper melting. I use a microplane for ultra-fine shreds, but a box grater (like OXO Good Grips) works too. For extra efficiency, grate the cheese directly over the bowls while they're still hot from the broiler. If you're short on time, block cheese (like Comté) can substitute, but Gruyère's nutty flavor is irreplaceable. Store any extra grated cheese in an airtight container in the fridge for up to 3 days.
Thermometer
A candy or instant-read thermometer (like Thermoworks Thermapen) helps monitor the broiler temperature and soup consistency. The ideal broiler temp is 450-500°F—too low, and the cheese won’t melt properly; too high, and it burns. For the broth, aim for a gentle simmer (205-212°F) to prevent skin formation. If you don’t have a thermometer, use the finger test: lightly touch the soup surface—it should ripple but not bubble vigorously. For the onions, they’re ready when they’re deep golden brown and almost jam-like. 🌡️
Optional Luxury Tools
For the truffle oil finish, a small squeeze bottle (like Mason jar with a lid) makes drizzling effortless. For garnishes, kitchen shears (like OXO Good Grips) trim fresh parsley quickly. If you love wine, a carafe (like Le Creuset) keeps your ½ cup dry white wine chilled while you cook. And for storage, glass Pyrex containers preserve flavors better than plastic for leftovers. These extras aren’t required, but they elevate the dish from homemade to restaurant-worthy with minimal effort.
Nutrition facts
Frequently asked questions
Can I make this soup without wine?
Skip the white wine and substitute with an extra ½ cup beef broth plus 1 tablespoon balsamic vinegar for depth. The vinegar mimics the acidity of wine, helping balance the richness of the caramelized onions and Gruyère. For a completely alcohol-free version, use apple cider vinegar instead—it adds a subtle sweetness that pairs beautifully.
How do I get the bread topping extra crispy?
The secret is toasting the baguette strips properly before adding them to the soup. Use a large stainless steel skillet over medium heat with just 1 tablespoon olive oil—don't overcrowd the pan. Toast for 2-3 minutes per side until golden brown and crisp. For extra crunch, sprinkle with a pinch of salt while toasting. Pro tip: Keep the toasted bread on a wire rack (not paper towels) to maintain crispiness until serving.
Can I use a different cheese?
Gruyère is ideal for its nutty flavor and melting properties, but you can substitute with Comté or Emmental for similar results. Avoid cheeses like cheddar or mozzarella—they don't melt as smoothly. For a vegetarian version, try vegan Gruyère (like Violife) or nutritional yeast for a cheesy flavor. Just remember, freshly grated cheese melts best—never use pre-shredded varieties.
Why does my soup taste bland?
Most likely, your onions weren't caramelized enough. The key is slow cooking over medium-low heat for 40-45 minutes—this develops the natural sugars into deep, sweet flavors. If your soup tastes flat, try adding 1 teaspoon soy sauce or ½ teaspoon smoked paprika for umami depth. Also, taste the broth before adding the bread—season with more salt or a splash of fish sauce if needed.
How far ahead can I prepare this?
You can make the soup base up to 3 days ahead and store it in the fridge. Reheat gently on the stove, then assemble the bowls with fresh toasted bread and cheese just before serving. For the bread topping, toast it fresh—it loses crispiness when reheated. The flavors actually improve overnight as the caramelized onions meld with the broth. For freezer storage, freeze the soup base (without bread) for up to 2 months—thaw and reheat before assembling.
