Our Signature Sourdough Milk Bread

If you know Japanese milk bread, you already know how incredibly soft, milky and delicious it is. Now combine that with the magic of sourdough, and you get a pillowy, cloud-like loaf with deep flavor and a gentle tang developed from an overnight bulk fermentation. Say hello to our signature sourdough milk bread!

A loaf of sourdough shokupan on a wire rack.

To me, milk bread is the quintessential Asian white bread – far superior to the typical grocery store loaf, which I hardly ever buy. Especially when my kids are constantly asking for toast whenever I make this sourdough milk bread at home. We easily go through a whole loaf in a week.  

I’ve been making milk bread using commercial yeast for years. Back then, my formula was designed to be simple, looser, more flexible, and not particularly focused on dough hydration. It wasn’t until I started baking with sourdough starter that I really began to understand concepts like hydration, autolyse, and bulk fermentation. Baking bread will always involve a bit of intuition, it’s still very much about feel. But this recipe is as dialed-in as it can be, designed to give you consistent, reliable results every time.

The interior of a sourdough milk bread loaf.

My recipe uses the tangzhong method, a technique traditionally used in Chinese bread making to achieve an incredibly soft, springy texture. Tangzhong is essentially a simple roux: a portion of the milk is mixed with a bit of flour and cooked until it forms a thick paste. This process gelatinizes the starches, allowing the dough to absorb more moisture. The result is a loaf with beautifully soft crumb and a dough that’s much less sticky, and much easier to work with.

I tested this recipe over the course of months, experimenting with different amounts of sourdough starter, regular starter versus sweet starter, same-day baking versus overnight fermentation, with and without eggs, and even different types of milk – like this sourdough coconut milk bread. At one point, my freezer was completely packed with milk bread. There were plenty of overproofed loaves that didn’t make the cut, but the good ones definitely didn’t go to waste. They turned into French toast, bostock, and bread pudding!

Now, let’s talk ingredients and step-by-step instructions. I’ll also walk you through a sample baking schedule with an overnight cold fermentation. And if you prefer, you can always jump straight to the recipe card and skip the process photos.

Ingredients and notes

You will need just 7 ingredients to make this sourdough milk bread. 

Sourdough milk bread ingredients with labels.
  • Milk is obviously a must-have for milk bread. I always use whole milk to maximize the fat content, which is essential for making a tender loaf of milk bread. Furthermore, egg and butter are added to further enrich this bread dough, making it even more tender. For a loaf without egg, try our eggless sourdough milk bread.
  • We will use just 30 grams (a smidge more than 2 tablespoons) of sugar, which also helps with yeast activities (from your sourdough starter) since yeast feeds on sugar. It doesn’t make the bread extremely sweet, just enough to balance out the tang from the sourdough starter and long fermentation. You can experiment with increasing the amount of sugar if you prefer your milk bread a little sweeter but I would refrain from reducing the amount of sugar.
  • I recommend King Arthur All Purpose Flour for this recipe. There is no need to use bread flour since KA AP flour is already 11.7% protein which is plenty good for bread and a little lower than bread flour to keep the loaf more tender. However, I would stay away from store brand AP flour, most contain only 10% protein which will result in a flimsier loaf with not enough structure. If you want to swap out some AP flour for whole wheat, you can try our whole wheat sourdough milk bread instead.            
  • You always need just a little bit of salt to enhance the flavor of your bread. Don’t omit it or the flavor will be flat. I typically use Mortorn kosher salt, so 6 grams of salt is about 1 teaspoon. I promise you this is not a lot, it won’t make your bread super salty.
  • And the last but most important ingredient – your ripe sourdough starter – this recipe is designed for 100% hydration starter. I feed mine with a mixture of half rye flour and half bread flour, so you will see that it has brown specs in it. But you can feed your sourdough starter with any type of flour. You just need 100 grams of ripe starter for this recipe. Prepare it, feed it as you normally do, just make sure it is at its peak when you are ready to mix the dough. You can also use a sweet starter to curb tanginess if you prefer.

Sample baking schedule

