Combine the flour, sugar, and salt in a large mixing bowl.
In a separate bowl, mix the warm water or milk with active dry yeast. Cover and let it sit for 10 minutes until frothy.
Add the yeast mixture to the dry ingredients. Mix on low for 2 minutes, then increase to low-medium speed and mix for 5 minutes. The dough should be smooth and not sticky.
Knead the dough by hand for a few minutes, then cover and allow it to rise for at least 1 hour.
Transfer the dough to a piece of parchment paper. Roll it out gently, then cover and refrigerate overnight.
Prepare the butter square by cutting even pieces of butter. Place them next to each other on parchment paper, fold the parchment over to encase the butter, and roll it into an even square (about 1/4 inch thick).
Take the chilled dough and roll it into a square. Place the butter square diagonally on the dough (like a diamond in a square), and fold the edges of the dough over the butter to encase it.
Dust with a little flour and roll the dough into a rectangle. Fold the rectangle: bring one end to 3/4 of the way and the other to 1/4, then fold in half. Wrap and refrigerate for 1 hour.
Roll out the chilled dough into a thin rectangle. Cut triangles for croissants (one side should be twice the size of the opposite side for proper shaping).
Stretch each triangle slightly and roll from the wider end to the tip to form croissants.
Place croissants on a baking tray lined with parchment paper. Cover and let rise for 1 hour at room temperature.
Brush the croissants with egg wash and bake in a preheated oven at 350°F (165°C) for 12-15 minutes or until golden brown on top.