In a large mixing bowl, combine the all-purpose flour, instant yeast, granulated sugar, and salt. Stir until evenly distributed.
Gradually pour the warm milk into the dry ingredients, stirring as you go, until the dough begins to come together.
Transfer the dough to a lightly floured surface and knead it for about 5 minutes, or until it becomes smooth and elastic.
Roll the dough out into a rectangle, approximately 1/4 inch thick. Spread the softened butter evenly over the surface of the dough.
Fold the dough into thirds, like folding a letter, and turn it 90 degrees. Roll it out again into a rectangle. Repeat this folding and rolling process two more times.
Wrap the folded dough in plastic wrap and refrigerate it for 1 hour to allow it to chill and firm up.
Preheat your oven to 375°F and line a baking sheet with parchment paper.
Roll out the chilled dough into a large rectangle and cut it into triangular shapes. Roll each triangle up from the wide end to the tip, forming crescent-shaped croissants.
Arrange the croissants on the prepared baking sheet, ensuring there is space between them for expansion.
Brush the tops of the croissants with the beaten egg to give them a golden, shiny finish.
Bake the croissants in the preheated oven for 12–15 minutes, or until they are puffed and golden brown.
Allow the croissants to cool slightly before serving. Enjoy these warm, flaky homemade croissants!