French onion meatballs turn the best parts of French onion soup into dinner, with beef meatballs, caramelized onions, a white wine and beef broth sauce, and Gruyère broiled over the top. The onions get almost an hour in the skillet because this recipe depends on good caramelization, not a shortcut.

French Onion Meatballs with Caramelized Onion Sauce and Gruyère
There was a restaurant called Mimi’s Cafe that opened in Southern California in the late ’70s, and somehow it became the place I associated with French onion soup. It wasn’t the first place I had it, but it became the one that stuck.
I remember Mimi’s being dark and cozy inside, with blue shutters on the windows and enough vaguely French atmosphere that everyone who ended up there seemed happy to play along with it. The food was good for a chain restaurant, and the fact that Mimi’s is still around all these years later makes me think lots of other people agreed. Even in high school, Mimi’s was still somewhere we would go before heading out for the night.
For whatever reason, Mimi’s became a French onion soup reference point for a lot of us. It was almost like the flavor got arrested there and never moved on. When I think of French onion soup, I don’t think of onion soup mix or any of the bowls I’ve had since. I think of the dark bowl under a blanket of molten cheese, usually next to pot roast, my usual Mimi’s order, and me burning the roof of my mouth because waiting was impossible.
I’m not trying to recreate Mimi’s French onion soup with these French onion meatballs, but they do come from the same part of my brain. I wanted caramelized onions, beef, thyme, wine and Gruyère, with seasoned beef meatballs sitting in the middle of all of it.

What Makes This Recipe Different
- I used onion two different ways because they’re doing two different things. Grated yellow onion goes into the meatballs, where it adds moisture and onion flavor without leaving noticeable chunks. Then two full pounds of sliced onions get about an hour in the skillet for the sauce.
- I don’t shortcut the caramelized onions at all. They need enough time to lose most of their moisture and turn a rich golden brown before the wine goes in. Soft onions would still taste good, but they don’t give the sauce the same flavor.
- It sounds obvious that the meatballs should taste good before they ever reach the sauce, but that isn’t always what happens. I add Parmesan, Dijon, Worcestershire, garlic, thyme, parsley and grated onion to the beef, so I’m not relying on the French onion sauce to do it all.
- I keep everything in the same skillet because each step adds something to the next. I brown the meatballs first, cook the onions in the same pan, then deglaze with white wine before making the sauce.
- I also keep the Gruyère out of the sauce. I shred it over the finished meatballs and broil it on top instead, and that keeps the melted-cheese-over-the-onions part much closer to French onion soup.

