Cheesy French Onion Meatballs

published Oct 11, 2023
French Onion Meatballs Recipe

Inspired by the iconic French onion soup, this skillet dinner has it all — caramelized onions, juicy meatballs, and gooey, browned Gruyère cheese.

Serves4 to 6

Prep45 minutes to 50 minutes

Cook50 minutes to 1 hour

Jump to Recipe
We independently select these products—if you buy from one of our links, we may earn a commission. All prices were accurate at the time of publishing.
French Onion Meatballs in a cast iron pan
Credit: Kristina Vanni

By this time of the year, I’ve cooked hundreds of dinners (246 to be exact, and yes I’ve counted), but these French onion meatballs are the best dinner I’ve made all year. This skillet dinner is inspired by the savory flavors of French onion soup, but made more substantial with the addition of tender, juicy meatballs. A heaping pile of onions is slowly caramelized until silky and intensely flavored. Add the meatballs to the caramelized onion sauce, then finish with a crown of gooey, browned Gruyère cheese. It’s the kind of dinner you can’t help but curl up with. 

What’s the Difference Between Caramelizing and Sautéing? 

The difference between caramelizing onions and sautéeing them comes down to two factors: time and heat.

  • Caramelized onions are cooked over a lower heat for a longer period of time, about 30 minutes for this amount of onions. As the onions cook, moisture is released and evaporates, and the sugars caramelize. This is a process that can’t be rushed with higher heat or the addition of sugar. The results are tender, practically jammy, onions that are the perfect balance of savory and sweet. 
  • Sautéed onions are cooked quickly at a higher heat. Many savory recipes call for sautéing onions for about five minutes until tender and beginning to brown. These onions still have texture to them and the color is golden, rather than a ruddy, caramel hue.

The Secret to Tender Meatballs (Without the Mess)

Making meatballs can be a messy endeavor. Instead of rolling portions between my palms I use a tool that is already in my kitchen — a cookie scoop. 

Is it Better to Bake or Fry Meatballs Before Adding to Sauce?

Baking meatballs is the best method. In the oven, all of the meatballs cook evenly and at the same time on a single baking sheet until they are juicy and browned. Plus, since baking is hands-off, you can shift your focus to caramelizing the onions.

Credit: Kristina Vanni

How to Make French Onion Meatballs in Advance

You can still enjoy this French onion meatball dinner any day of the week, even if your evenings aren’t conducive to caramelizing onions. Both meatballs and caramelized onions are ideal for preparing in advance. Here’s how to do it. 

  • Bake meatballs. Prepare and bake the meatballs until browned and cooked through. Let cool and refrigerate for up to two days. 
  • Caramelize onions and make the sauce. Caramelize the onions, then add the all-purpose flour and cook until no dry spots remain. Deglaze the pan with white wine and whisk in beef broth. This is where you’ll stop your prep until you’re ready to serve. 
  • Reheat meatballs and sauce together. Add meatballs to the caramelized onion sauce, bring to a boil, and simmer until the sauce thickens and the meatballs are heated through. Don’t forget to add the vinegar!
  • Add cheese and broil. Sprinkle the Gruyère cheese evenly over the top and broil until gooey and browned. 

What to Serve with French Onion Meatballs

French Onion Meatballs Recipe

Inspired by the iconic French onion soup, this skillet dinner has it all — caramelized onions, juicy meatballs, and gooey, browned Gruyère cheese.

Prep time 45 minutes to 50 minutes

Cook time 50 minutes to 1 hour

Serves 4 to 6

Nutritional Info


  • 2 pounds

    yellow onions (about 2 large or 4 medium)

  • 1

    small bunch fresh thyme

  • 2

    cloves garlic

  • 6 ounces

    Gruyère cheese, divided

  • 1/2 cup

    panko breadcrumbs

  • 1/2 cup

    whole or 2% milk

  • 1

    large egg

  • 2 teaspoons

    Worcestershire sauce

  • 2 1/2 teaspoons

    kosher salt, divided, plus more as needed

  • 3/4 teaspoon

    freshly ground black pepper, divided, plus more as needed

  • 1 1/2 pounds

    ground beef

  • 2 tablespoons

    unsalted butter

  • 2 tablespoons

    all-purpose flour

  • 1/2 cup

    dry white wine

  • 1

    (14.5-ounce) can beef broth (scant 2 cups)

  • 1 teaspoon

    balsamic or sherry vinegar

  • Crusty bread, for serving (optional)


  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.

  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).

  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.

  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.

  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.

  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.

  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.

  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.

  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.

  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.

Recipe Notes

Make ahead: Bake the meatballs and caramelize the onions. After adding the flour and broth to the onions, remove from the heat (do not simmer to thicken or add vinegar yet). Add the meatballs to the onion mixture, cool, and refrigerate for up to 2 days. When ready to serve, transfer back to the skillet, and bring to a simmer. Continue with the recipe as directed.

Storage: Leftovers can be refrigerated in an airtight container for up to 2 days.