Heat butter and olive oil in a large skillet over medium heat. Add sliced onions, salt, and pepper. Cook, stirring occasionally, until onions are deeply caramelized, about 25-30 minutes.
Sprinkle flour over the onions and stir constantly for 1-2 minutes until the flour is well incorporated and lightly browned.
Slowly pour in the beef broth while stirring to prevent lumps. Add Worcestershire sauce and thyme.
Bring to a simmer and cook, stirring occasionally, until the gravy thickens, about 5-7 minutes. Adjust seasoning to taste.
Serve hot over mashed potatoes, sausages, or roast beef.
Tips
For a richer flavor, use homemade beef broth or add a splash of red wine along with the broth.
To make ahead, prepare the gravy and reheat gently, adding a splash of broth if too thick.
Leftover gravy can be stored in the refrigerator for up to 3 days or frozen for up to 3 months.