French Onion Soup (Low-Carb, No Bread, 12g Net Carbs)
- Total time
- 1 hour 35 minutes
- Makes
- 8 servings
- Net carbs
- 12g
- Calories
- 216

French onion soup was the first thing I missed when I stopped eating bread. Not the soup itself, but the soggy slab of toast that holds up the cheese. It took me a few winters to work out that the toast was never the best part. The onions are.
This version keeps everything that makes the classic worth the wait: two and a half pounds of onions cooked slowly in butter until they turn deep brown and jammy, beef broth, fresh thyme, bay leaves, and a thick layer of Gruyère broiled until it bubbles and browns. The bread is simply gone. Nothing replaces it, and you do not miss it once the cheese goes golden.
It is not the lowest-carb soup on this site, and I would rather say so up front. Onions are a vegetable with real carbs in them, and this soup is mostly onion. A one-cup bowl comes to 12g net carbs. That is a fair price for a full dinner of it, and a smaller bowl brings it down a lot.
My first attempt tasted like sweet onion water. I had cooked the onions for fifteen minutes, called them caramelized, and moved on. Forty minutes, low and patient, is what turns onions into French onion soup. Everything else in the recipe is easy.
Why This French Onion Soup Works
The onions do all the work. As they cook down, their sugars brown and the pot fills with a dark, sweet, savory base. That browning is the flavor of the finished soup, so it cannot be rushed with high heat. High heat just scorches the edges while the middle stays pale.
A splash of broth keeps them from burning. Two tablespoons of broth go in with the butter at the start, and two more after twenty minutes. The liquid lifts the brown film off the bottom of the pot and folds it back into the onions instead of letting it blacken.
Broth and Worcestershire sauce make the deglaze. Once the onions are deep brown, a quarter cup of broth and a tablespoon of Worcestershire go in, and you scrape the pot clean. The Worcestershire adds the tang and depth that the soup needs to taste finished rather than just sweet.
Gruyère makes the crust. It melts smoothly, browns well under the broiler and has a nutty flavor that suits onions. Without bread underneath, a generous ounce per bowl forms a lid that holds together when you break into it.

Recipe Overview
- Prep Time: 15 minutes
- Cook Time: 1 hour 20 minutes
- Total Time: 1 hour 35 minutes
- Serves: 8 (about 1 cup each)
- Net Carbs: 12g per serving
Ingredients

For the soup
| Ingredient | Quantity | Notes |
| Yellow onions | 2½ lb | About 5 medium, halved and thinly sliced |
| Unsalted butter | 2 tbsp | |
| Beef broth | 5¾ cups | Bone broth or regular; divided |
| Garlic | 4 cloves | Minced |
| Fresh thyme | 1 tbsp | Leaves stripped from the stems |
| Worcestershire sauce | 1 tbsp | |
| Bay leaves | 2 | Removed before serving |
| Salt | ½ tsp | Plus more to taste |
| Black pepper | ¼ tsp | Freshly ground |
For the topping
| Ingredient | Quantity | Notes |
| Gruyère cheese | 8 oz | Freshly shredded |
Why yellow onions? They have the best balance of sweetness and bite once they caramelize. Sweet onions brown faster but make a sugary soup, and red onions turn a muddy color.
Use a broth you would happily sip. It is almost the whole soup apart from the onions. A rich beef bone broth gives the soup body; if yours is salty, hold back the salt until the end.
Recipe Timing
| Stage | Time |
| Slice the onions and prep the rest | 15 minutes |
| Caramelize the onions | 40 minutes |
| Cook the garlic and thyme | 2 minutes |
| Deglaze and bring to a boil | 5 minutes |
| Simmer, covered | 30 minutes |
| Broil the cheese | 3 minutes |
| Total | 1 hour 35 minutes |
Most of that time is hands-off. The onions need a stir every few minutes, and the simmer needs nothing at all.
How to Make French Onion Soup, Step by Step
1. Slice the onions
Cut the onions in half from root to tip, peel them, and slice each half into thin half-moons. Keep the slices even, about an eighth of an inch, so they cook at the same speed. It looks like an absurd amount. It will shrink to a fraction of that.
2. Caramelize them slowly
Heat the butter and 2 tablespoons of the broth in a Dutch oven or heavy soup pot over medium heat. Add the onions and the salt and stir to coat. Cook for about 40 minutes, stirring every few minutes, and add another 2 tablespoons of broth after 20 minutes. Turn the heat down if the bottom darkens faster than the onions. They are ready when they are soft, jammy and a deep amber brown all the way through.

3. Add the garlic and thyme
Push the onions to the sides of the pot to make a space in the middle. Add the garlic and thyme there and cook for 1 to 2 minutes, until fragrant, then stir everything together.
4. Deglaze the pot
Pour in a quarter cup of the broth and the Worcestershire sauce, and scrape the bottom with a wooden spoon to loosen every brown bit. Add the rest of the broth, the bay leaves and the pepper, and bring the soup to a boil.
5. Simmer for 30 minutes
Lower the heat, cover the pot and let the soup simmer gently for 30 minutes so the onions and broth become one flavor. Fish out the bay leaves, then taste and add salt if it needs it.
6. Broil under the cheese
Turn on the broiler. Ladle the soup into oven-safe bowls and set them on a baking sheet. Pile the Gruyère on top, about an ounce per bowl, and slide the sheet under the broiler for 2 to 4 minutes, until the cheese is melted, bubbling and browned in spots. Watch it closely; it goes from golden to burnt quickly. The bowls will be very hot, so use oven mitts.

