Warm the milk in a small saucepan until it’s just warm to the touch, not hot. Remove from heat and stir in butter until melted. Let it cool slightly.
In a large bowl, combine warm water, sugar, and yeast. Let it sit for 5–10 minutes until foamy. This step always feels magical to me—watching yeast come alive.
Add the milk mixture to the yeast, followed by salt. Stir gently.
Gradually add flour, one cup at a time, mixing until a soft dough forms.
Turn the dough onto a lightly floured surface and knead for about 8–10 minutes, until smooth and elastic.
Place dough in a lightly greased bowl, cover with a towel, and let rise in a warm spot for about 1 hour, or until doubled in size.
Punch down gently, shape into a loaf, and place into a greased loaf pan.
Cover again and let rise for 30–40 minutes.
Bake at 350°F (175°C) for 30–35 minutes, until golden and hollow-sounding when tapped.
Cool on a rack before slicing, if you can wait that long.