Prep your pan and bread: Heat the oven to 350°F (175°C). Butter a 9x13-inch baking dish or a similar 3-quart casserole. Cut bread into 1-inch cubes.
If it’s soft, spread the cubes on a sheet pan and bake for 8–10 minutes to dry them slightly.
Warm the dairy: In a medium saucepan, warm the milk, cream, butter, and salt over low heat until the butter melts and the mixture is warm to the touch. Do not boil. Remove from heat and stir in the vanilla.
Make the custard: In a large bowl, whisk the eggs and sugar until smooth and slightly pale.
Slowly pour in the warm milk mixture while whisking. This helps prevent scrambled eggs and keeps the custard silky.
Combine with bread: Add the bread cubes to the custard. If using raisins or chocolate chips, gently fold them in now.
Press the bread down so every piece gets soaked. Let it sit for 10–15 minutes to absorb the custard.
Transfer to the dish: Pour the mixture into the buttered baking dish, spreading it evenly. Press down lightly again to level the surface and ensure an even bake.
Optional water bath: For an extra-custardy texture, place the baking dish into a larger pan and pour hot water into the outer pan until it reaches halfway up the sides.
This step is optional but gives a very tender set.
Bake: Bake for 40–50 minutes, or until the top is golden and the center is just set. A knife inserted near the center should come out mostly clean with a few moist crumbs.
Rest and serve: Let it cool for 10–15 minutes so it firms up slightly. Dust with powdered sugar if you like.
Serve warm, with cream, a scoop of vanilla ice cream, or a quick vanilla sauce.