Mix Meatballs - In a large bowl, combine ground beef, breadcrumbs, egg, Worcestershire sauce, garlic powder, onion powder and salt and pepper. Mix until just combined and form into 1-inch meatballs.
Brown Meatballs in Skillet - Heat 1 tablespoon of butter in a large skillet over medium heat. Add the meatballs and cook until browned on all sides, about 5 minutes. Remove meatballs from the skillet and set aside.
Caramelize Onions - In the same skillet, melt the remaining butter. Add sliced onions and cook over medium-low heat, stirring occasionally, until they become golden brown and caramelized, about 15-20 minutes. Sprinkle the flour over the onions and stir to coat.
Add Beef Broth - Slowly add the beef broth, stirring constantly to avoid lumps. Stir in the dried thyme and bring to a simmer.
Return Meatballs to Skillet - Return the meatballs to the skillet, covering them with the french onion sauce. Let simmer for about 10 minutes until the meatballs are cooked through and the sauce thickens.
Sprinkle with Cheese - Sprinkle shredded Gruyère over the meatballs and cover the skillet with a lid. Simmer for a few minutes until the cheese is melted.
Notes
Store leftovers in an airtight container in the fridge for up to 4 days. Reheat gently over low heat on the stovetop or in the microwave in 30-second intervals. Freeze for up to three months in an airtight container.
Caramelizing onions takes time—don't rush the process by turning up the heat. Medium-low heat is best for a rich, deep flavor. Stir occasionally, but let them sit for a few minutes between stirs to help them develop color.
Don’t over mix the meatball mixture, as this can make them tough. Mix just until combined.
You can bake the meatballs at 400°F for 15-18 minutes if you prefer to avoid pan-frying.
To thicken the sauce without flour, let it simmer longer to reduce naturally or use a cornstarch slurry (1 tablespoon cornstarch mixed with 1 tablespoon water).