Ingredients
Equipment
Method
Make the meatballs
- In a mixing bowl, combine ground beef, breadcrumbs, egg, Worcestershire, garlic powder, salt, and pepper until evenly mixed; roll into meatballs. Keep them similar in size so they brown at the same pace.
- Heat butter in an oven-safe skillet over medium heat and brown the meatballs in batches as needed, turning until golden all over. Remove browned meatballs to a plate.
Caramelize the onions and build the sauce
- Reduce heat to medium-low and cook the sliced onions in the same skillet until deeply caramelized, about 30-35 minutes, stirring occasionally. Look for thick, dark amber onions and no raw onion smell.
- Add minced garlic and fresh thyme to the onions and cook for about 1 minute until fragrant. Stir constantly so the garlic doesn’t brown too fast.
- Pour in the dry white wine to deglaze, scraping up the browned bits from the bottom of the skillet. Cook for 1-2 minutes until the wine smell mellows.
- Add beef broth and Worcestershire, then bring the sauce to a gentle simmer. Taste and adjust with salt and pepper.
Simmer, top, and broil
- Nestle the browned meatballs into the caramelized onion sauce and simmer for 10 minutes. You should see light bubbling around the edges.
- Scatter Gruyere over the entire surface so it covers the meatballs and sauce. Broil for 3-5 minutes until the cheese is golden and bubbly.
Notes
Pro tip: caramelize the onions slowly on medium-low for the full 30-35 minutes for maximum depth—rushing makes the base taste flat. Store leftovers in the refrigerator up to 3 days in an airtight container; reheat gently in a skillet or microwave until hot. Freezing is not recommended because the onions and cheese can lose texture after thawing. For a lower-fat swap, use 90% lean ground beef and reduce butter by 1 tablespoon.