This baking schedule was designed for a weekend bake that you can start Friday night after work in between dinner and bed time routines, and bake on Saturday afternoon/night. Or if you have a flexible work-from-home schedule, you can start the dough on a week night, and bake it the next day with minimal activities during the day so it doesn’t interfere with your work schedule and/or kids’ activity schedule.

Make sourdough milk bread with me!

Love seeing each step in photos? Follow along visually as we walk through this recipe step-by-step, take note of the suggested time stamp for each step. Otherwise, you can skip ahead, detailed instructions are in the recipe card below.

Day 1

My sourdough starter typically peaks within 12 hours, so I will make sure to feed it in the morning (around 7-8 am ish) if I know I’m going to start a batch of dough at night (around 7 pm ish). So make sure you build this into your schedule to ensure your starter peaks at the right time.

Scald milk with melted butter in a saucepan.

1. Scald the milk (7 pm)

Heat the milk with sugar until the sugar dissolves. You can take it off the heat, then add the butter to melt it while cooling the mixture down. But if the butter doesn’t melt completely, you may need to put it back on the heat. Transfer the mixture to your stand mixer bowl to cool – this will take about 20-30 minutes or so.

NOTE: Most recipes will tell you to incorporate room temp butter into the dough while kneading because fat inhibits gluten formation, and we want gluten formation in bread dough. However, I didn’t find much of a difference using melted butter from the start compared to incorporating room temp butter at the end. So I decided to simplify this step.

Flour and milk in a saucepan are cooked into a tangzhong.

2. Make the tangzhong immediately

Using the same saucepan without washing, cook the milk with flour to make the tangzhong. Transfer it to a plate and spread into a thin layer to cool.

Mix flour with milk mixture and let rest in the stand mixer bowl.

3. “Autolyse” (7:30 pm)

Mix together flour, salt and the cooled milk/butter mixture, cover and let this rest for 15-20 minutes.

NOTE: This is not a true autolyse since we are adding melted butter as well as salt to the mixture. However, I do find that this step, while short and non-traditional, helps with dough strength and extensibility in the stretch-and-fold steps. Without this “autolyse” step, the dough can break easily during stretch-and-fold.

Egg, tangzhong and sourdough starter are added to the autolysed dough. Knead the dough in the stand mixer.

4. Knead the dough (~8 pm)

Add egg, tangzhong and sourdough starter and knead with the dough hook for 20 minutes.

Forming a dough ball on two hands.

5. Start bulk fermentation (~8:30 pm)

Use a bit of oil on your hand and your bowl scraper to prevent sticking and scrape the dough out of your mixing bowl. Form a smooth ball on a clean countertop or on top of a silicone liner. Oil your mixing bowl before putting the dough back into it. You can also choose to use a new clean bowl for your bulk fermentation.

Collage of 6 photos showing stretching and folding sourdough milk bread dough.

6. Stretches and folds (9, 9:30, 10 pm)

During bulk fermentation, you will perform 3 sets of stretch-and-fold to add strength to your dough at 30-minute intervals. Once you are finish with your last set, cover and refrigerate overnight.

NOTE: If you’re short on time, I would do 2 at the minimum. And if you forget to set your timer, it’s okay if the time between sets is longer than 30 minutes. I’ve let the dough sit for more than an hour when I need to go pick up kids in between sets. Do what works for your schedule.

Day 2

Remove your dough from the fridge to let it come to room temperature. It likely hasn’t doubled in size yet but should have grown overnight. The time line is flexible here, depending on what I have going on in the morning. I would typically let it sit on the counter for about 2 hours to finish rising while I do my morning chores, take care of the dogs’ needs, make breakfast for kids, etc. Then I would start dividing and shaping. But if you need to go somewhere early, you can divide and shape it right away while the dough is cold. Your proofing period would just be longer.

Cutting the dough into 3 portions.

1. Divide the dough (11 am)

Cut the dough into 3 equal portions. Roll them into smooth balls, cover and let rest for 10-15 minutes to allow the gluten to relax before shaping.

NOTE: The dough shouldn’t be very sticky anymore. You can use just a bit of flour or a bit of oil to keep it from sticking to your surface and hand. I love using a silicone baking mat for this part.

