French Onion Meatballs

French onion meatballs take everything that makes a bowl of French onion soup so good — the jammy, deeply caramelized onions, the savory beef broth, that bronzed cap of bubbling Gruyère — and turn it into a fork-and-knife dinner. The onions do the heavy lifting here, so don't skimp: three pounds of thinly sliced yellow onions cook down over a patient 40 to 45 minutes into a fraction of their original volume, which is exactly the point. That long, slow caramelization concentrates their natural sugars into the sweet-savory backbone of the whole dish, and it's the single most important step — rush it and you'll get raw, sharp onions instead of the silky, deep-brown jam the gravy needs. The meatballs themselves are a half-beef, half-pork blend, which keeps them tender and juicy where all-beef can turn dry, and they finish cooking right in the gravy so they soak up every bit of flavor. A quick shower of shredded Gruyère goes under the broiler at the end for that signature golden, gooey melt. Serve it over buttery egg noodles or torn crusty bread, and if this is your kind of cozy, our French Onion Soup, One-Pot French Onion Pasta, and French Onion Pot Roast are the natural next stops.

French Onion Meatballs — finished dish

Dinner · French, Comfort Food, Fall, Winter, Beef, One-Pot, High-Protein • 1 hr 10 min

Nutrition (per serving)620Calories·36gFat·33gCarbs·38gProtein
Calories620
Total Fat36 g
Saturated Fat16 g
Total Carbohydrate33 g
Dietary Fiber3 g
Sugars11 g
Protein38 g
Sodium1080 mg

Per serving. Values are approximate and calculated from USDA FoodData Central.

Servings:
4 servings

Ingredients

  • For the meatballs:
  • ½ cup panko breadcrumbs
  • 3 tablespoons whole milk
  • 1 pound lean ground beef (80/20)
  • ½ pound ground pork
  • 1 large egg
  • 2 garlic cloves, minced
  • 1½ teaspoons fresh thyme leaves, chopped
  • 1 teaspoon kosher salt
  • ½ teaspoon freshly ground black pepper
  • ¼ teaspoon ground nutmeg (optional)
  • For the caramelized onion gravy:
  • 2 tablespoons unsalted butter
  • 1 tablespoon olive oil
  • 3 pounds yellow onions (about 4 large), halved and thinly sliced pole-to-pole
  • 1 teaspoon kosher salt
  • 1 teaspoon granulated sugar
  • 2 tablespoons all-purpose flour
  • ½ cup dry sherry or dry white wine
  • 2 cups low-sodium beef broth, plus more as needed
  • 1 tablespoon Worcestershire sauce
  • 1 bay leaf
  • 1 teaspoon fresh thyme leaves
  • For the Gruyère melt and serving:
  • 6 ounces Gruyère cheese, shredded (about 1½ cups)
  • 12 ounces wide egg noodles, cooked and tossed with 2 tablespoons butter
  • chopped fresh parsley or chives, for garnish

Steps

  1. Caramelize the onions: Melt the butter with the olive oil in a large (12-inch) oven-safe skillet or Dutch oven over medium heat. Add the sliced onions, salt, and sugar, and stir to coat. Cook, stirring every 4 to 5 minutes and scraping up any browned bits with a splash of water if the onions begin to stick, until the onions are deeply golden brown and jammy, 40 to 45 minutes. Keep the heat at medium to medium-low — the goal is slow, even browning, not charring. (Start the meatballs while the onions cook.)
  2. Make the meatball mix: In a small bowl, stir the panko with the milk and let it soak for 5 minutes. In a large bowl, combine the ground beef, ground pork, egg, garlic, thyme, salt, pepper, and nutmeg (if using). Add the soaked panko and mix gently with your hands just until combined — overmixing makes tough meatballs.
  3. Form and brown the meatballs: Roll the mixture into about 16 meatballs (about 1½ inches / 2 tablespoons each). Heat a drizzle of oil in a separate large skillet over medium-high heat and brown the meatballs in two batches, turning occasionally, until browned on all sides, 6 to 8 minutes per batch. They don't need to be cooked through — they'll finish in the gravy. Transfer to a plate.
  4. Build the gravy: Once the onions are caramelized, sprinkle the flour over them and cook, stirring constantly, for 1 minute to toast it. Pour in the sherry and scrape up any browned bits from the bottom of the pan, letting it reduce by about half, about 1 minute. Stir in the beef broth, Worcestershire sauce, bay leaf, and thyme. Bring to a simmer and cook until slightly thickened, 3 to 4 minutes.
  5. Braise the meatballs: Nestle the browned meatballs into the onion gravy in a single layer, spooning some of the caramelized onions over them. Reduce the heat to low, cover, and simmer gently until the meatballs are cooked through (165°F at the center), 15 to 18 minutes, turning once halfway through.
  6. Melt the Gruyère: Position an oven rack about 6 inches from the broiler and preheat the broiler. Sprinkle the shredded Gruyère evenly over the meatballs and gravy. Broil until the cheese is bubbling, melted, and browned in spots, 3 to 5 minutes — watch closely, broilers vary.
  7. Serve: Remove the bay leaf. Serve the meatballs and onion gravy over the buttered egg noodles (or torn crusty bread), spooning the caramelized onions and any pan juices over the top. Garnish with parsley or chives.

Tips & Variations

Make Ahead

The onions can be caramelized up to 3 days ahead — cool and refrigerate them, then pick up at step 4 when you're ready to cook. You can also form the raw meatballs a day ahead and refrigerate them (covered) on a plate; brown them straight from the fridge, adding a minute or two. The full dish is best finished fresh because of the Gruyère broil, but the meatballs and gravy (through step 5, before the cheese) can be made a day ahead, refrigerated, and gently reheated before you add the cheese and broil.

Storage

Refrigerate leftovers in an airtight container for up to 4 days. Reheat gently on the stovetop or in the microwave, adding a splash of beef broth if the gravy has thickened. The meatballs and gravy freeze well for up to 3 months — freeze them without the cheese and noodles, then thaw overnight and reheat, topping with fresh Gruyère and broiling to serve.

Substitutions

Ground turkey or all-beef works in place of the pork blend — just note that all-beef can be a touch drier, so add an extra tablespoon of milk to the mix and don't overwork it. Use plain breadcrumbs or a slice of white bread soaked in milk (then squeezed out) in place of the panko; for a gluten-free version, use GF panko and swap the flour for 1 tablespoon of cornstarch whisked into the broth. Dry white wine, vermouth, or an extra splash of broth can stand in for the sherry. Gruyère is the classic, but Comté, Emmental, or provolone all melt beautifully — avoid mozzarella, which turns stringy. No egg noodles? Serve over mashed potatoes, polenta, or toasted crusty bread. For a vegetarian riff, use plant-based meatballs and swap the beef broth for mushroom broth.

Nutrition

Per serving: ¼ of the recipe (about 4 meatballs with gravy, plus noodles)

620Calories
36gFat
16gSat Fat
140mgCholesterol
1080mgSodium
33gCarbs
3gFiber
11gSugars
38gProtein

Reviews

Reviews coming soon! In the meantime, let us know what you think of this recipe.