Ingredients
Equipment
Method
Caramelize the onions
- Heat 2 tablespoons butter and 1 tablespoon olive oil in a 12-inch skillet over medium-low heat; add the sliced onions and a pinch of salt and cook, stirring every few minutes, until deeply browned and sweet, about 35–45 minutes.
- Once onions are deeply browned, add 1 teaspoon thyme (if using) and deglaze the pan with 1/3 cup low-sodium beef broth, simmer until mostly absorbed; remove two-thirds of the onions to a bowl and reserve one-third for the meat mixture.
Make the meatballs
- In a large bowl combine 1 pound ground beef, the reserved one-third caramelized onions (coarsely chopped), 1 large egg, 1/2 cup breadcrumbs, 1/4 cup grated Parmesan, 2 minced garlic cloves, 1 tablespoon Worcestershire sauce, 1 teaspoon kosher salt, 1/2 teaspoon black pepper, and 1 tablespoon chopped parsley; mix gently until just combined.
- Form the mixture into 18 even meatballs (about 1 1/4 inches) and place on a rimmed baking sheet; chill uncovered in the refrigerator for 15 minutes.
Sear the meatballs
- Heat 2 tablespoons neutral oil in the same 12-inch skillet over medium-high heat until shimmering; sear meatballs in batches without crowding until browned on all sides, about 2 minutes per side, and transfer seared meatballs to the bowl with reserved caramelized onions.
Make the sauce and finish
- In the skillet, melt 2 tablespoons butter, stir in 1 tablespoon flour and cook 1 minute to form a roux, then slowly whisk in 2 cups low-sodium beef broth and 1/2 teaspoon Dijon mustard, scraping up browned bits.
- Add the reserved caramelized onions back to the skillet and bring the sauce to a gentle simmer; return meatballs to the skillet, cover, and simmer gently for 12 minutes or until an instant-read thermometer reads 160°F.
- Sprinkle 1 cup grated Gruyère and 1/2 cup shredded mozzarella evenly over the meatballs and place the skillet under a preheated broiler 4 inches from the heat for 2–3 minutes until the cheese is bubbly and lightly golden; let rest 5 minutes before serving.
Notes
Chill formed meatballs 15 minutes before searing to help them hold together. If you don’t have an oven-safe skillet, transfer seared meatballs to a 9×13-inch baking dish before broiling. Refrigerate leftovers up to 3 days or freeze for up to 3 months after flash-freezing.
