In a large bowl, whisk together the gluten free flour, tapioca starch, sugar, xanthan gum, yeast, and salt. Add the warm milk, eggs, and softened butter, then mix until a soft, slightly sticky dough forms. Wrap the dough in plastic wrap, shape it into a rectangle, and refrigerate for 1 hour.
Place the cold butter between two sheets of parchment paper and pound it with a rolling pin into an even 6x8 inch rectangle. Sprinkle the flour over the butter and fold it in, then reshape into a rectangle. Refrigerate the butter block until firm but still pliable, about 15 minutes.
Roll the chilled dough out on a well-floured surface into a 10x16 inch rectangle. Place the butter block in the center, fold the dough over from both sides to fully enclose the butter, and pinch the seams shut.
Roll the dough out into a long rectangle about 1/4 inch thick. Fold it into thirds like a letter. Wrap in plastic wrap and refrigerate for 45 minutes. Repeat this rolling and folding process two more times, chilling for 45 minutes between each turn.
After the final chill, roll the dough out into a large rectangle about 1/4 inch thick. Using a pizza cutter, cut the dough into long triangles. Starting from the wide base, roll each triangle up toward the tip and curve the ends inward slightly to form a crescent shape.
Place the shaped croissants on a parchment-lined baking sheet, leaving a couple inches between each one. Cover loosely with plastic wrap and let them proof in a warm spot for 1 to 1 1/2 hours, until they look noticeably puffy.
Preheat the oven to 400 degrees F. Whisk together the egg and milk for the egg wash and gently brush it over each croissant.
Bake for 10 minutes at 400 degrees F, then reduce the temperature to 350 degrees F and bake for an additional 12 to 15 minutes, until deeply golden brown and flaky. Let cool on the baking sheet for 10 minutes before serving.