Ingredients
Equipment
Method
Make and brown the meatballs
- Mix ground beef, breadcrumbs, egg, Worcestershire, garlic powder, and salt and pepper until just combined, then roll into meatballs. Keep them roughly even so they brown at the same rate.
- Heat the butter in an oven-safe cast iron skillet over medium heat until foaming. Brown the meatballs in batches for 2-3 minutes per side until golden, then remove to a plate.
Caramelize onions and build the base
- Lower heat to medium-low and cook the onions in the same skillet, stirring occasionally, for 30-35 minutes until deeply caramelized and dark golden. Scrape up any browned bits as they form.
- Add the minced garlic and fresh thyme and cook for 1 minute, stirring, until fragrant. Keep heat steady so the garlic doesn’t burn.
- Deglaze with the dry white wine, scraping the pan with a spoon as the liquid reduces. Cook for 2-3 minutes until the wine smell mellows.
- Pour in the beef broth and add Worcestershire, then bring to a gentle simmer. Simmer for 3-5 minutes so the flavors blend.
Simmer and broil for melty Gruyère
- Nestle the browned meatballs into the caramelized onion sauce. Make sure the sauce comes up around the meatballs for a braised effect.
- Simmer the skillet over medium-low for 10 minutes, gently bubbling, until the meatballs are cooked through. The sauce should look glossy and thickened.
- Scatter the Gruyère over the entire surface of the skillet in an even layer. Broil 3-5 minutes at 500°F until golden and bubbly with browned edges.
Notes
Pro tip: caramelize the onions slowly—stir less once they’re broken down, and scrape up fond for maximum flavor. Refrigerate leftovers in an airtight container up to 4 days; reheat gently in a skillet. Freezing is not ideal because the onions and cheese can change texture, but you can freeze cooked meatballs with sauce for up to 2 months if needed; thaw and reheat on low. For a lower-carb option, swap breadcrumbs for crushed almond flour or finely ground pork rinds (adjust seasoning to taste).
