Peel and trim the onions. Slice them in half lengthwise, then cut into thin strips.
In a large saucepan over medium heat, melt the butter. Add onions, reduce heat to low, and cook for about 45 minutes, stirring frequently, until they are deeply golden brown.
Pour the water into the pan, scraping up any brown bits. Season with salt and pepper to taste. Bring to a simmer, cover, and cook for 15 minutes.
Add the milk, bring the soup back to a simmer, then raise heat slightly and allow it to gently boil while stirring. Once it begins to boil, remove from heat.
Preheat the oven to 400°F and line a sheet pan with aluminum foil.
Place the baguette slices on the sheet pan. (Brush with olive oil if desired.) Toast on the top rack of the oven for 5 to 7 minutes or until lightly browned.
To serve: place the toasts in the bottom of 4 bowls and ladle the hot soup on top, or float the toasted slices directly on the soup. Serve immediately.
Notes
For a richer flavor, consider using caramelized onions with a splash of white wine before adding the water.
Stale baguette is preferred as it holds up better in the soup.
The milk should be room temperature to prevent curdling when added to the hot onions.
Keyword creamy onion soup recipe, French onion soup with milk, light onion soup, milk-based onion soup, rustic French soup, soup with stale baguette, vegetarian onion soup recipe