Hokkaido Milk Bread (Soft, Fluffy Asian Bread)

Print Friendly, PDF & Email

The ultimate soft, fluffy, Asian-style bread with tender-but-chewy texture…it seems impossible to recreate at home but as I will show you, it is so easy! With this recipe (and its secret ingredient) I can guarantee you will have success with this bread. So if you’ve been intimidated by bread baking before, trust me, this recipe is super forgiving and I promise you will enjoy the result!

This recipe is a great base for making other kinds of bread products you may have drooled over at the Asian bakery…once you make the dough you can fill it, top it, wrap it, braid it…the options are endless!



Serves 4

  • ½ cup (120 ml) whole milk
  • 20g + 320g bread flour
  • 2 tsp instant yeast
  • ½ cup (120 ml) evaporated milk
  • ¼ cup (56 g) softened butter, unsalted
  • 1 large egg, beaten
  • ½ tsp salt
  • 2-4 Tbsp sugar (see note)

Note: You can adjust the sugar amount to suit your taste. 2 Tbsp of sugar will give a neutral bread that works for savoury and sweet applications, while 4 Tbsp yield a distinctly sweet bread which works well as a stand-alone bread that doesn’t need much sweet filling/topping, just some salted butter or perhaps you want to stir in some raisins and make raisin bread! 3 Tbsp makes a slightly sweet bread that is charming in its own way 🙂


Make the tangzhong or milk roux: Combine the whole milk with 20 g of bread flour in a small pot and stir until there are no more lumps. Heat the mixture over high heat, stirring constantly with a rubber spatula, it will get thicker and thicker until it becomes a very thick, sticky paste. Remove from heat.

Transfer the tangzhong into a bowl and add evaporated milk; stir to mix briefly to cool the tangzhong down. Stir in the egg to combine, the mixture will be lumpy, that is okay.

Kneading by machine: In the bowl of a stand mixer, stir together the remaining 320g of bread flour and the yeast. Add the evaporated milk mixture and mix on medium-low speed, with a dough hook attachment, just until there is no more dry flour is left in the bowl, 1-2 minutes. (If the flour around the edges of the bowl has a hard time getting mixed in, you can stop and manually mix it a little bit to help it along.) Once no more dry flour is left in the bowl, stop the mixer and let the moistened flour rest, covering the bowl with a towel, for 20 mins. 

After resting, turn the mixer back on low speed and gradually sprinkle in salt and sugar. Keep kneading until the dough is smooth, about 7-8 minute, stopping and pulling dough off the hook to “redistribute” the dough every minute or so.

Once dough is smooth, add butter little at a time while machine is running. Knead the dough until all the butter is absorbed, stopping to scrape the bowl and pull dough off hook every minute or so. It will at first be a buttery mess, and you’ll feel like there’s no way all the butter will get absorbed, but I promise it will! 

Once all butter has been absorbed and the dough is smooth, transfer the dough only a clean work surface and finish kneading by hand a few times. Form the dough into a ball and place is in a well-oiled bowl. Turn the dough around to coat the dough in oil on all sides, the cover and let proof at room temp for 1 hour or until double in size. (Continue with the recipe starting from where it says “Once the dough is proofed”.)

Kneading by hand: In a large mixing bowl, stir together the remaining 320g of bread flour and the yeast. Add the evaporated milk mixture into the middle and stir with a wooden spoon just until there is no more dry flour. Let it rest, covered with a towel, for 20 minutes. 

After resting, flatten the dough and sprinkle salt over it, then knead it just until incorporated. Repeat with the sugar, 1 Tbsp as a time. Continue knead ingthe dough by hand until the dough is smooth.

Once dough is smooth, flatten the dough again and add the butter onto the dough. Knead the butter into the dough (yes, it’ll get messy) until the butter is all absorbed and the dough is super smooth.

Form the dough into a ball and place is in a well-oiled bowl. Turn the dough around to coat the dough in oil on all sides, the cover and let proof at room temp for 1 hour or until double in size.

Once the dough is proofed, turn it onto a clean work surface and press it down to remove all the gas inside the dough. At this point shape the dough as desired. For buns: divide into 11 pieces (65g each) and form into balls using technique shown in the video. You can bake as free form buns, or put them into a greased cake pan and bake as pull-apart buns (as I did in the video). In the video, I used an 8-inch round pan, and was able to put 8 buns into it, with 3 extra ones that I baked as free form buns. For loaf: Divide into 3 or 4 equal pieces, form each into a ball and put in a buttered or parchment-lined loaf pan.

Once shaped, proof again for another 45 mins to 1 hour, covered at room temp. Meanwhile, preheat oven to 375 °F or 190 °C.

Once proofed, bake in the over on the middle rack, and as soon as you put the bread in turn the temp down to 350°F (175°C). Bake until browned (14-15 mins for free form buns, 20-25 mins for round cake pan, 30-35 mins for loaf pans.) 

Once done (the bread will sound hollow when tapped if it’s done), let cool in the pan for about 5 minutes then flip out onto a rack and let cool completely. If making a loaf, do NOT cut the loaf with a knife when the bread is still warm or the condensation on the knife will make the bread wet!

Wanna try it Thai style? Enjoy with my Pandan Coconut Custard Dip! 


Love the show? Support us!