Ingredients
- Lean ground beef – I like at least 90/10 or leaner, the same beef I use in my cottage pie with Gruyère mashed potatoes, because the meatballs are browned in oil, then finished in a rich onion sauce and covered with Gruyère. There’s already lots going on around them, so I don’t need a very fatty beef mixture too.
- Panko breadcrumbs + whole milk – The panko gets soaked in milk first to make a quick panade, which helps keep the meatballs tender through browning, simmering in the sauce and their final trip under the broiler.
- Grated yellow onion – I grate the onion directly into the meatball mixture so it disappears into the beef while adding moisture and onion flavor. This is completely different from the sliced onions that go into the sauce.
- Egg – The egg binds the beef, panko and other ingredients together without requiring more breadcrumbs, which can make the meatballs too firm.
- Parmesan cheese – Parmesan seasons the meatballs from within and has a different purpose from the Gruyère, which stays on top of the finished skillet.
- Garlic – Two cloves are enough without competing with the caramelized onions later.
- Worcestershire sauce – I use it in the meatballs and again in the sauce because it goes well with beef and onions. A little goes a long way.
- Dijon mustard – Adds acidity and seasoning without making the meatballs taste distinctly of mustard.
- Fresh thyme – Thyme is a natural with beef, onions and Gruyère, so I use it in both the meatballs and the sauce rather than introducing a bunch of different herbs.
- Fresh parsley – Some goes into the meatball mixture, with more scattered over the finished skillet if you want it.
- Yellow onions – Two pounds looks ridiculous when they first go into the skillet. That’s about three large onions, sliced thinly, and they cook down dramatically over the next 45 to 50 minutes. You need that much to end up with enough caramelized onion for the sauce.
- Unsalted butter – The butter goes into the same skillet after the meatballs are browned, then the sliced onions cook in it for the next 45 to 50 minutes.
- All-purpose flour – There’s only a small amount because I prefer the sauce lightly thickened, not turned into a heavy brown gravy.
- Dry white wine – Use something dry like Sauvignon Blanc or Pinot Gris. The wine deglazes the skillet after the onions caramelize, picking up what the meatballs left behind before it reduces and the beef broth goes in. Skip anything sweet.
- Low-sodium beef broth – This gives the sauce its beefy French onion soup base, and using low-sodium broth lets me control the salt as the sauce reduces.
- Balsamic vinegar – Just a teaspoon at the end. After two pounds of onions have caramelized, there’s lots of natural sweetness in the skillet, and the balsamic adds acidity without turning it into a balsamic sauce.
- Gruyère cheese – This is the French onion soup part I refuse to mess with, whether I’m making these meatballs or my French onion pasta. I shred Gruyère from a block and broil it over the finished meatballs so it melts across the onions.
- Olive oil – Used for browning the meatballs before the onions take over the skillet.
- Kosher salt + black pepper – Both are seasoned in stages, first in the meatballs and again in the onion sauce, rather than adding all the seasoning at the end.

How to Make French Onion Meatballs
Find the complete printable recipe with measurements in the recipe card at the BOTTOM OF THE POST.
- Step One (make the meatball mixture)
Stir the panko and milk together in a large bowl and let it sit for about 2 minutes so the breadcrumbs can soak everything up. Add the egg, Parmesan, grated onion, garlic, Worcestershire, Dijon, salt, pepper, thyme and parsley, then stir until it’s evenly mixed. Add the ground beef last and mix until everything is distributed. Don’t keep working it once you get there. Overmixing is how you end up with firmer meatballs. - Step Two (shape and brown the meatballs)
Shape the mixture into 28 to 30 meatballs, using about a heaping tablespoon for each one. If the mixture starts sticking to your hands, wet them lightly and keep going. Heat the olive oil in a large oven-safe skillet over medium heat, then brown the meatballs for 5 to 6 minutes, turning them every minute or two so you get good color on most sides. Work in batches if you need to. Crowding the skillet makes browning harder, and you want good color on these before they come out of the pan. The centers should still be underdone because the meatballs are going back into the sauce later. Move them to a plate and don’t clean out the skillet. Everything left in the pan is staying for the onions. - Step Three (caramelize the onions)
Turn the heat down to medium-low, melt the butter in the same skillet and add the sliced onions and salt. Two pounds of onions is going to look crazy at first. Ignore that. They lose an enormous amount of volume as they cook. Give them 45 to 50 minutes, stirring now and then, until they’re very soft and golden brown. This isn’t the part to hurry through. Softened onions are not caramelized onions, and this sauce depends on taking them all the way there. - Step Four (make the French onion sauce)
Sprinkle the flour over the caramelized onions and stir for about 1 minute, until you can’t see any dry flour. Pour in the white wine and scrape the bottom of the skillet with a wooden spoon, getting everything the meatballs left behind back into the sauce. Let the wine simmer for 2 to 3 minutes, until there is noticeably less liquid in the pan and the strong alcohol smell has mostly cooked off. Gradually stir in the beef broth, then add the Worcestershire, pepper, thyme and balsamic vinegar. Simmer for 6 to 8 minutes, until the sauce thickens slightly. You still want it loose enough to move around the onions and meatballs, not sitting there acting like gravy. - Step Five (finish the meatballs in the sauce)
Return the meatballs and any juices on the plate to the skillet, then spoon some of the caramelized onions and sauce over the tops. Simmer uncovered for 3 to 5 minutes, until the meatballs reach 160°F in the center. This is why I don’t cook them all the way through during browning. They finish cooking in the sauce instead of spending the entire recipe getting progressively more overcooked. - Step Six (add the Gruyère and broil)
Preheat the broiler and scatter the freshly shredded Gruyère over the meatballs and onions. Broil for 2 to 3 minutes, watching closely, until the cheese is melted and starting to brown in places. I keep the Gruyère on top instead of stirring it into the sauce because that molten layer of cheese is part of what makes French onion soup French onion soup to me. Finish with parsley if you want it, then serve the meatballs over mashed potatoes or egg noodles, or put my crusty roasted garlic rosemary artisan bread on the table and let it deal with the sauce.

