Begin by gathering and prepping all of your meatball ingredients according to the ingredient list to have ready and organized for use.
Place your breadcrumbs into a dish, and add the milk to them to soak for 5 minutes.
In the meantime, place your ground beef into a large bowl.
After the breadcrumbs have soaked, add them to the ground beef, along with the parsley, thyme, herbes de Provence, salt, pepper, minced onion, garlic, ¼ cup of the shredded Gruyere cheese, and whisked egg.
Using your clean hands, gently mix the beef together with the ingredients until well-combined, but taking care not to over mix to keep the meatballs tender.
Scoop out 2 tablespoon-size portions of the meat mixture (you might want to use a cookie scoop for this), and place onto a tray or large platter to hold.
Wet your hands with a bit of water, and roll each portion into a round meatball, then place the rolled meatballs into the fridge to chill for 15 minutes.
Meanwhile, gather and prep all of your French onion sauce ingredients according to the ingredient list to have ready and organized for use.
Once the meatballs have chilled, place a large cast iron skillet (or other large, oven-safe, heavy bottom pan that can accommodate the meatballs and sauce) over medium-high heat, and add 2 tablespoons of the olive oil.
Once hot, add a batch of meatballs into the pan and allow them to sear and brown on all sides for about 8 to 10 minutes.
Place the meatballs onto a tray or sheet pan to hold while you brown the rest of the meatballs.
For the sauce:
In the same skillet as you browned the meatballs (which should be on medium-high heat), add another 2 tablespoons of the oil (if there's already enough oil from browning the meatballs, skip the added oil), as well as the ghee or butter.
Once hot and melted, add the onions plus a pinch of salt and pepper, and allow them to cook down and deeply caramelize for about 20 to 25 minutes, stirring frequently, until the onions become very dark, soft and jammy.
Then, stir in the garlic, herbes de Provence and dried thyme, just until aromatic (about 30 seconds).
Add in the sherry or wine, and allow it to bubble up and reduce for about 30 seconds.
Sprinkle in the flour and stir that in to incorporate for about 30 seconds, then pour in the beef stock and whisk or vigorously stir to blend in and combine until smooth.
Allow the French onion sauce to simmer for 5 minutes, just to tighten it up.
Assembly:
Meanwhile, turn your broiler on "high".
Turn the heat off under the sauce, and stir in the fresh thyme leaves.
Nestle back into the pan the browned meatballs, and top them with a combination of the Gruyere and mozzarella cheeses.
Place under the broiler for about 5 to 7 minutes, or until the cheese becomes nice and gooey and melted.
To serve, sprinkle over the meatballs some additional thyme leaves as garnish, and spoon 3 to 4 meatballs, along with lots of sauce and cheese, into a bowl.
Enjoy with warm, toasted bread, or over hot mashed potatoes, if desired.