Ingredients
Equipment
Method
Make and brown the meatballs
- In a bowl, mix ground beef, breadcrumbs, egg, Worcestershire, garlic powder, onion powder, salt, and pepper until evenly combined, then roll into 1.5-inch balls.
- Heat butter in a skillet over medium heat and brown the meatballs in batches, cooking until well browned on the outside, then set them aside.
Caramelize onions and build the sauce
- In the same skillet, add thinly sliced onions and cook over medium-low heat for 30-35 minutes, stirring occasionally, until deeply caramelized.
- Pour in the wine to deglaze, scraping up browned bits, then add beef broth, Worcestershire, and fresh thyme.
Simmer, bake, and broil
- Return the browned meatballs to the onion sauce and simmer until cooked through, 15 minutes.
- Transfer to a baking dish if the skillet isn’t oven-safe, then scatter the shredded Gruyere or provolone evenly over the top.
- Broil 3-4 minutes until the cheese is golden and bubbly, then rest briefly before serving.
Notes
For best browning, keep meatballs the same size so they cook evenly before simmering. Store leftovers in an airtight container in the refrigerator up to 4 days; reheat gently in a covered skillet or microwave until hot. Freezing is yes—freeze in the sauce (cheese added later if you want the freshest crust). For a lower-fat swap, use 90% lean ground beef (or a mix of beef and turkey) to keep the tender texture.
