Lightly grease a 9×13 inch baking dish. Arrange the bread cubes evenly in the dish.
In a large bowl, whisk together the eggs, milk, cinnamon, nutmeg, granulated sugar, vanilla extract, and salt until well combined.
Pour the egg mixture evenly over the bread cubes. Press the bread down gently to soak up the liquid.
Cover the dish tightly with plastic wrap and refrigerate for at least 4 hours, or preferably overnight.
For the apple topping: In a skillet over medium heat, melt the butter. Add the sliced apples and brown sugar. Cook, stirring occasionally, until the apples are tender-crisp, about 5 to 7 minutes. Remove from heat.
Preheat your oven to 350 degrees Fahrenheit (175 degrees Celsius).
Remove the plastic wrap from the casserole. Spoon the cooked apple mixture evenly over the top of the soaked bread.
Bake for 40 to 45 minutes, or until the casserole is puffed and golden brown in the center. If the top browns too quickly, loosely cover it with foil for the last 10 minutes.
Let the casserole rest for 5 minutes before serving. Drizzle with caramel sauce and sprinkle with pecans or powdered sugar if desired.
Notes
Brioche bread works best for a rich texture. If you only have day-old bread, that is fine.
For a streusel topping, mix 1/2 cup flour, 1/4 cup brown sugar, 1/4 cup cold butter (cubed), and 1/2 teaspoon cinnamon until crumbly, and sprinkle over the apples before baking.
You can reheat leftovers in the microwave or a 325 degree oven until warmed through.