Tips and Variations
- No oven-safe bowls? Spread the shredded Gruyère in small rounds on a parchment-lined sheet and broil them into lacy crisps, then float one on each bowl.
- Make the crust firmer. Thin slices of Gruyère laid edge to edge make a sturdier lid than shredded cheese, because they bridge the surface instead of sinking.
- Swiss works too. If you cannot find Gruyère, use a good Swiss cheese, or mix in a little grated Parmesan for extra browning.
- Slice with a sharp knife. A dull blade crushes the onions and makes slicing two and a half pounds slow work.
- Keep the thyme fresh if you can. If you only have dried, use 1 teaspoon.
- Want it lower in carbs? Serve a three-quarter-cup bowl. It still feels like a proper bowl of soup under all that cheese, at 9g net carbs.
What to Serve With French Onion Soup
On its own it is a filling dinner, thanks to the cheese. For something more substantial, serve a small bowl as a starter before Salisbury steak, which shares the same onion and beef-broth flavors, or before a plate of braised short ribs on a cold night.
A crisp green salad with a sharp vinaigrette balances the richness, and creamed spinach turns it into a steakhouse-style meal.

Storage and Reheating
Fridge: keep the soup, without the cheese, in an airtight container for up to 4 days. It tastes even better the next day.
Freezer: freeze the soup without the cheese for up to 3 months. Thaw it overnight in the fridge.
Reheat: warm it in a pot over medium heat until steaming, then ladle it into oven-safe bowls and add the cheese and broil as fresh.
Make ahead: the onions can be caramelized up to 3 days early and kept in the fridge. On the day, warm them in the pot and carry on from the garlic and thyme.
Frequently Asked Questions
Is French onion soup keto?
Without the bread it is low-carb, but onions are not a free food. A one-cup bowl of this recipe has 12g net carbs, almost all of it from the onions. On a strict keto day that is a big share of the budget, so a smaller bowl, or this as a starter with a meat main, works best.
How do I know the onions are caramelized enough?
Go by color, not the clock. They should be soft and limp, reduced to a fraction of their starting volume, and an even deep amber brown. If they are still pale gold, keep going. Pale onions make a sweet, thin soup.
What can I use instead of bread on top?
Nothing at all. The Gruyère forms a crust by itself when it is broiled on the hot soup. For more crunch, broil the cheese into crisps on a sheet and float them on top.
Can I make it in a slow cooker?
I have not tested it that way. I would still caramelize the onions on the stove first, because the browning is where the flavor comes from and a slow cooker cannot brown them.
More Low-Carb Soups and Comfort Food
- Creamy Mushroom Soup — a velvety mushroom soup with onion, garlic, thyme and cream.
- Keto Broccoli Cheese Soup — creamy cheddar and broccoli soup, ready in 30 minutes.
- Beefy Keto Minestrone — ground beef, cauliflower and vegetables in a tomato broth.
- Keto Onion Rings — crispy rings with an almond flour coating, for the onion lovers.
Recipe Card
The full ingredient list and the method in short are in the card below.

Low-Carb French Onion Soup
Equipment
- Dutch oven or heavy soup pot
- Wooden spoon for scraping the pot
- Oven-safe soup bowls
- Baking sheet
Ingredients
For the soup
- 2 1/2 lb yellow onions about 5 medium, halved and thinly sliced
- 2 tbsp unsalted butter
- 5 3/4 cups beef broth bone broth or regular; divided
- 4 cloves garlic minced
- 1 tbsp fresh thyme leaves stripped from the stems
- 1 tbsp Worcestershire sauce
- 2 bay leaves removed before serving
- 1/2 tsp salt plus more to taste
- 1/4 tsp black pepper freshly ground
For the topping
- 8 oz Gruyere cheese freshly shredded
Instructions
Make the soup
- Caramelize: Heat the butter and 2 tbsp of the broth in a Dutch oven over medium heat. Add the onions and salt and cook about 40 minutes, stirring every few minutes and adding another 2 tbsp of broth after 20 minutes, until deep amber brown and jammy. Lower the heat if the bottom darkens too fast.
- Aromatics: Push the onions aside, add the garlic and thyme to the center and cook 1-2 minutes until fragrant, then stir together.
- Deglaze: Add 1/4 cup of the broth and the Worcestershire sauce and scrape up the browned bits. Add the remaining broth, the bay leaves and the pepper and bring to a boil.
- Simmer: Cover, reduce the heat and simmer 30 minutes. Remove the bay leaves and season with salt to taste.
Broil the topping
- Broil: Ladle the soup into oven-safe bowls on a baking sheet, top each with about 1 oz of the Gruyere cheese and broil 2-4 minutes, until melted, bubbling and browned in spots. Serve carefully; the bowls are very hot.




