Ingredients
Equipment
Method
Make and brown the meatballs
- Mix ground beef, breadcrumbs, egg, Worcestershire, garlic powder, onion powder, and salt and pepper until just combined, then roll into 1.5-inch balls. Keep the mixture compact so the meatballs stay tender and hold together.
- Brown the meatballs in butter over medium heat, turning as needed, until browned on the outside and set aside. Transfer them to a plate while you caramelize the onions.
Caramelize onions and simmer
- In the same skillet, caramelize the onions in butter over medium-low heat for 30-35 minutes, stirring occasionally, until deep golden and jammy. Scrape up any browned bits as the onions soften.
- Deglaze with dry white wine or beef broth, then add beef broth, Worcestershire, and fresh thyme. Simmer briefly to bring the sauce together.
- Return the meatballs to the sauce and simmer for 15 minutes, turning once so they absorb the onion broth. Cook until the meatballs are heated through and the sauce thickens slightly.
Bake and broil cheese topping
- Transfer to a baking dish if the skillet is not oven-safe, then scatter Gruyere or provolone over everything. Make an even layer so the crust melts into a golden top.
- Broil for 3-4 minutes until the cheese is golden and bubbly. Watch closely so the crust browns without burning.
Notes
Pro tip: Slice onions evenly and keep the heat at medium-low so they caramelize slowly instead of browning too fast. Store leftovers covered in the refrigerator for up to 4 days; reheat gently until warmed through. Freeze meatballs and sauce without the cheese topping for up to 3 months, then thaw and broil fresh with cheese. For a lighter swap, use lean ground beef (90/10) and trim any excess fat before simmering.
