
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.


French Onion Meatballs
Ingredients
- 2 pounds yellow onions (about 2 large or 4 medium)
- 1 small bunch fresh thyme
- 2 cloves garlic
- 6 ounces Gruyère cheese, divided
- 1/2 cup panko breadcrumbs
- 1/2 cup whole or 2% milk
- 1 large egg
- 2 teaspoons Worcestershire sauce
- 2 1/2 teaspoons kosher salt, divided, plus more as needed
- 3/4 teaspoon freshly ground black pepper, divided, plus more as needed
- 1 1/2 pounds ground beef
- 2 tablespoons unsalted butter
- 2 tablespoons all-purpose flour
- 1/2 cup dry white wine
- 1 (14.5-ounce) can beef broth (scant 2 cups)
- 1 teaspoon balsamic or sherry vinegar
- Crusty bread, for serving (optional)
Instructions
- Arrange one oven rack 6 to 8 inches from the broiler and a second rack in the middle of the oven. Heat the oven to 400°F. Line a rimmed baking sheet with parchment paper or a silicone baking mat.
- Halve and thinly slice 2 pounds yellow onions (about 7 cups). Pick the leaves from 1 small bunch fresh thyme until you have 2 tablespoons. Mince 2 garlic cloves. Grate 6 ounces Gruyère cheese on the large holes of a box grater (about 1 1/2 cups).
- Place the garlic, 2 teaspoons of the thyme, 1/4 cup of the Gruyère cheese, 1/2 cup unseasoned dried breadcrumbs or panko, 1/2 cup whole or 2% milk, 1 large egg, 2 teaspoons Worcestershire sauce, 1 1/4 teaspoons of the kosher salt, and 1/4 teaspoon black pepper in a large bowl and stir to combine. Add 1 1/2 pounds ground beef and use your fingers to combine the meat and flavorings. Handle the meat gently and do not overmix.
- Form the mixture into 32 to 34 (about 1 1/2-inch) meatballs (about 2 tablespoons each). Place on the baking sheet, spacing them about 3/4-inch apart.
- Bake on the middle rack until browned and cooked through or until an instant-read thermometer inserted into the center of a meatball registers at least 165°F, 15 to 20 minutes. Meanwhile, make the sauce.
- Melt 2 tablespoons unsalted butter in a 12-inch cast iron or other broiler-safe, heavy-bottomed skillet over medium heat. Add the onions, 1 tablespoon of the thyme, remaining 1 1/4 teaspoons kosher salt, and remaining 1/2 teaspoon black pepper. Cook, stirring frequently with a wooden spoon and reducing the heat if the onions start to burn, until the onions have reduced by over half, are very soft, and deep golden-brown, 25 to 30 minutes.
- Sprinkle 2 tablespoons all-purpose flour over the onions and stir until the flour is completely incorporated and leaves a film on the bottom of the skillet and begins to brown, about 1 minute. Add 1/4 cup dry white wine and scrape up any browned bits on the bottom of the skillet. Continue to stir until the wine is evaporated, about 30 seconds.
- Add 1 (14.5-ounce) can beef broth and whisk to combine. Increase the heat back to medium if it was lowered while cooking the onions. Bring to a boil and cook until the sauce thickens enough to coat the back of a spoon, 6 to 8 minutes. Remove the pan from the heat. Add 1 teaspoon balsamic or sherry vinegar and stir to combine. Taste and season with more kosher salt and black pepper as needed.
- Add 1 (14.5-ounce) can beef broth and whisk to combine. Increase the heat back to medium if it was lowered while cooking the onions. Bring to a boil and cook until the sauce thickens enough to coat the back of a spoon, 6 to 8 minutes. Remove the pan from the heat. Add 1 teaspoon balsamic or sherry vinegar and stir to combine. Taste and season with more kosher salt and black pepper as needed.
- Transfer the skillet to the upper rack and broil until the cheese is melted, bubbly, and browned in spots, 3 to 4 minutes. Garnish with the remaining 1 teaspoon thyme leaves and serve with crusty bread, if desired.