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 form into 1.5-inch balls.
- Heat butter in a skillet, add meatballs, and brown until deep golden on the outside, then set aside.
Caramelize onions and build the sauce
- In the same skillet, cook thinly sliced onions in butter over medium-low heat for 30-35 minutes, stirring until very caramelized.
- Deglaze the pan with white wine (or beef broth), scraping up browned bits.
- Add beef broth, Worcestershire, and fresh thyme, then bring the sauce to a gentle simmer.
Simmer, bake, and broil
- Return browned meatballs to the sauce and simmer for 15 minutes, turning once so they absorb the onion flavor.
- Transfer to a baking dish if your skillet is not oven-safe, then scatter Gruyère/provolone over the top.
- Broil for 3-4 minutes, until the cheese is golden and bubbly with blistered spots on top.
Notes
Pro tip: Use thinly sliced onions and resist turning the heat up—medium-low caramelization for 30-35 minutes creates the sweet, deep French onion flavor. Store leftovers in the fridge up to 4 days; reheat gently in a skillet or microwave. Freezing is not ideal for the cheese topping, but you can freeze the meatballs and sauce (without fresh cheese) for up to 2 months and broil cheese after thawing. For a lighter option, swap half the ground beef for lean ground turkey while keeping the same seasonings.
