Juicy, flavorful meatballs meet the rich, savory caramelized onion sauce of French onion soup—then topped with golden, bubbly Gruyère cheese. This comforting dish is perfect with crusty bread, mashed potatoes, or pasta.
1 lb (450 g) ground beef
½ cup breadcrumbs
¼ cup grated Parmesan cheese
1 egg
2 cloves garlic, minced
1 tsp onion powder
1 tsp Italian seasoning
Salt and pepper, to taste
2 tbsp olive oil
2 large onions, thinly sliced
2 tbsp butter
1 tsp sugar
2 cups beef broth
½ cup dry white wine (optional)
1 tbsp Worcestershire sauce
1 tbsp all-purpose flour
1 cup shredded Gruyère or Swiss cheese
Fresh parsley for garnish (optional)
In a large bowl, combine ground beef, breadcrumbs, Parmesan, egg, garlic, onion powder, Italian seasoning, salt, and pepper.
Mix until evenly combined.
Roll into 1-inch meatballs and set aside.
Heat olive oil in a large skillet over medium heat.
Brown meatballs on all sides, about 6–8 minutes.
Remove from skillet and set aside.
In the same skillet, melt butter.
Add sliced onions and sprinkle with sugar.
Cook over medium-low heat, stirring frequently, until caramelized, about 15–20 minutes.
Sprinkle flour over onions and stir to coat.
Add beef broth, white wine (if using), and Worcestershire sauce. Scrape the skillet to deglaze and bring to a simmer.
Return meatballs to the skillet.
Cover and simmer for 10–15 minutes until meatballs are fully cooked and flavors meld.
Preheat the broiler.
Sprinkle Gruyère cheese over meatballs and sauce.
Broil for 2–3 minutes, or until cheese is melted and bubbly.
Garnish with fresh parsley if desired.
Serve hot with crusty bread, mashed potatoes, or pasta.
Caramelization: Cook onions low and slow to get deep, rich flavor.
Wine: White wine adds depth but can be omitted if preferred.
Make Ahead: Meatballs can be browned ahead of time and stored in the fridge for up to 24 hours before simmering in the sauce.