Collage of 5 photos showing the process of shaping the dough.

2. Shape into logs (11:15 am)

Shape each ball into a log like so and place them into your loaf pan.

Dough in loaf pan before and after proofing.

3. Proof the dough (~11:20 am)

Proof the dough for 6 – 8 hours. The dough is ready when it is very puffy, has risen well above the rim of the loaf pan, and a gentle press leaves an indentation that slowly springs back (but not immediately).

NOTE: You can proof your dough inside your oven with the light turn on and a pan of hot water at the bottom of the oven to keep it warm and humid. Or place your loaf pan inside a 6-quart storage bin with a small tin of water as a make-shift proofing box. Proofing time is highly dependent on temperature so make sure to pay attention to visual cues.

Add egg wash to dough and bake until golden.

4. Bake (7:30 pm)

Brush egg wash generously over the surface of your dough and bake at 400°F (205°C) for 7 minutes, then reduce the temperature to 350°F (180°C) and bake for another 20 minutes. Total bake time is about 27 minutes. The internal temperature of your bread should reach 190 – 200°F. Let cool before cutting into it.

NOTE: You want to bake your bread at 400°F briefly to give it some oven spring helping it rise taller during the first few minutes. And then bake it at a lower temperature to completely cook the inside.

Storage

  • Room temperature: you can store milk bread at room temperature for a couple days. Only slice off whatever you’re planning to eat to keep the moisture within the loaf. Store the bread in a ziploc bag. Since this loaf is homemade with no preservatives, I  tend to keep it refrigerated to prevent spoiling.
  • Refrigerator: you can keep your milk bread in the fridge for a couple weeks. Again, only slice what you need and keep it in a ziploc bag. It does dry out a bit the longer you store it, but it’s easily revived in the toaster.
  • Freezer: for the freezer, I recommend slicing and then freezing. This way you can defrost only what you need when you need. Your bread should last up to 3 months. To preserve the flavor, wrap the loaf in foil as well as plastic and then store in a freezer bag.
3 sections of sourdough milk bread on a wooden board next to a tea towel.
The interior of a sourdough milk bread loaf.

Sourdough Shokupan (Japanese Milk Bread)

If you know Japanese milk bread, you already know how incredibly soft, milky and delicious it is. Now combine that with the magic of sourdough, and you get a pillowy, cloud-like loaf with deep flavor and a gentle tang developed from an overnight bulk fermentation.
Servings : 12 slices
Prep Time : 1 day
Cook Time : 27 minutes
Total Time : 1 day 27 minutes

Equipment

  • Kitchen scale
  • Thermometer
  • Stand Mixer
  • Saucepan
  • Spatulas
  • Bowl scraper
  • 1-pound loaf pan (8.5” x 4.5”)

Ingredients 

Tangzhong

  • 20 grams all-purpose flour 11.7% protein
  • 100 grams whole milk

Bread dough

  • 60 grams whole milk
  • 30 grams granulated sugar
  • 57 grams unsalted butter sliced into thin pats
  • 260 grams all-purpose flour 11.7% protein
  • 6 grams kosher salt
  • 1 large egg about 50 grams, room temperature
  • 100 grams sourdough starter 100% hydration
  • Neutral oil for dough handling

Egg wash

  • 1 large egg
  • 15 grams (1 tablespoon) water

Instructions

