Warm the milk: Heat milk until just warm to the touch (about 110°F). If it’s too hot, let it cool a few minutes so it doesn’t kill the yeast.
Activate the yeast (if using active dry): Stir yeast and a pinch of sugar into the warm milk.
Let it sit 5–10 minutes until foamy. If using instant yeast, you can add it directly to the flour and skip this step.
Mix the wet ingredients: In a large bowl, whisk the eggs, sugar, melted butter, vanilla, and zest (if using). Stir in the milk-yeast mixture.
Add the dry ingredients: In the same bowl, add 3 1/2 cups of flour and salt.
Mix with a wooden spoon or dough hook until a shaggy dough forms.
Knead: Turn the dough onto a lightly floured surface and knead 8–10 minutes, adding just enough flour to keep it from sticking. Aim for soft and slightly tacky, not dry. If using a stand mixer, knead with the dough hook 6–8 minutes on medium-low.
First rise: Form into a ball, place in a lightly oiled bowl, cover, and let rise in a warm place until doubled, about 60–90 minutes.
Shape the dough: For a large braid, divide dough into 3 equal ropes, each about 16–18 inches long.
Pinch the ends and braid gently. For small rings, make 6 ropes and braid pairs into circles, pinching ends together.
Add the eggs (optional): If nesting eggs in the dough, tuck raw, dyed eggs gently into the braid. They’ll cook in the oven.
Don’t press too deep—just enough so they stay put.
Second rise: Transfer to a parchment-lined baking sheet. Cover loosely and let rise until puffy, about 30–45 minutes. Preheat oven to 350°F (175°C) while it rises.
Brush and top: Brush with egg wash for shine.
Sprinkle with colorful sprinkles or pearl sugar if you like.
Bake: Bake 25–30 minutes for a large braid or 18–22 minutes for smaller rings, until golden brown and the loaf sounds hollow when tapped. Tent with foil if browning too fast.
Cool: Transfer to a rack and let cool at least 20–30 minutes before slicing. The texture sets as it cools.