Whisk flour, sugar, yeast, and salt in a large bowl.
In another bowl, combine warm milk, butter, egg, and vanilla. Pour into the dry ingredients.
Mix with a spatula until shaggy. Knead by hand 8–10 minutes (or 6 minutes in a stand mixer with dough hook) until smooth and slightly tacky. The dough should pull away cleanly from the bowl but still feel soft.
Shape dough into a ball and place in a lightly oiled bowl. Cover tightly.
Let rise in a warm spot until doubled, 60–90 minutes. When you poke it, the indentation should slowly spring back.
Turn dough onto a lightly floured surface. Roll to 1/2 inch thick.
Cut rounds with a 3-inch cutter and holes with a 1-inch cutter. Gather scraps gently and re-roll once.
Place on parchment-lined baking sheets, spacing apart.
Cover loosely with plastic wrap or a clean towel.
Let puff 30–40 minutes until lighter and slightly jiggly. Do not overproof or they’ll collapse in the oil.
Heat 2–3 inches of oil in a heavy pot to 350–360°F (175–182°C). Keep a thermometer clipped on.
Fry 2–3 donuts at a time, 45–60 seconds per side, until deep golden.
Use a spider strainer to transfer to a rack set over a sheet pan. Let cool 5–10 minutes before glazing.
Whisk powdered sugar, 3 tbsp milk, vanilla, and salt until smooth. Add more milk a teaspoon at a time until it flows like thick paint.
Divide into bowls and tint with gel colors. Gel keeps the glaze vibrant without thinning it too much.
Dip the top of each warm donut into glaze. Let excess drip back into the bowl.
Set on a rack and add sprinkles immediately so they stick. Repeat with different colors for a playful mix.
Let the glaze set 15–20 minutes before serving.
Place shaped donuts on parchment, brush tops lightly with melted butter.
Bake at 375°F (190°C) for 8–10 minutes until lightly golden.
Cool 5 minutes, then glaze and decorate.