Recipe Tips
- Keep the heat around medium-low while the onions caramelize. If they’re getting dark before they’ve softened and reduced considerably, lower the heat. You’re looking for onions that are very soft and golden brown all the way through, not onions that have browned quickly on the outside.
- Keep the meatballs close to the same size so they finish cooking at roughly the same time. A heaping tablespoon of mixture per meatball should give you about 28 to 30.
- Brown the meatballs in batches if your skillet feels crowded. Too many meatballs at once drop the temperature of the pan and make it harder to get the color you want.
- Don’t wait for the meatballs to cook through while you’re browning them. They still have time in the onion sauce later, and fully cooking them during the first trip through the skillet is an easy way to end up with dry meatballs by the time dinner gets to the table.
- If the sauce gets thicker than you intended, stir in a small amount of beef broth to loosen it before returning the meatballs to the skillet.
- Use an oven-safe skillet if you have one. If not, transfer the meatballs, onions and sauce to a broiler-safe baking dish before adding the Gruyère.
- Stay at the oven once the Gruyère goes under the broiler. Depending on how close the skillet is to the heating element, the difference between melted and burned can be less than a minute.

Storage and Make Ahead
- Store leftover French onion meatballs in an airtight container in the refrigerator for up to 4 days. Keep the meatballs in the onion sauce rather than separating them so they reheat in the sauce too.
- Reheat them gently in a covered skillet over medium-low heat. If the sauce has thickened in the refrigerator, add a small splash of beef broth while it warms. Individual portions can also go in the microwave.
- If I were making the dish ahead, I would stop before adding the Gruyère. Make the meatballs and sauce, let everything cool, cover and refrigerate for up to 2 days. Reheat the skillet until the meatballs and sauce are hot, then add freshly shredded Gruyère and broil before serving.
- You can also freeze the meatballs and onion sauce for up to 3 months. I prefer freezing them before the cheese goes on. Thaw overnight in the refrigerator, reheat the meatballs and sauce, then add fresh Gruyère and broil.

FAQs
- Can I make French onion meatballs without wine?
Yes. Replace the wine with additional beef broth. The sauce will lose some of the acidity the wine adds, so I would add an extra small splash of balsamic vinegar at the end, then taste before adding any more. - What can I use instead of Gruyère?
Comté is the closest substitution and would be my first choice. Emmental or a good Swiss cheese also works. Gruyère has a nuttier flavor, but all three melt well with caramelized onions and beef. - Can I use ground turkey or chicken instead of beef?
You can, but the flavor will be lighter and the meatballs will cook faster. I’d still use the beef broth for the sauce because that’s part of what gives the dish its French onion soup character. Chicken or turkey meatballs should reach 165°F in the center, but I’d pull them as soon as they get there so lean poultry doesn’t dry out. - Why do caramelized onions take so long?
Because you’re doing more than softening them. The onions first have to release a lot of their water, then their natural sugars gradually brown as they continue cooking. That takes time at moderate heat. Turning up the burner will give you scorched edges before the onions are caramelized. - Can I caramelize the onions ahead of time?
Yes. Caramelize the onions, let them cool and refrigerate them in an airtight container for up to 4 days. When you’re ready to make the recipe, warm them in the skillet before continuing with the flour, wine and broth. - What should I serve with French onion meatballs?
Mashed potatoes are my first choice because the caramelized onions and sauce have somewhere excellent to go. Egg noodles are good too, and crusty bread makes very quick business of whatever sauce is left in the skillet.