Day 1

  • Feed your starter (around 7 – 8 am) – Discard and feed your starter about 12 hours before you are planning to mix the dough. It should be ready within that time, give or take. Your starter should more than double in size, with bubbles distributed evenly throughout.
  • Scald the milk (7 pm) – Heat 60 grams of whole milk with 30 grams of sugar in a small saucepan over medium heat, stirring constantly, until the milk is simmering and the sugar has fully dissolved. Add the sliced butter, and stir until completely melted. Take it off the heat, transfer to the stand mixer bowl and let cool.
    60 grams whole milk, 30 grams granulated sugar, 57 grams unsalted butter
  • Make the tangzhong – Add 100 grams of whole milk to the same saucepan without washing, and sprinkle 20 grams of flour over it. Place over medium heat and stir constantly to incorporate the flour into the milk. Press out any lumps with a spatula and continue cooking until the mixture thickens into a paste. Transfer the tangzhong to a plate and spread into a thin layer to cool.
    20 grams all-purpose flour, 100 grams whole milk
  • “Autolyse” (7:30 pm) – Once the milk/butter mixture has cooled to between 80 – 90°F (27 – 32°C), whisk together flour and salt in a separate bowl. Add this to the milk mixture. Use a spatula to mix until all the liquid is absorbed. The mixture will look dry and clumpy, that’s okay. Cover and let rest for 15 – 20 minutes.
    260 grams all-purpose flour, 6 grams kosher salt
  • Knead the dough (8 pm) – Add the cooled tangzhong, egg and 100 grams of ripe starter to the “autolysed” dough. Knead with the dough hook on speed 2 for 20 minutes. The dough will still feel tacky but should mostly pull away from the sides of the bowl.
    1 large egg, 100 grams sourdough starter
  • Bulk fermentation (8:30 pm) – Oil your hands, a bowl scraper, and your clean countertop. Scrape the dough out and shape it into a ball on the oiled surface. Lightly oil the mixing bowl, then return the dough to the bowl. Cover and place in a warm spot. You will perform 2 – 3 sets of stretch and fold at 30-minute intervals. Set a timer for 30 minutes.
    Neutral oil for dough handling
  • Stretch and fold #1 (9 pm) – With oiled hands, lift the dough from the center. It will stretch as you lift it up and out of the bowl. If it’s too sticky, use your bowl scraper to help release it. Stretch the dough into a long strip and fold in thirds like you’re folding a letter. Turn it 90 degrees, stretch it out into a long strip again and fold in thirds. Place it seam-side down back into the mixing bowl, cover, and set the timer for another 30 minutes.
    Neutral oil for dough handling
  • Stretch and fold #2 (9:30 pm) – Repeat the same process. At minimum, complete 2 sets if short on time.
  • Stretch and fold #3 + cold fermentation (10 pm) – Repeat one final set. The dough should feel stronger and more elastic. Cover and refrigerate overnight.

Day 2

  • Finish bulk fermentation (9 am) – Remove the dough from the refrigerator. It likely hasn’t doubled yet. Let it come to room temperature and continue rising in a warm spot for about 2 hours.
  • Divide (11 am) – Using your bowl scraper, scrape the dough onto a lightly floured surface and divide into 3 portions, approximately 220 grams each. Roll each into a smooth ball. Cover and let rest for about 10-15 minutes.
  • Shape (11:15 am) – Take each dough ball, smooth side down, flatten with your hand or roll into a rectangle, fold into thirds like a letter. Flatten again and allow it to stretch lengthwise, but keep the width slightly narrower than your loaf pan. Roll up into a log and place into the loaf pan.
  • Proof (11:20 am) – Proof your dough in a warm spot for 6 – 8 hours. I typically use a 15-quart storage bin as my proofing box. You can also proof your dough in the oven with the light turned on and place a pan of hot water at the bottom of the oven to add humidity. The dough is ready when it is very puffy, has risen well above the rim of the loaf pan, and a gentle press leaves an indentation that slowly springs back (but not immediately).
  • Preheat the oven (7 pm) – Toward the end of proofing, preheat the oven to 400°F (205°C) for at least 30 minutes. If proofing in the oven, remove the dough before preheating.
  • Bake (7:30 pm) – Whisk together the egg and water to make the egg wash. Brush generously over the top and any exposed sides. Bake at 400°F (205°C) for 7 minutes, then reduce the temperature to 350°F (180°C) and bake for another 20 minutes. The top should be golden brown and the internal temperature should reach 190 – 200°F. Toward the end of the baking time, if your bread is getting too brown, you can tent it loosely with a piece of foil.
    1 large egg, 15 grams water
  • Cool – Let your bread cool in the pan on a wire rack until just warm to the touch before removing it from the pan. Cool completely before slicing.

