All the cozy, savory flavors of classic French onion soup come together in this easy skillet of French onion meatballs. Tender beef meatballs simmer in caramelized onions and rich broth, then get topped with bubbly melted cheese. The ultimate comfort food dinner feels special, and still comes together easily on a busy weeknight.
If you love hearty, family friendly meals like this one, be sure to check out my baked meatballs and dump-and-bake meatball casserole, or browse my collection of Cold Weather Comfort Classics.

Table of Contents
Before You Get Started
- Don’t rush the onions. Deeply caramelized onions are the soul of this dish. Give them 20-25 minutes to turn golden and sweet. Shortcutting this step means missing out on that signature French onion flavor.
- Use good beef broth. Since the broth is a main flavor component (not just background liquid), choose one with rich, beefy taste. Low-sodium lets you control the salt.
- Don’t skip the broiler. That bubbly, golden cheese on top is what makes this dish. A quick broil at the end gets you there in just 2-3 minutes.
- Let the meatballs rest before serving. A few minutes of resting helps them hold together and lets the flavors settle.
Choosing Your Cheese
Gruyere is the classic choice for French onion soup, thanks to its nutty flavor and smooth melt. Swiss is a great everyday substitute that melts beautifully. If you are in a pinch, provolone works too, but the flavor will be a little milder.
** Tip: Shred cheese from a block when you can. It melts more smoothly than pre-shredded bags.
For the meatballs, I recommend 80/20 beef for moisture and tenderness, although a mix of beef and pork works well too.

How to Make French Onion Meatballs
Step 1: Caramelize the Onions
Start by melting butter in a large oven safe skillet over medium low heat. Add the sliced onions with a little salt and sugar, then let them slowly soften and darken. Stir occasionally and give them the full 20 to 25 minutes they need. The onions should be deep golden, very soft, and almost jammy.
** Tip: If the onions start to stick to the pan or look too dry as they’re cooking, just add a small splash of water to the skillet when needed.
** Tip: You can caramelize the onions up to a day ahead. Refrigerate them, then warm them in the skillet when you are ready to continue.

Once the onions are ready, stir in Worcestershire and garlic. If you are using white wine, pour it in and let it reduce. Transfer everything to a bowl and set aside.

Step 2: Make the Meatballs
While the onions cook, stir together the ground beef, breadcrumbs, egg, thyme, salt, pepper, onion powder, milk, and parsley. Mix gently with your hands so the meat stays tender. Roll the mixture into 1 1/2-inch balls so they cook evenly.
** Tip: Lightly wet your hands before rolling to keep the meat from sticking.

Step 3: Brown the Meatballs
Warm the same skillet over medium heat and add a little oil if needed. Brown the meatballs on two or three sides until they have a nice golden crust. They do not need to be cooked through. They will finish in the broth.

Step 4: Simmer in Broth
Add the caramelized onions back to the pan, nestling them around the meatballs. Pour in the beef broth and tuck in a few sprigs of fresh thyme.

Bring everything to a gentle simmer and cook uncovered until the meatballs are cooked through. This usually takes about 12 to 15 minutes.
** Tip: Carefully turn the meatballs about halfway through simmering so that they cook through evenly.
** Quick note: The broth will reduce slightly and turn more saucy. If it reduces too much, just add a splash more broth.

Step 5: Top with Cheese and Broil
Sprinkle the shredded Gruyere or Swiss evenly over the top of the skillet.

Place the pan under the broiler for 2 to 3 minutes, just until the cheese is melted, bubbly, and starting to brown.
** Tip: Keep a close eye on the broiler. It goes from perfect to burnt quickly.

Step 6: Rest and Serve
Let the skillet rest for about 5 minutes so the meatballs settle. Serve straight from the pan with mashed potatoes, buttered noodles, or warm crusty bread.

What to Serve with French Onion Meatballs
There are so many great sides for soaking up that rich broth and melted cheese. Here are a few family favorites.
- Crusty bread or baguette slices for dipping.
- Sour cream mashed potatoes for a full comfort food meal.
- Egg noodles or rice if you want something heartier.
- A simple green salad to balance the richness.
- Roasted vegetables like green beans or broccoli for an easy side.
Storage, Freezing, and Make Ahead
Storage: Keep leftovers in an airtight container in the refrigerator for 3 to 4 days.
Reheating: Reheat gently on the stovetop with a splash of broth to loosen the sauce. The microwave works too, but the stovetop gives better texture.
Freezing: Freeze the meatballs and sauce for up to 3 months without the cheese topping. Add fresh cheese when reheating and broil to finish.
Make ahead: Caramelize the onions up to 2 days ahead. You can also roll the meatballs and refrigerate them until ready to cook.
Frequently Asked Questions
Can I make these French onion meatballs in the slow cooker?
You can brown the meatballs, add them to a slow cooker with the onions and broth, and cook on low for about 3 hours. Add the cheese at the end and broil in an oven safe dish.
What is the best cheese for French onion meatballs?
Gruyere is traditional, but Swiss is an easy, affordable swap that melts beautifully.
Can I use ground turkey or chicken instead of beef?
Yes, but the meatballs will be leaner. Add an extra tablespoon or so of milk to keep them tender.
How do I keep the meatballs from falling apart?
Make sure you use the full amount of breadcrumbs and egg. Mix gently and let them rest a few minutes after cooking.
Do I have to caramelize the onions?
Caramelizing the onions is what gives the dish its signature French onion flavor. I do not recommend skipping this step.
Can I make these ahead for a party?
Yes. You can prepare the onions and meatballs ahead. Warm everything in the skillet, add cheese, and broil right before serving.
Related Recipes

























Did you make this recipe?
If you enjoyed this recipe, please leave a comment with a 5-star review at the bottom of the post. Thank you!