01 -
Combine fresh breadcrumbs with whole milk in a dish and soak for 5 minutes to hydrate.
02 -
Place ground beef into a large mixing bowl. Add the soaked breadcrumbs, parsley, thyme, herbes de Provence, salt, black pepper, minced onion, pressed garlic, 1/4 of the grated Gruyère, and whisked egg.
03 -
Gently mix everything by hand until evenly incorporated, taking care not to overwork the mixture. Portion out by 2-tablespoon scoops and place on a tray.
04 -
With slightly dampened hands, roll each portion into compact meatballs. Arrange on a tray and refrigerate for 15 minutes.
05 -
Heat 2 tablespoons olive oil in a large oven-safe skillet over medium-high heat. Working in batches, sear meatballs on all sides for 8–10 minutes total until browned. Transfer browned meatballs to a tray.
06 -
In the same skillet, add remaining 2 tablespoons olive oil and the ghee or butter. Once melted, add sliced onions with a pinch of salt and pepper. Cook over medium-high heat, stirring frequently, until deeply caramelized and jammy, about 20–25 minutes.
07 -
Stir in pressed garlic, herbes de Provence, and dried thyme; cook just until fragrant (30 seconds). Pour in sherry or wine and let it reduce for 30 seconds.
08 -
Sprinkle in flour, mix well for 30 seconds, then gradually stir in beef stock until smooth. Simmer for 5 minutes to thicken, then remove from heat and stir in fresh thyme leaves.
09 -
Return browned meatballs to the pan, nestling them in the sauce. Scatter the remaining Gruyère and all the shredded mozzarella over the meatballs. Place skillet under a preheated broiler set to high and broil for 5–7 minutes, until cheese is melted and golden.
10 -
Garnish with additional thyme leaves. Serve 3–4 meatballs per portion, spooned with generous sauce and cheese, accompanied by toasted bread or creamy mashed potatoes, if desired.