In a large pot, melt the unsalted butter over medium heat. Add the thinly sliced onions and cook until they become soft and caramelized, stirring occasionally. This process will take about 25-30 minutes.
Once the onions are nicely caramelized, add the beef or vegetable broth, worcestershire sauce, balsamic vinegar, bay leaves, dried thyme, salt, and pepper to the pot. Stir well to combine all the ingredients.
Bring the soup to a boil, then reduce the heat to low and let it simmer for about 15-20 minutes. This will allow the flavors to meld together and develop a rich taste.
Once the soup is ready, remove the bay leaves from the pot. Ladle the hot soup into individual oven-safe bowls or crocks, filling them about 3/4 full.
Place a few toasted croutons or baguette slices on top of each bowl of soup, forming a single layer.
Lay 2-3 slices of Provolone cheese over the croutons, ensuring it covers the entire surface of the bowl.
Transfer the bowls to the broiler and cook for about 2-3 minutes, or until the cheese is melted and starts to bubble and brown slightly.
Carefully remove the bowls from the broiler (remember, they will be hot!) using oven mitts or kitchen towels.
Let the French onion soup cool for a couple of minutes before serving. The cheese will be gooey, and the soup underneath will be piping hot. Garnish with fresh thyme leaves, or parsley. Enjoy!