In a bowl, mix warm milk and yeast and let it sit for 5 minutes until foamy.
Combine flour, sugar, and salt in a large bowl.
Add yeast mixture to dry ingredients and mix to form a dough.
Knead dough until smooth and elastic.
Cover and refrigerate dough for 1–2 hours.
Place cold butter between parchment paper and roll into a flat rectangle.
Roll chilled dough into a large rectangle and place butter in the center.
Fold dough over butter and seal edges completely.
Roll out dough and fold into thirds like a letter.
Chill for 30 minutes and repeat rolling and folding process two more times.
Roll dough into a large rectangle and cut into triangles.
Roll each triangle tightly from base to tip to form croissants.
Place on baking sheet and proof for 1–2 hours until puffy.
Brush with egg wash made from egg and water.
Bake at 400°F (200°C) for 18–20 minutes until golden brown.
Cool slightly before serving.