Soups & Stews
This 99 French onion soup recipe delivers the ultimate comfort in every spoonful—deeply caramelized onions, velvety beef broth, and a golden, crispy Gruyère crown that melts into rich, creamy perfection. The secret lies in slow-cooking onions until they're dark amber and sweet, then reducing the broth to an intense, savory base before topping with layers of toasted bread and melted cheese. I've perfected this version to balance traditional techniques with modern convenience, so you get restaurant-quality results without spending hours in the kitchen.
The magic happens in three key steps: caramelizing onions until they're tender and sweet (about 45 minutes), simmering the broth until it's rich and concentrated, and baking the soup until the cheese forms a blistered, golden crust. This isn't just soup—it's a hearty, satisfying meal that feels like a warm hug on a chilly day. The combination of textures—creamy broth, crispy bread, and gooey cheese—makes it impossible to resist that first bite.
By the time you serve this dish, your kitchen will smell like a Parisian bistro, and your guests will be reaching for seconds. The crispy Gruyère crown is the star, but the real soul comes from the slow-cooked onions and deeply flavorful broth. This recipe is perfect for cozy nights in, dinner parties, or even a special treat when you need something comforting and indulgent.
Pair it with a glass of red wine or a side of crusty bread to soak up every last drop of that savory broth. The best part? You can make it ahead and bake it just before serving, so the cheese stays perfectly crispy. Let's get started on this timeless classic that's sure to become a family favorite.
Ingredients for 99 french onion soup
Fourteen ingredients transform into that perfect French bistro classic—crispy, creamy, and impossible to resist.
| Ingredient | Amount | Notes |
|---|---|---|
| Yellow Onions 🧅 | 4 whole | Large, yellow or sweet variety |
| Unsalted Butter 🧈 | ¾ cup | Cold, cut into small cubes |
| Beef Broth 🍲 | 6 cups | Homemade or high-quality store-bought |
| Dry White Wine 🍷 | ½ cup | Chardonnay or Sauvignon Blanc |
| Fresh Thyme 🌿 | 1 tbsp | Leaves only, finely chopped |
| Garlic Cloves 🧄 | 4 cloves | Minced, not pre-minced jarred |
| All-Purpose Flour 🌾 | 2 tbsp | For thickening broth |
| Heavy Cream 🥛 | ½ cup | Full-fat for creaminess |
| Gruyère Cheese 🧀 | 1 ½ cups | Freshly grated, not pre-shredded |
| Baguette 🥖 | 1 whole | Crusty, sliced into 1/2-inch pieces |
| Olive Oil 🫒 | 2 tbsp | For toasting bread |
| Salt 🧂 | 1 ½ tsp | Kosher or sea salt |
| Black Pepper 🌶️ | ½ tsp | Freshly ground |
| Dried Parsley 🌿 | 1 tsp | For garnish |
The onions are non-negotiable—yellow or sweet varieties caramelize best. Whole Foods or Trader Joe's have great bulk bins if you're doing a big batch. Look for onions with dry skins and no soft spots. The Gruyère is the star, so skip the pre-shredded stuff—it gets clumpy. Grab a wedge from the deli counter and grate it yourself. For the beef broth, homemade is ideal, but Kitchen Basics or Pacific Foods brands are solid store-bought options. The wine adds depth, but don't stress about the exact variety—just make sure it's dry.
No white wine? Chicken broth with a splash of apple cider vinegar works in a pinch. Fresh thyme is ideal, but dried at one-third the amount gets you close. The flour is for thickening—Diamond Crystal kosher salt dissolves better than table salt. For the bread, baguettes from the bakery section (not the pre-packaged ones) stay crispier. If you can't find Gruyère, Comté or Emmental are decent swaps, but Gruyère's nutty flavor is what makes this dish special. The baguette pieces should be about 1/2-inch thick—thinner slices burn faster.
The caramelized onions keep for 5 days in the fridge—perfect for making soup ahead. The bread topping stays crispy if you assemble the soup just before baking. Store leftovers in the fridge for 3-4 days, but honestly, it's even better reheated the next day. The cheese crown is best eaten fresh, so plan to serve it right after baking. If you make extra broth, freeze it for up to 3 months—it's perfect for future soups or braising.
Why You'll Love This Recipe
- One-Pot Magic: I swear by this recipe because it’s literally one pot—no chopping boards, no extra pans, just onions caramelizing in butter until the kitchen smells like a Parisian bistro. The beef broth and white wine do the heavy lifting while I sip my coffee.
- Caramelized Gold: That first bite of crispy onions on toasty bread? Chef’s kiss. The slow cook in butter turns them into sweet, jammy layers, and the thyme? It’s like a little herbal hug in every spoonful—rich, savory, and just a touch bright.
- Date Night or Lazy Sunday: Between us, this soup is my go-to for both fancy dinners and "I can’t be bothered" days. Drizzle with Gruyère, broil until bubbly, and suddenly you’ve got a restaurant-worthy dish—or reheat leftovers for a cozy lunch with zero guilt.
- Budget-Friendly Luxury: Onions and broth are cheap, but the flavor? Next-level. A splash of wine elevates it from "weeknight dinner" to "I actually cooked something special," and the leftovers keep for days—perfect for when you’re broke but still want to feel spoiled.
Step-by-step instructions for perfect French onion soup
Here's how to transform simple ingredients into a restaurant-worthy bowl of French onion soup.
Caramelize the Onions Slowly
Cut the 4 whole yellow onions in half and slice them paper-thin. Melt the 0.75 cup unsalted butter in a large pot over medium heat. Add the onions and stir to coat completely. Here's the thing—you want to cook them for about 45 minutes, stirring occasionally, until they're deep golden brown and caramelized. This is where all the magic happens, so don't rush it.
When the onions are nearly done, add the 1 tbsp fresh thyme and the 4 minced garlic cloves, cooking for another 2 minutes until fragrant. The onions should be soft and jammy with a rich, sweet aroma. If they start to stick, add a splash of water and scrape up any browned bits from the bottom of the pot—those are packed with flavor.
Build the Rich Broth Base
Deglaze the pot with the 0.5 cup dry white wine, scraping up all those caramelized onion bits from the bottom. Let it simmer for 2 minutes until the alcohol smell disappears. Stir in the 2 tbsp all-purpose flour and cook for 1 minute to remove the raw taste. Slowly pour in the 6 cups beef broth while whisking constantly to prevent lumps.
Bring the mixture to a gentle simmer and let it cook uncovered for 20 minutes. This reduces the broth slightly and deepens the onion flavor. Season with the 1.5 tsp salt and 0.5 tsp black pepper. The soup should be rich and aromatic—if it's too thick, add a little water to reach your desired consistency. Remember, we're aiming for that creamy texture promised in the title.
Finish with Cream and Prepare the Cheese Topping
Reduce the heat to low and stir in the 0.5 cup heavy cream. Let it warm through for 2 minutes—just enough to heat the cream without curdling it. Taste and adjust seasoning if needed. While the soup simmers, grate the 1.5 cups gruyère cheese. I like to use a fine grater so it melts smoothly into a creamy blanket on top.
Toast the 1 whole baguette slices in a separate pan with the 2 tbsp olive oil until golden and crisp. This is crucial—you want that perfect crunch contrast to the creamy soup. Keep the toasted bread warm while you assemble the final bowls.
Assemble and Bake to Perfection
Preheat your broiler to high. Ladle the warm soup into oven-safe bowls, placing 2-3 slices of toasted baguette on top of each serving. Sprinkle each bowl generously with the grated gruyère cheese. Here's where it gets exciting—the cheese should melt into a golden, bubbly blanket while the bread stays crisp.
Broil for 3-5 minutes until the cheese is golden brown and bubbly. Watch it closely—it burns quickly! Remove from the broiler and let sit for 1 minute before serving. Garnish with the 1 tsp dried parsley for a pop of color. Each bite should deliver that perfect combination of crispy, creamy, and rich onion flavor we're after.
Pro Tips For Making 99 French Onion Soup
- Sweat, Don’t Burn: The onions need 40-45 minutes at low heat—yes, it’s long, but this is where the magic happens. After 20 minutes, I learned to check for browning (not blackening) and stir occasionally. Skip the rush, or you’ll end up with bitter bits instead of caramelized sweetness. ---
- Salt the Butter: Unsalted butter needs seasoning early. Toss in a pinch of salt with the butter before melting—it balances the onions’ natural sweetness and cuts through the richness later. I used to forget, and the broth always tasted flat afterward. ---
- Deglaze Aggressively: After the onions caramelize, pour in the wine all at once and let it bubble hard for 2 minutes. Scrape the browned bits off the bottom with a wooden spoon—this is where the flavor hides. I used to swirl it gently, and the soup never tasted as deep. ---
- Simmer, Don’t Boil: Reduce the broth to a gentle simmer, not a rolling boil, or you’ll cook off the wine’s acidity and dull the thyme’s aroma. Cover it loosely and let it bubble softly—this keeps the soup rich without turning it into a watery mess. I burned through three batches before I got it right.
Dietary considerations for this recipe
Gluten-Free Adaptations
French onion soup traditionally contains flour as a thickener, but you can easily adapt this recipe with cornstarch or arrowroot powder. Replace the 2 tbsp all-purpose flour with 2 tbsp cornstarch mixed with 1 tbsp cold water, then whisk it into the wine before adding the broth. For extra richness, use ½ cup gluten-free beef broth (brands like Pacific Foods or Imagine work well) and skip the flour entirely—just reduce the broth longer for thickness. 🌾
Dairy-Free Options
Skip the heavy cream and gruyère, then use ½ cup coconut cream (full-fat) for richness and ½ cup shredded dairy-free mozzarella (like Miyoko's or Violife) for the topping. For extra flavor, add 1 tbsp nutritional yeast to the broth. The texture won’t be identical, but it’s still comforting and delicious! 🥛
Vegetarian Swaps
Replace the beef broth with 6 cups vegetarian mushroom broth (try Imagine or Pacific Foods brands) and use vegetable-based wine (like a dry white). For umami depth, add 1 tbsp soy sauce or 1 tsp miso paste to the caramelized onions. The Gruyère can stay, but if you’re avoiding all dairy, use Violife or Miyoko’s dairy-free cheese. 🌱
Low-Carb Version
Use cauliflower rice instead of baguette slices—sauté it with 1 tbsp olive oil until crispy. For the broth, thicken with 1 tbsp xanthan gum (mixed with 2 tbsp water) instead of flour. Skip the heavy cream and use ¼ cup unsweetened almond milk for a lighter touch. The flavor stays rich, but the carb count drops significantly! 🥬
Allergen-Friendly Tips
If nut allergies are a concern, avoid the coconut cream swap and use oat milk instead. For gluten-free and dairy-free combined, Miyoko’s makes a great dairy-free cheese that’s also gluten-free. Always double-check labels—some broths and wines contain hidden gluten. I keep Pacific Foods broth on hand for these adaptations because it’s consistently reliable. 💡
Nutrition facts
Frequently asked questions
Why do the onions need to caramelize for so long?
Slow caramelization (about 45 minutes) transforms onions into sweet, jammy bits that form the soul of this dish. The long cooking time develops complex sugars and deep flavors that can't be achieved quickly. This step is non-negotiable for authentic taste—rushing it will leave your soup bland and one-dimensional.
Can I make this soup ahead of time?
The caramelized onions can be prepped 5 days in advance and stored in the fridge. For the full soup, assemble bowls (without baking) up to 24 hours ahead, then broil just before serving. This keeps the bread crispy and cheese perfectly melted. The broth flavor actually improves overnight!
What's the best cheese for the topping?
Gruyère is ideal—its nutty flavor and meltability create that signature golden crust. For alternatives, try Comté or Emmental, but avoid pre-shredded cheese (it contains anti-caking agents that prevent proper melting). If you're dairy-free, Violife or Miyoko's dairy-free cheeses work surprisingly well.
How do I prevent soggy bread?
Toast the baguette slices until golden and crisp before adding to the soup. Use a separate pan with olive oil and keep them warm while assembling. For extra insurance, place the bread on top right before broiling—this creates that perfect crunch contrast against the creamy broth.
Can I use chicken broth instead of beef?
Yes, but the flavor will be lighter. For a chicken version, use 6 cups rich chicken broth and add 1 tsp chicken bouillon powder to deepen the taste. The caramelized onions will still provide sweetness, but the umami profile will differ. For best results, use a high-quality broth like Kitchen Basics or Pacific Foods.
