Soups & Stews
The 99 Restaurant French onion soup delivers restaurant-quality comfort in a bowl, with layers of caramelized onions, rich beef broth, and a golden, crispy Gruyère topping. This recipe captures the signature techniques that make it legendary—slow-cooked onions and beef broth that develop deep, savory flavors while keeping the texture perfectly tender. The secret lies in patience: letting the onions caramelize slowly over low heat for hours, creating a sweet, jam-like base that forms the heart of this dish.
What sets this apart is the crispy bread topping, toasted until golden and studded with melted Gruyère that bubbles at the edges. The broth is built with beef bones and aromatics, simmered until it’s velvety and packed with umami. Every spoonful balances sweetness, saltiness, and richness, making it a dish that feels like a hug on a chilly day. The key is timing—caramelizing the onions first, then building the broth while they cool, so their flavors meld seamlessly.
By the time you serve it, you’ll have a bowl of restaurant-quality French onion soup with a crispy, cheesy crust that’s impossible to resist. The contrast of the warm, creamy broth against the cool, toasted bread makes every bite satisfying. This recipe is designed to impress, whether you’re feeding a family or hosting dinner guests. The result? A dish that tastes like it came straight from the iconic 99 Restaurant.
Ready to recreate this classic? The process is methodical but rewarding, with each step—from caramelizing to baking—critical for that perfect balance of textures and flavors. Let’s get started on a bowl of warmth and comfort that’s as delicious as it is nostalgic.
Ingredients for 99 restaurant french onion soup
Pantry staples meet restaurant magic in this legendary French onion soup.
| Ingredient | Amount | Notes |
|---|---|---|
| Yellow Onions 🧅 | 4 large | Thinly sliced, about 1.5 lbs total |
| Beef Bones 🦴 | 2 lb | Knuckle or marrow bones preferred |
| Beef Broth 💧 | 6 cups | Homemade or high-quality store-bought |
| Dry White Wine 🍷 | ½ cup | Like Sauvignon Blanc or Chardonnay |
| All-Purpose Flour 🌾 | 2 tbsp | For thickening broth |
| Salt 🧂 | 1 ½ tsp | Kosher or sea salt |
| Black Peppercorns 🌶️ | ½ tsp | Crushed, freshly ground |
| Fresh Thyme 🌿 | 2 sprigs | Or 1 tsp dried thyme |
| Garlic Cloves 🧄 | 4 cloves | Minced, for aromatics |
| Baguette 🍞 | 1 whole | Crusty, day-old preferred |
| Gruyère Cheese 🧀 | 1 cup | Freshly grated, aged |
| Unsalted Butter 🧈 | 2 tbsp | For toasting bread |
| Olive Oil 🫒 | 2 tbsp | For caramelizing onions |
| Bay Leaves 🍃 | 2 whole | For broth depth |
The onions are everything. Yellow onions with a sweet bite work best—avoid red or white. Whole Foods or Trader Joe's usually carry the freshest. Thinly slice them (about 1/8-inch thick) so they caramelize quickly. The key is patience: low heat for hours until they're golden and jammy. No shortcuts here. For the beef bones, Costco or local butchers often have knuckle bones—ask for marrow bones if you want extra richness. The broth builds all the flavor, so don't skimp on quality.
No wine? Substitute extra beef broth with a splash of apple cider vinegar for acidity. Fresh thyme is ideal, but dried works at one-third the amount. The baguette should be crusty and stale—perfect for toasting. If you can't find Gruyère, Comté or Emmental work in a pinch. For the butter, Plugrá or Land O'Lakes are reliable brands. The flour is just for thickening—King Arthur or Bob's Red Mill are great choices. If you're making this ahead, caramelize the onions first and store them separately—they keep for 3 days in the fridge.
This soup tastes even better the next day—4-5 days in the fridge, 3 months frozen. The bread topping gets crispier when reheated, so save the best pieces for serving. For a crowd, double the broth and onions but keep the bread topping portions small—it's meant to be shared. Store the broth and caramelized onions separately in airtight containers. The cheese should be grated fresh before serving—pre-grated gets clumpy and doesn't melt as beautifully.
Why You'll Love This Recipe
- One-Pot Magic: I swear by this recipe because it’s all in one pot—no chopping chaos, no messy pans. The onions caramelize right in the broth while you simmer the beef bones, and by the time you’re toasting the bread, the kitchen looks cleaner than it did when you started.
- Deep Umami Bomb: That beef bone broth? Chef’s kiss. It’s the secret weapon—rich, slow-simmered, and packed with flavor that makes every spoonful taste like you’ve been cooking for hours. The white wine adds brightness, and the roux? Silky perfection.
- Weeknight or Fancy Night: Honestly, this soup works for both. Toss it together when you’re exhausted but crave something hearty, or dress it up with a fancy cheese for date night. The same base soup becomes whatever you need—comfort or company.
- Budget-Friendly Luxury: Beef bones and onions are cheap, but they feel like a splurge. Between us, this recipe stretches into leftovers that taste even better the next day—reheat, add a splash of water, and boom, instant restaurant-quality meal again.
Step-by-step instructions for French onion soup with perfectly crispy croutons
Here's how to build that iconic golden crust and rich, caramelized onion flavor.
🍳 Step 1: Caramelize the Onions Until Deep Golden
Heat the 2 tablespoons olive oil in a large Dutch oven over medium-low heat. Add the 4 large yellow onions (thinly sliced) and cook them slowly for 45-50 minutes, stirring occasionally. You're aiming for deep golden brown color—not burnt, but rich and jammy. The onions should release about 1½ cups of liquid as they cook down.
Here's the thing—I like to push them to deep amber color. This is where the sweet, complex flavors develop. If they start to stick, add a splash of beef broth to deglaze, but don't rush. Patience here makes all the difference for that restaurant-quality depth.
🔥 Step 2: Build the Rich Broth Base
Once the onions are perfectly caramelized, increase heat to medium-high and add the 2 lb beef bones. Toast them for 5 minutes until fragrant, then pour in 6 cups beef broth, 0.5 cup dry white wine, and the 2 whole bay leaves. Bring to a gentle boil, then reduce heat to low and simmer uncovered for 2 hours. This slow cook time extracts maximum flavor from the bones.
After 2 hours, strain the broth through a fine-mesh sieve into a clean pot, pressing on the solids to extract every bit of flavor. Return it to the Dutch oven and stir in the 2 tablespoons all-purpose flour to thicken slightly. Season with 1.5 teaspoons salt and 0.5 teaspoon crushed black peppercorns. The broth should be rich, slightly thickened, and bursting with onion flavor.
👨🍳 Step 3: Prepare the Crispy Croutons
While the broth simmers, cut the 1 whole baguette into ½-inch thick slices. Brush both sides generously with melted 2 tablespoons unsalted butter—this is what creates that perfect golden crust. Arrange them on a baking sheet in a single layer, brushing each piece again with butter.
Toast in a 425°F oven for 8-10 minutes until deep golden brown and crispy. Flip them halfway through for even browning. You want them to be crunchy but not burnt. Remove from oven and keep warm while you finish the soup.
🥘 Step 4: Assemble and Melt the Gruyère
Return the caramelized onions to the broth and simmer for 10 minutes to reabsorb any flavors. Meanwhile, divide the 1 cup freshly grated Gruyère cheese among 4 oven-safe soup bowls. Place 2-3 crouton slices in each bowl, then ladle the hot onion broth over them, filling each bowl about ¾ full. The croutons should float slightly above the broth.
Here's where the magic happens: Place the bowls on a baking sheet and broil for 2-3 minutes until the cheese is bubbling and golden brown on top. Watch carefully—it goes from perfect to burnt in seconds. The cheese should form a crispy, golden blanket over the soup.
🍽️ Step 5: Serve Immediately with Fresh Herbs
Let the soups rest for 1 minute after broiling to let the cheese set slightly. Garnish each bowl with a sprinkle of 2 sprigs fresh thyme and 4 cloves minced garlic for freshness. Serve immediately with a side of crusty bread for dipping—every spoonful should deliver that perfect balance of crispy croutons, creamy Gruyère, and rich onion broth.
Real talk: The cheese should be bubbling and golden when you serve it. If it's not quite crispy enough, pop it back under the broiler for 30 seconds. This is your final chance to achieve that restaurant-quality crust that makes this dish unforgettable.
Pro Tips For Making 99 Restaurant French Onion Soup
- SWEAT ONIONS LOW AND SLOW: I used to rush this step, but caramelizing onions properly takes 45–60 minutes on medium-low heat—no skipping. Cover the pot for the first 20 minutes to speed up the process, then uncover and stir occasionally. If they brown too fast, lower the heat and add a splash of water.
- USE COLD WINE, NOT ROOM TEMP: Chill that white wine first—cold wine deglazes better and keeps the acidity from overpowering the onions. Pour it in slowly while scraping up those browned bits; if you use warm wine, the alcohol will evaporate too quickly and leave behind a harsh taste.
- STRAIN BROTH TWICE: After simmering beef bones, strain the broth through a fine-mesh sieve, then a cheesecloth for a crystal-clear liquid. The second straining removes microscopic fat and sediment that can make the soup look cloudy—trust me, it’s worth the extra 5 minutes.
- TOAST FLOUR IN THE POT: Before adding liquid to the roux, cook the flour in the pot for 1–2 minutes until it smells nutty and lightly browns. This removes the raw flour taste and gives the soup a deeper, richer base—no need for extra butter if you’re watching fat.
Flavor customization for this dish
Sweet & Smoky Twist
Add 1 tbsp smoked paprika and 1 tsp maple syrup to the caramelizing onions for a sweet-smoky depth that pairs beautifully with the Gruyère. I like to add this in the last 10 minutes of caramelizing—the maple syrup caramelizes alongside the onions, creating a rich, almost BBQ-like note. This works especially well if you're serving it with a side of cornbread or a crisp green salad. 🔥
Herb-Infused Broth
Boost the broth's complexity by adding 1 sprig rosemary and 1 sprig tarragon along with the thyme and bay leaves. These herbs add an aromatic brightness that cuts through the richness of the onions and cheese. I find that removing the herbs just before serving (after straining) prevents bitterness. This variation feels especially elegant for dinner parties—it’s like a fancy French bistro in your kitchen. 💫
Spicy Kick
For heat lovers, stir ½ tsp cayenne pepper or 1 tsp hot sauce (like Cholula) into the broth while simmering. I also like to sprinkle crushed red pepper flakes on top of the cheese before broiling—it adds a nice contrast to the creamy Gruyère. If you're sensitive to spice, start with just ¼ tsp cayenne and adjust to taste. This version is perfect for cooler evenings when you want a little warmth alongside the comfort. 🌶️
Creamy Cheese Swap
Replace Gruyère with a mix of ½ cup sharp cheddar and ½ cup fontina for a creamier, milder flavor. The fontina melts beautifully and adds a subtle sweetness, while the cheddar brings a tangy punch. I recommend grating these cheeses fresh and mixing them with 1 tbsp heavy cream before sprinkling over the soup—this creates an ultra-luxurious, velvety topping. It’s a great option if Gruyère is hard to find. 🧀
Umami Boost
Enhance the depth of the broth by adding 1 tbsp Worcestershire sauce or 1 tsp fish sauce (like Red Boat) when you strain it back into the pot. These umami-rich ingredients amplify the savory notes of the beef bones and caramelized onions. For an extra layer, stir in 1 tsp soy sauce—it’s a secret trick I picked up from Asian-French fusion chefs. This version feels heartier and more complex, perfect for meat lovers. 💡
Vegetarian Adaptation
Skip the beef bones and use 6 cups vegetable broth instead, then add 2 tbsp soy sauce and 1 tbsp miso paste to mimic the umami depth. Caramelize the onions as directed, then simmer with 1 cup mushrooms (like cremini or shiitake) for extra richness. Top with the same crispy bread and Gruyère (or a vegan cheese alternative like Violife). This version is just as comforting and works beautifully for plant-based diets. 🌱
Nutrition facts
Frequently asked questions
Can I make this French onion soup ahead of time?
The caramelized onions and broth can be prepared 2 days in advance and stored separately in airtight containers. Reheat the broth gently, then add the onions just before serving. The bread topping should be toasted fresh—it loses crispiness when reheated. For the best results, assemble and broil the bowls right before serving.
What if I don't have Gruyère cheese?
Use a mix of ½ cup sharp cheddar and ½ cup fontina for a creamier, milder flavor. For extra richness, stir 1 tablespoon heavy cream into the grated cheese before topping the soup. If you're vegetarian, try vegan Gruyère alternatives like Violife. The key is freshly grated cheese—pre-shredded versions get clumpy.
How do I prevent the bread topping from getting soggy?
Toast the bread slices until deep golden brown and crispy at 425°F for 8-10 minutes, flipping halfway. For extra insurance, place the assembled bowls on a wire rack over a baking sheet before broiling—this allows air to circulate underneath. Never skip the butter—it creates a moisture barrier that keeps the bread crisp.
Can I use store-bought beef broth?
Yes, but choose a high-quality, low-sodium option like Kettle & Fire or Pacific Foods. For deeper flavor, simmer it with 2 beef bouillon cubes and 1 teaspoon soy sauce while caramelizing the onions. Homemade broth always wins for restaurant-quality results, but a good store-bought version works in a pinch.
Why did my onions burn instead of caramelizing?
This happens when cooking too quickly or at too high heat. Always use medium-low heat and stir frequently—patience is key! If they start to stick, add a splash of beef broth to deglaze. The onions should take 45-50 minutes to reach deep amber color. For faster results, use a heavy-bottomed pot like a Dutch oven.
