Imagine the soul-soothing vibes of French onion soup but in fork-friendly, meatball form. Tender bites swimming in a rich, caramelized onion gravy, crowned with a golden blanket of Gruyère – it’s comfort food that feels fancy but tastes like home. Perfect for cozy nights or impressing your crew without breaking a sweat.
Dish Story
Legend has it this dish was born in a tiny Parisian bistro where a chef, tired of soup spills, decided to reinvent the classic. He rolled beef and pork into juicy orbs, simmered them in a deep onion gravy, and topped it with bubbling cheese. It was an instant hit – a rustic yet elegant ode to French flavors that traveled from bistros to home kitchens worldwide, warming hearts one meatball at a time.
What you’ll need.
You’ll love this!!
Your Questions Answered!
Can I use all beef instead of beef/pork mix?
Totally! But the pork adds tenderness and flavor. If going all beef, add a splash more milk to the breadcrumb mix to keep things juicy.
How do I know when onions are caramelized enough?
They should be deep golden brown and jammy – not just soft! Low and slow is key, loves. Patience pays off!
What if I don’t have an oven-safe pan?
No stress! Transfer everything to a baking dish before adding cheese and broiling. Easy fix!
Can I make this vegetarian?
For sure! Swap the meat for mushroom ‘meatballs’ and use veggie broth. Just sauté mushrooms until golden for max flavor!

French Onion Meatballs
Ingredients
For the Meatballs
- 1.5 lbs ground beef (80/20 vibes)
- ½ lb ground pork (trust me, it keeps 'em tender!)
- 1 cup panko breadcrumbs
- ½ cup whole milk
- 1 large egg
- ¼ cup grated Parmesan cheese
- 2 cloves garlic, minced
- 1 tsp salt
- ½ tsp black pepper
- ¼ tsp dried thyme
- 2 tbsp olive oil (for browning)
For the French Onion Magic
- 4 large yellow onions, thinly sliced (they shrink, promise!)
- 3 tbsp butter
- 1 tbsp olive oil
- 1 tsp sugar (helps with that golden glow)
- ½ tsp salt
- 3 cloves garlic, minced
- ¼ cup dry white wine (or extra beef broth)
- 3 cups beef broth (go for the good stuff!)
- 2 tbsp fresh thyme leaves (or 1 tbsp dried)
- 2 bay leaves
- 1 tbsp Worcestershire sauce
For the Cheesy Finish
- 2 cups shredded Gruyère cheese (worth every rand!)
- ½ cup shredded mozzarella (for extra ooey-gooey)
- Fresh thyme for garnish
- Chopped fresh parsley
Instructions
- Mix panko and milk in a bowl and let it sit for 5 minutes until mushy – that’s the good stuff!
- In a big bowl, combine beef, pork, soaked breadcrumbs, egg, Parmesan, garlic, salt, pepper, and thyme. Gently mix with your hands – don’t overwork it, or you’ll get tough meatballs (nobody wants that!). Roll into 1.5-inch balls – you’ll get about 20-24.
- Heat olive oil in a large oven-safe skillet or Dutch oven over medium-high heat. Brown meatballs in batches until golden on all sides (6-8 minutes total). They don’t need to be cooked through yet – just looking gorgeous! Set aside.
- In the same pan (don’t clean it – those bits are flavor gold!), add butter and olive oil. Toss in onions, sugar, and salt. Cook over medium heat, stirring occasionally, for 25-30 minutes until deep golden and caramelized. This is where the magic happens – be patient!
- Add garlic and cook for another minute. Pour in wine (if using), scraping up brown bits. Add beef broth, thyme, bay leaves, and Worcestershire. Simmer for 10 minutes to build flavor.
- Nestle meatballs back into the sauce. Cover and simmer 15-20 minutes until cooked through (165°F internal). Discard bay leaves – no one wants a surprise bite!
- Preheat broiler. Sprinkle Gruyère and mozzarella over the top. Pop under broiler 2-3 minutes until cheese is bubbly and golden. Garnish with thyme and parsley.