Ingredients
Equipment
Method
Make and brown the meatballs
- Mix ground beef, breadcrumbs, egg, Worcestershire, garlic powder, onion powder, salt, and pepper, then roll into 1.5-inch balls. Lightly press each ball so it holds its shape while browning.
- Heat a cast iron skillet over medium heat and brown the meatballs in butter. Cook until well browned on the outside, then set aside.
Caramelize the onions and build the sauce
- In the same skillet, caramelize the onions in butter over medium-low heat for 30-35 minutes. Stir occasionally until deeply golden and softened.
- Deglaze with wine, scraping up browned bits from the pan. Add beef broth, Worcestershire, and fresh thyme, then simmer briefly to combine.
Simmer, bake (if needed), and broil
- Return the browned meatballs to the onion sauce and simmer for 15 minutes. Turn the meatballs occasionally so they absorb the sauce.
- Transfer to a baking dish if your skillet isn’t oven-safe, then scatter the shredded Gruyère/provolone over everything. Keep the cheese evenly distributed so it melts into a full crust.
- Broil for 3-4 minutes until the cheese is golden and bubbly. Watch closely so the top browns without burning.
Notes
Pro tip: for juicier meatballs, avoid overmixing the beef—mix just until the breadcrumb and egg disappear. Refrigerate leftovers in an airtight container for up to 4 days; reheat gently in the microwave or in a skillet with a splash of broth. Freezing is yes: freeze meatballs and sauce (before broiling with cheese) up to 3 months, then thaw and broil fresh. Swap: use leaner ground beef (90/10) for a lighter option without changing the method.