From My Kitchen Notes
Small observations from the margins.
- Some memories only become sweet after they’ve been left alone long enough.
- You can’t hurry something into becoming what it isn’t ready to be.
- There’s a big difference between softening and giving up.
- Taking a long time and wasting time are not the same thing.
- Losing volume isn’t the same as losing value.
- You can lose half of what you started with and still end up with more flavor.
- The closer something gets to done, the less you can afford to stop paying attention.
- There are things worth crying over, but onions are the most socially acceptable.
- Giving something your full attention doesn’t mean you get to decide what it becomes.
- There are things that need more time than I want to give them, and that doesn’t mean I’m wrong to want them.

More Ways I’ve Turned Meatballs Into Something Else
- Marry Me Chicken Meatballs – sun-dried tomatoes, Parmesan cream sauce.
- Chicken Piccata Meatballs – lemon, garlic, capers, baked.
- Chicken Meatballs with Chipotle-Honey Sauce – smoky, sweet, plenty of sass.
- Buffalo Chicken Meatballs – buttery sauce, plenty of heat.
- Slow Cooker Hawaiian Meatballs – sweet-savory sauce, slow cooker easy.
This post may contain affiliate links. Please read my disclosure policy.
French Onion Meatballs
Equipment
- large-oven safe skillet or braiser. Used to brown the meatballs, caramelize the onions, make the sauce, and broil the Gruyère without changing pans.
- mixing bowls (large). Gives you enough rrom to mix the meatball ingredients without overworking the beef.
- wooden spoon Useful for caramelizing the onions and scraping the browned bits from the skillet when adding the wine.
- instant-read thermometer The easiest way to confirm the meatballs have reached 160°F (71°C) without overcooking them.
Ingredients
Meatballs:
- ¾ cup (45 g) panko breadcrumbs
- ¼ cup (60 ml) whole milk
- 1 large egg
- ¼ cup (25 g) grated Parmesan cheese
- ¼ cup (40 g) grated yellow onion
- 2 cloves garlic minced
- 1 tbsp (15 ml) Worcestershire sauce
- 2 tsps (10 g) Dijon mustard
- 1 tsp (5 g) kosher salt
- ¼ cup (0.5 g) black pepper
- 1 tsp (1 g) chopped fresh thyme
- 2 tbsps (8 g) chopped fresh parsley
- 1½ lbs (700 g) lean ground beef (at least 90/10)
- 2 tbsps (30 ml) olive oil
French Onion Sauce:
- 2 tbsps (28 g) unsalted butter
- 2 lbs (900 g) yellow onion thinly sliced, about 3 large onions
- ½ tsp (2.5 g) kosher salt
- 1 tbsp (8 g) all-purpose flour
- ½ cup (120 ml) dry white wine (think Sauvignon Blanc or Pinot Gris/Grigio)
- 1½ cups (360 ml) low-sodium beef broth
- 1 tsp (5 ml) Worcestershire sauce
- ¼ tsp (0.5 g) black pepper
- 2 tsps (2 g) chiopped fresh thyme
- 1 tsp (5 ml0 balsamic vinegar
- 1¼ cups (140 g) freshly shredded Gruyère cheese
- chopped fresh parsley for garnish, optional
Instructions
- Stir the panko breadcrumbs and whole milk together in a large bowl. Let stand for 2 minutes to allow the panko to absorb the milk.
- Add the egg, Parmesan, grated onion, garlic, Worcestershire sauce, Dijon mustard, kosher salt, black pepper, thyme, and parsley. Stir until evenly mixed. Add the ground beef and mix gently until the seasonings are evenly distributed, taking care not to overmix.
- Shape the mixture into 28 to 30 meatballs, using about a heaping tablespoon of mixture for each. Lightly wet your hands as needed to prevent sticking.
- Heat the olive oil in a large oven-safe skillet over medium heat. Working in batches as needed to avoid crowding the skillet, brown the meatballs for 5 to 6 minutes, turning every 1 to 2 minutes so they brown on most sides. The meatballs should remain undercooked in the center since they will finish cooking in the sauce. Transfer to a plate.
- Reduce the heat to medium-low and add the butter to the same skillet, leaving the browned bits from the meatballs in the pan. Once the butter has melted, add the sliced onions and kosher salt. Cook for 45 to 50 minutes, stirring occasionally, until the onions have reduced considerably and are soft, caramelized, and rich golden brown.
- Sprinkle the flour over the caramelized onions and cook, stirring continuously, for 1 minute, until no dry flour remains.
- Pour in the white wine and scrape the bottom of the skillet with a wooden spoon to release the browned bits. Simmer for 2 to 3 minutes, until the wine has reduced by approximately half.
- Gradually stir in the beef broth, followed by the Worcestershire sauce, black pepper, thyme, and balsamic vinegar. Bring to a simmer and cook for 6 to 8 minutes, stirring occasionally, until the French onion sauce has thickened slightly but remains saucy.
- Return the meatballs and any accumulated juices to the skillet. Spoon some of the caramelized onions and sauce over the meatballs and simmer uncovered for 3 to 5 minutes, until the meatballs are cooked through and reach 160°F (71°C) in the center.
- Preheat the broiler. Sprinkle the freshly shredded Gruyère evenly over the meatballs and caramelized onions. Broil for 2 to 3 minutes, watching closely, until the Gruyère is melted.
- Garnish with chopped fresh parsley, if desired. Serve the French onion meatballs over mashed potatoes or egg noodles, or with crusty bread for the onion sauce.
Notes
- Allow the onions the full 45 to 50 minutes over medium-low heat. They should reduce considerably and become soft and rich golden brown before you add the flour and wine.
- Once the ground beef is added, mix only until the ingredients are evenly distributed. Overmixing can make the meatballs firmer.
- The meatballs should not cook through during browning. The initial browning develops flavor on the exterior, while the final simmer in the French onion sauce finishes cooking the centers.
- Leave the browned bits from the meatballs in the skillet. The white wine will loosen them from the pan as it deglazes, incorporating that browned beef flavor into the onion sauce.
- Choose a dry white wine such as Sauvignon Blanc or Pinot Gris. A sweet white wine will add unnecessary sweetness to onions that already develop lots of their own as they caramelize.
- The French onion sauce should thicken slightly but remain loose enough to surround the meatballs and caramelized onions. It shouldn't have the consistency of a thick gravy.
- Shred the Gruyère from a block for the smoothest melt. Packaged shredded cheese often contains anti-caking ingredients that can affect how it melts.
- Make sure your skillet is safe to use under the broiler. If it isn't, transfer the meatballs, caramelized onions, and sauce to a broiler-safe baking dish before adding the Gruyère.
- Refrigerate leftovers in an airtight container for up to 4 days. Reheat covered over low heat, adding a small amount of beef broth if the sauce has thickened in the refrigerator.
- Freeze the meatballs and onion sauce for up to 3 months, preferably before adding the Gruyère. Thaw overnight in the refrigerator, reheat, add freshly shredded Gruyère, then broil before serving.
Nutrition
Have you made these French Onion Meatballs? I’d love to hear how they turned out – leave a comment below and let me know.
As an Amazon Associate and member of other affiliate programs, I earn from qualifying purchases.


Leave a Reply