Heat a large pot or Dutch oven over medium heat. Melt the butter, then add the sliced onions. Stir frequently for about 30-40 minutes, allowing the natural sugars in the onions to slowly break down and develop a deep golden-brown color. You’ll want to stir every 3 minutes for the first half of the cook time, then once they really begin to cook down, every minute or so. If the onions start to stick, deglaze the pan with a splash of water or broth to release the browned bits. Keep stirring until they are soft, jammy, and richly caramelized.
Add the garlic, salt and pepper and saute for 2 more minutes.
Add wine and allow mixture to come to boil. Stir in flour and let thicken for a minute or two.
While stirring, slowly stir in the beef broth, tamari, and balsamic vinegar. Add in the bay leaf and thyme bundle and bring the soup to a rapid simmer. Let simmer, rapidly (about medium-high heat), uncovered for 10 minutes, allowing the flavors to meld and the soup to reduce slightly, stirring occasionally.
Remove from heat and toss the bay leaf and thyme bundle. Taste and add salt, if desired. I usually add about ½ teaspoon more here.
Place 4 oven-safe coquettes (or mini casserole bowls) on a sheet pan and turn on your broiler. Ladle the French onion soup into the coquette’s, top with plenty of the bread cubes and top each with plenty of cheese (like ¼ cup of cheese per bowl).
Transfer to the oven and broil until the cheese melts and browns, 2 to 4 minutes, watching carefully to avoid burning.
Finish with fresh thyme and a sprinkle of flakey salt, if desired. Serve immediately.