I enjoy this recipe because it combines two comfort food favorites into one easy skillet meal. The slow-cooked onions develop an incredible sweetness and depth that pairs perfectly with juicy homemade meatballs.
I also like how the Gruyère cheese melts into the sauce, creating a rich and savory finish that tastes restaurant-worthy. These meatballs are perfect for dinner parties, cozy family meals, or even casual gatherings with toasted baguette slices on the side.
Ingredients
(Here’s a tip: Check out the full list of ingredients and measurements in the recipe card below.)
For the Onions
2 tablespoons olive oil
4 medium yellow onions, thinly sliced
3 cloves garlic, thinly sliced
2 bay leaves
1 1/2 teaspoons kosher salt
1 teaspoon fresh thyme leaves
1/2 teaspoon freshly ground black pepper
1/3 cup dry white wine
2 tablespoons unsalted butter
For the Meatballs
1 pound lean ground beef
1 large egg, beaten
1/3 cup panko breadcrumbs
1 teaspoon kosher salt
1/2 teaspoon freshly ground black pepper
2 tablespoons olive oil
For the Sauce and Serving
1 tablespoon all-purpose flour
2 cups low-sodium chicken broth
1 teaspoon Dijon mustard
1 teaspoon Worcestershire sauce
6 ounces freshly grated Gruyère cheese
Toasted baguette slices for serving
Directions
Step 1
I begin by heating olive oil in a large skillet over medium heat. I add the sliced onions, garlic, bay leaves, and salt, then cook them slowly while stirring often. After about 45 minutes, the onions become deeply golden and soft.
Step 2
If the onions start drying out during cooking, I add a splash of water to keep them from sticking. Once they are beautifully golden, I stir in the thyme and black pepper and cook for another minute until fragrant.
Step 3
I pour in the white wine and add the butter, scraping up all the flavorful browned bits from the bottom of the pan. Then I remove the bay leaves and transfer the onions to a plate to cool slightly.
Step 4
In a large bowl, I combine the ground beef, beaten egg, panko breadcrumbs, salt, and black pepper. I gently mix everything together until just combined, being careful not to overwork the meat.
Step 5
I shape the mixture into about 16 meatballs. In the same skillet, I heat olive oil over medium heat and brown the meatballs on all sides until nicely golden. I transfer them to a plate once browned.
Step 6
I sprinkle the flour into the skillet and stir for about a minute. Then I slowly pour in the chicken broth while whisking to create a smooth sauce.
Step 7
Next, I stir in the Dijon mustard and Worcestershire sauce. I return the cooked onions and meatballs to the skillet and let everything simmer gently for about 15 to 20 minutes until the meatballs are fully cooked and tender.
Step 8
I sprinkle the grated Gruyère cheese over the top and let it melt into the hot sauce. Sometimes I place the skillet under the broiler for a few minutes to create a bubbly golden cheese topping.
Step 9
I serve the meatballs hot with toasted baguette slices for dipping into the rich onion sauce.
Servings and Timing
Servings: 4 to 6 servings
Yield: 16 meatballs
Prep Time: 15 minutes
Cook Time: 70 minutes
Total Time: 85 minutes
Variations
I sometimes swap the ground beef for ground turkey or chicken when I want a lighter version. For extra richness, I occasionally use a mix of beef and pork.
If I want a more intense onion flavor, I let the onions caramelize even longer. I also enjoy adding mushrooms to the sauce for extra heartiness. Swiss cheese can work as a substitute if Gruyère is unavailable.
Storage/Reheating
I store leftover meatballs in an airtight container in the refrigerator for up to 4 days. The flavors become even richer the next day.
For reheating, I warm everything gently on the stovetop over medium-low heat until heated through. I can also microwave individual portions, though I prefer the stovetop for the best texture. If the sauce thickens too much, I add a splash of broth to loosen it.
FAQs
Can I make the meatballs ahead of time?
Yes, I often prepare the meatballs a day ahead and refrigerate them until ready to cook.
What type of onions work best?
I prefer yellow onions because they become wonderfully sweet and flavorful during cooking.
Can I freeze this dish?
Yes, I freeze the cooked meatballs and sauce for up to 3 months. I thaw them overnight in the refrigerator before reheating.
What can I serve with French onion meatballs?
I like serving them with toasted baguette slices, mashed potatoes, buttered noodles, or even rice.
Do I have to use Gruyère cheese?
Gruyère gives the dish its classic French onion flavor, but Swiss cheese or mozzarella can also work well.
Conclusion
I think these French onion meatballs are the perfect comfort food for cozy evenings. The rich onion sauce, tender meatballs, and melted Gruyère create a dish that feels both rustic and elegant. Whether I serve them for a family dinner or a gathering with friends, they always disappear quickly from the table.
Cook the Onions
Heat olive oil in a large skillet over medium heat.
Add onions, garlic, bay leaves, and salt.
Cook, stirring frequently, until onions become deeply golden and reduced in volume, about 45 minutes.
Add splashes of water if the skillet becomes dry during cooking.
Stir in thyme and black pepper and cook for 1 minute until fragrant.
Add white wine and butter, scraping the bottom of the pan to release browned bits.
Remove and discard bay leaves.
Transfer onions to a plate and set aside.
Wipe out the skillet for later use.
Make the Meatballs
In a large bowl, combine ground beef, beaten egg, panko breadcrumbs, salt, and pepper.
Mix gently until combined.
Form mixture into 16 meatballs.
Heat olive oil in the cleaned skillet over medium heat.
Brown meatballs on all sides until mostly cooked through, about 8–10 minutes.
Transfer meatballs to a plate.
Make the Sauce
Sprinkle flour into the skillet and stir for 1 minute.
Slowly whisk in chicken broth.
Add Dijon mustard and Worcestershire sauce.
Stir until smooth and slightly thickened.
Finish the Dish
Return caramelized onions and meatballs to the skillet.
Simmer for 10–15 minutes until meatballs are fully cooked and flavors meld together.
Sprinkle Gruyère cheese evenly over the top.
Broil for 2–3 minutes until cheese is melted and bubbly.
Serve
Serve hot with toasted baguette slices for dipping.
Notes
Slowly cooking the onions is key to achieving deep French onion flavor.
Gruyère cheese melts beautifully, but Swiss cheese can be substituted.
Ground pork or a beef-pork blend also works well for tender meatballs.
Serve with mashed potatoes, pasta, or crusty bread for a heartier meal.
Leftovers reheat wonderfully the next day.