Notes

  • I prefer using oil to prevent dough from sticking to my hand instead of extra flour to avoid adding too much flour to the dough risking a drier loaf.
  • On day 2, after fermentation, you shouldn’t need much flour or oil to handle this dough.
  • Rising time and proofing time are highly dependent on temperature. Use the time as a general gage but you should pay attention to visual cues to ensure you don’t under or over proof your bread.
  • The timeline is a suggestion, feel free to modify it to fit your schedule.

Nutrition

Calories: 156kcal | Carbohydrates: 23g | Protein: 4g | Fat: 5g | Saturated Fat: 3g | Polyunsaturated Fat: 0.4g | Monounsaturated Fat: 1g | Trans Fat: 0.2g | Cholesterol: 43mg | Sodium: 212mg | Potassium: 58mg | Fiber: 1g | Sugar: 3g | Vitamin A: 185IU | Calcium: 26mg | Iron: 1mg

Nutrition information is automatically calculated, so should only be used as an approximation.

So… was this bake worth the ferment?Let us know by rating this recipe.

Explore More

Leave a Reply

Your email address will not be published. Required fields are marked *

Recipe Rating




14 Comments

    1. Hi Esther, I can’t say I have. But I do keep my starter in the fridge for a week right after feeding and when I take it out, it will still rise beautifully so I’m going to venture to say you can definitely cold ferment longer than overnight. If you try it, be sure to let me know how it turns out.

    1. Hi Julia, yes, storage instructions are in the post under “Storage” section just before the recipe card.
      Room temperature: you can store milk bread at room temperature for a couple days. Only slice off whatever you’re planning to eat to keep the moisture within the loaf. Store the bread in a ziploc bag. Since this loaf is homemade with no preservatives, I tend to keep it refrigerated to prevent spoiling.
      Refrigerator: you can keep your milk bread in the fridge for a couple weeks. Again, only slice what you need and keep it in a ziploc bag. It does dry out a bit the longer you store it, but it’s easily revived in the toaster.
      Freezer: for the freezer, I recommend slicing and then freezing. This way you can defrost only what you need when you need. Your bread should last up to 3 months. To preserve the flavor, wrap the loaf in foil as well as plastic and then store in a freezer bag.

  1. 5 stars
    Ingenious recipe with super easy to follow instructions. I found the timeline particularly helpful to help me plan around my busy day. Loved how my loaf turned out, in spite of my poor shaping skills. This loaf is going fast, tastes perfectly tangy and sweet! Definitely keeping this in my rotation! Thank you for sharing this beauty!

      1. If my starter is ready around noon and I finish my stretch and folds around 2pm, can I just bulk ferment on counter and do the second proof/fermentation in the fridge (so switch which one is the cold proof)?

        1. Yup, I’ve done that and it works as well but when you take it out of the fridge in the morning you will likely still need to let it finish proofing before baking.

  2. Thank you for this recipe! I don’t have access to King Arthur all purpose flour; would it be okay if used a bread flour with 12.3% protein?

  3. 5 stars
    What’s the rationale for stretch and fold vs just kneading in the mixer until it passes the windowpane test? TIA

    1. Hey J, you can certainly just knead until it passes windowpane test, and just go straight to bulk fermentation ~2 hours at room temp and then fridge. But sometimes when the dough is more slack or stickier for whatever reason, I find that a few sets of stretch and fold help improve strength further. I like to just do 3 sets anyways, but I don’t see any issue if you skip them as long as your dough is good to go.

    1. Hi Jessica, I would probably mix with a spatula in a glass bowl until all the wet ingredients are incorporated enough that it forms a shaggy dough, then switch to kneading with your hand. If you have a silicone mat, I would knead on that cuz it’s very nonstick, helps to wear vinyl gloves so it doesn’t stick to your hands either. These should help you not have to use extra flour cuz adding more flour will dry out the dough. Ideally, you’ll want to knead until you can do a windowpane test, stretch the dough out really thin without it tearing. But 20 mins by hand can get tiring. As long as it forms a ball, you can let it rest and just do more stretches and folds if needed to build strength. Hope this helps, let me know if you have further questions!