
French onion soup is hearty enough for a cold winter’s day but still light enough to enjoy any time of year. This recipe distills the essence of the iconic soup into a sauce for tender meatballs.
But it’s not just the sauce that harkens to French onion soup—the meatballs themselves are packed full of sweet and savory onion flavor. You can serve French onion meatballs on their own for a crowd-pleasing party snack, but a healthy shower of Gruyere cheese and some crusty bread turns this dish into a meal.

The Key Ingredient: Onions
The humble onion does a magic trick as it cooks; initially sharp and strong, it develops into a silky, golden, sweet ingredient when patiently cooked over low heat. Low and slow-cooked onion adds complexity to so many dishes.
For this recipe, we’re not quite caramelizing (which involves taking them to a deep brown color), but still developing tons of flavor, particularly with the additions of thyme, bay leaves, and wine. Half of the flavorful onions are added to the meatballs, while the other half are added to the sauce.
The Best Beef for French Onion Meatballs
To ensure your French onion sauce doesn’t become too heavy or oily, be sure to buy lean ground beef for these meatballs. You’re adding cheese and butter at various points in the recipe, so there won’t be a lack of richness (and deliciousness!).
If you’re feeling adventurous, substitute the ground beef for ground lamb. Or try ground chicken for a lighter version of the dish—just be sure to use ground chicken that contains both white meat and dark meat to prevent the mixture from becoming dry.

The Finishing Touches
If you’re aiming to emulate the French, the best cheese to use in this dish is a nutty Gruyere. It’s fairly widely available (try the specialty cheese or deli section of your supermarket), but if you can’t find a block to grate, a few thin slices are fine too—layer them over the meatballs and broil for a bit longer to melt.
And what better bread to serve alongside this dish than the famed French baguette? Cut slices for a party or tear it casually for dinner. Give the bread a light toast for maximum crunchy contrast. My favorite trick is to rub the bread with a garlic clove while it’s still warm for instant garlic bread.
How to Store and Reheat
Refrigerate the cooked meatballs with the French onion sauce for up to 5 days. Reheat gently on the stovetop or in the microwave.
The meatballs can also be frozen uncooked: freeze the shaped meatballs on a parchment-lined tray until solid, then transfer to a freezer container and store for up to 3 months. Thaw in the fridge before cooking and continuing on with the recipe.

Recipes Starring Slow-Cooked Onions
- Caramelized Onion Dip
- Onion Jam
- Rustic Onion Tart
- Caramelized Onion Quiche
- Braised Onions
Cook the onions:
In a large skillet, heat the olive oil over medium heat. Add the onions, garlic, bay leaves, and salt and cook, stirring frequently, until the onions are deeply golden (but not quite caramelized) and reduced significantly in volume, about 45 minutes. You can add a splash or two of water to the pan if it starts to become dry (this tends to happen around the 30-minute mark).
Add the thyme and black pepper and cook until the herbs are fragrant, about 1 minute. Add the white wine and butter, scraping up the bottom of the pan to loosen any dark bits. Remove and discard the bay leaves and transfer the onions to a plate to let cool slightly. Rinse and wipe out the skillet and set aside.



Make the meatball mixture:
In a large bowl, combine the ground beef, egg, panko, salt, and pepper. Once the onions are cool enough to handle, roughly chop half the onions and add them to the meatball mixture.
Use your clean hands to mix everything together until combined.



Form the meatballs:
Divide the mixture up into 16 roughly 1 1/2-inch balls. A foolproof way to do this is by forming the meat mixture into an even mound, dividing the mound into quarters, and dividing each quarter into quarters again.


Cook the meatballs:
Heat 2 tablespoons of olive oil in the reserved skillet over medium-high heat. Add the meatballs, making sure to space them evenly, and cook until browned on all sides, 10 to 12 minutes.
Sprinkle flour over the meatballs and toss gently until the flour is cooked, about 1 minute. Add the chicken broth, remaining reserved onions, mustard, and Worcestershire. Stir well, and let simmer until the sauce has thickened and grown slightly darker in color, about 10 minutes.



Add the cheese and broil:
Preheat the broiler on low. Sprinkle the Gruyere over the meatballs and sauce and broil until the cheese is melted, about 2 minutes.
Serve with toasted baguette slices. Leftover meatballs and sauce will keep for up to 5 days in the fridge.
Love the recipe? Leave us stars below!
