Try my new budgeting app Cheddar 🧀
Better than YNAB, Mint (RIP), or EveryDollar.
5.0
(1)
Export 14 ingredients for grocery delivery
Step 1
Arrange one oven rack 6 to 8 inches from the broiler and a second rack in the middle of the oven. Heat the oven to 400°F. Line a rimmed baking sheet with parchment paper or a silicone baking mat.
Step 2
Halve and thinly slice 2 pounds yellow onions (about 7 cups). Pick the leaves from 1 small bunch fresh thyme until you have 2 tablespoons. Mince 2 garlic cloves. Grate 6 ounces Gruyère cheese on the large holes of a box grater (about 1 1/2 cups).
Step 3
Place the garlic, 2 teaspoons of the thyme, 1/4 cup of the Gruyère cheese, 1/2 cup unseasoned dried breadcrumbs or panko, 1/2 cup whole or 2% milk, 1 large egg, 2 teaspoons Worcestershire sauce, 1 1/4 teaspoons of the kosher salt, and 1/4 teaspoon black pepper in a large bowl and stir to combine. Add 1 1/2 pounds ground beef and use your fingers to combine the meat and flavorings. Handle the meat gently and do not overmix.
Step 4
Form the mixture into 32 to 34 (about 1 1/2-inch) meatballs (about 2 tablespoons each). Place on the baking sheet, spacing them about 3/4-inch apart.
Step 5
Bake on the middle rack until browned and cooked through or until an instant-read thermometer inserted into the center of a meatball registers at least 165°F, 15 to 20 minutes. Meanwhile, make the sauce.
Step 6
Melt 2 tablespoons unsalted butter in a 12-inch cast iron or other broiler-safe, heavy-bottomed skillet over medium heat. Add the onions, 1 tablespoon of the thyme, remaining 1 1/4 teaspoons kosher salt, and remaining 1/2 teaspoon black pepper. Cook, stirring frequently with a wooden spoon and reducing the heat if the onions start to burn, until the onions have reduced by over half, are very soft, and deep golden-brown, 25 to 30 minutes.
Step 7
Sprinkle 2 tablespoons all-purpose flour over the onions and stir until the flour is completely incorporated and leaves a film on the bottom of the skillet and begins to brown, about 1 minute. Add 1/4 cup dry white wine and scrape up any browned bits on the bottom of the skillet. Continue to stir until the wine is evaporated, about 30 seconds.
Step 8
Add 1 (14.5-ounce) can beef broth and whisk to combine. Increase the heat back to medium if it was lowered while cooking the onions. Bring to a boil and cook until the sauce thickens enough to coat the back of a spoon, 6 to 8 minutes. Remove the pan from the heat. Add 1 teaspoon balsamic or sherry vinegar and stir to combine. Taste and season with more kosher salt and black pepper as needed.
Step 9
Remove the meatballs from the oven. Set the oven to broil. Using tongs or a slotted spoon, transfer the meatballs to the sauce. Gently stir to coat the meatballs in the sauce, then spread into an even layer. Sprinkle with the remaining 1 1/4 cups Gruyère cheese.
Step 10
Transfer the skillet to the upper rack and broil until the cheese is melted, bubbly, and browned in spots, 3 to 4 minutes. Garnish with the remaining 1 teaspoon thyme leaves and serve with crusty bread, if desired.