Ingredients
Equipment
Method
Make and brown the meatballs
- Mix ground beef, breadcrumbs, egg, Worcestershire, garlic powder, onion powder, and salt and pepper until evenly combined, then roll into 1.5-inch balls. Set on a plate while you heat the skillet.
- Heat butter in a cast iron skillet over medium-high heat, then brown the meatballs in batches and set aside. Continue until all meatballs are browned on the outside.
Caramelize onions and build the sauce
- In the same skillet, caramelize onions in butter over medium-low heat for 30-35 minutes, stirring occasionally until deep golden and soft. Reduce heat as needed to prevent burning.
- Deglaze with wine by pouring it into the hot skillet and scraping up browned bits for 1-2 minutes. Add beef broth, Worcestershire, and thyme, then stir to combine.
Simmer, cheese, and broil
- Return the meatballs to the onion sauce and simmer for 15 minutes, turning once so they absorb sauce. Keep the simmer gentle for even cooking.
- Transfer to a baking dish if your skillet is not oven-safe, then scatter Gruyere or provolone over everything. Make sure the cheese covers the top evenly.
- Broil for 3-4 minutes until the cheese is golden and bubbly, watching closely to avoid scorching. Let rest for 5 minutes before serving.
Notes
Pro tip: carve out time for the 30-35 minutes of medium-low onion caramelizing—slow cooking is what builds the sweet, savory base. Refrigerate leftovers in an airtight container up to 3 days; reheat gently in a skillet or microwave until hot. Freezing is not recommended because the cheese crust can soften, but you can freeze the meatballs and sauce separately and broil fresh cheese after thawing. For a lighter option, swap half the ground beef for lean ground turkey.
