French Onion Meatballs

All the flavors of French onion soup, but with meatballs. This one-skillet dinner has been blowing up on TikTok for good reason. Caramelized onions, beefy gravy, melted Gruyere on top. It comes together in under an hour.
Ingredients
- 1 lb ground beef (80/20)
- 1/3 cup breadcrumbs
- 1 egg
- 2 cloves garlic, minced
- 1 tsp dried thyme
- Salt and pepper to taste
- 3 large yellow onions, thinly sliced
- 2 tbsp butter
- 1 tbsp olive oil
- 1 tbsp flour
- 1 cup beef broth (or 1 tsp Better Than Bouillon beef base dissolved in water)
- 2 tsp Worcestershire sauce
- 1 cup shredded Gruyere cheese
- Fresh thyme for garnish
Step-by-Step Instructions
Step 1: Make the Meatballs
Combine ground beef, breadcrumbs, egg, garlic, thyme, salt, and pepper in a bowl. Mix until just combined. Don’t overwork the meat or the meatballs will be tough. Roll into 16 even balls.
Step 2: Brown the Meatballs
Heat olive oil in a 12-inch cast iron skillet over medium-high heat. Sear meatballs for about 3 minutes per side until golden brown. They don’t need to be cooked through yet. Transfer to a plate.
Step 3: Caramelize the Onions
Drop the heat to medium-low and add butter to the skillet. Toss in the sliced onions with a pinch of salt. Cook for about 20 minutes, stirring every few minutes. You want them deep golden and soft. This is the soul of the dish, so don’t rush it.
Step 4: Build the Gravy
Sprinkle flour over the onions and stir for 1 minute. Pour in the beef broth and Worcestershire sauce. Scrape up all the browned bits from the bottom of the pan. Let it simmer until slightly thickened.
Step 5: Finish and Broil
Nestle the meatballs back into the onion gravy. Simmer for 10 minutes on medium heat until the meatballs are cooked through. Pile Gruyere on top and broil for 2 to 3 minutes until the cheese is bubbly and golden. Hit it with fresh thyme before serving.
Serving Suggestions
- Over egg noodles or mashed potatoes for a full dinner
- With crusty bread for dipping into the gravy
- Alongside a simple green salad to cut the richness
Tips
- Don’t skip the caramelization. 20 minutes minimum. This is what makes it taste like French onion soup.
- Use a mix of Swiss and Gruyere if you want to save a few bucks. Still melts beautifully.
- Leftovers reheat well. Add a splash of broth when warming up so the gravy stays loose.
- For a shortcut on the broth, Better Than Bouillon gives you way more flavor than boxed broth.