This post may contain affiliate links. Please read our disclosure policy.
I absolutely love fresh cheese, and for years, I’ve been on a mission to master how to make mozzarella cheese perfectly at home.

If you’ve been searching for a homemade mozzarella recipe recently, you’ve probably seen the viral “2-ingredient” hacks claiming you can make perfect mozzarella using just milk and vinegar. I’ll be completely honest with you: I tested that viral vinegar method extensively. Out of six attempts, it failed five times. Instead of a beautiful, stretchy ball of mozzarella, I was left with a gooey, mascarpone-like blob and a lot of wasted milk.
If you’re tired of wasting good milk on scammy viral hacks, you are in the right place. After plenty of trial, error, and deep dives into the science of cheesemaking, I am sharing my ultimate, no-fail traditional method. By using a tiny bit of rennet and citric acid, you will get consistent, perfectly stretchy, and delicious homemade mozzarella every single time.
Once you get the hang of cheesemaking, you might also enjoy my easy homemade cream cheese, how to make cottage cheese, or how to make goat cheese.
Table of Contents
Why the “Vinegar Hack” Fails (And What Actually Works)
While white vinegar will curdle milk quickly, it doesn’t create the strong protein structure required for a good stretch. Using both rennet and citric acid ensures precise coagulation. This combination results in the ideal separation of curds and whey, which is absolutely essential for creating that iconic, stretchy mozzarella texture.
Mozzarella Success Checklist

- Use whole milk (not UHT/ultra-pasteurized)
- Use a thermometer (90°F set, 105–106°F cook)
- Stretch in water 170–180°F (76–82°C) (refresh hotter if needed)
- Stop stretching when glossy (overworking = tough)
“Thanks so much for sharing this recipe. I really appreciated the detailed steps as it was my first time making mozzerella. It turned out so well! …”
What you’ll need

The Ingredients
- Milk: Milk quality is everything! Use whole milk (pasteurized is fine), and avoid ultra-pasteurized/UHT milk – those proteins often won’t set or stretch properly. Non-homogenized milk can give a slightly nicer texture if you can find it, but regular supermarket homogenized whole milk also works (especially with calcium chloride). I don’t recommend semi-skimmed/low-fat milk.
- Calcium Chloride (Optional but recommended): Most supermarket milk is pasteurized and homogenized, which can weaken curd formation. Adding a little calcium chloride helps create a firmer, cleaner curd and often improves stretching—especially with store-bought milk.
- Citric Acid: This provides the acidity needed for a reliable set and helps the curds stretch properly in this same-day method.
- Rennet (Liquid or Tablet): Rennet is the setting enzyme that gives mozzarella its structure. You only need a tiny amount to set a full gallon of milk. (I test this method with liquid rennet for consistency; tablet strength can vary by brand.)
- Cheese Salt: Use a non-iodized salt such as cheese salt, kosher salt, or fine sea salt. Iodized table salt can taste harsher and isn’t typically recommended for cheesemaking.
- Water (not pictured): Use cool, non-chlorinated water to dilute the citric acid and rennet. You’ll also need hot water for stretching and cold water (ice bath) to set the final mozzarella.
The Equipment
- Instant-Read Thermometer: Cheesemaking is all about temperature—this makes the process far more reliable.
- Large Pot: A thick-bottomed pot (stainless steel or non-stick) helps prevent scorching and keeps temperatures steadier.
- Long Knife: For cutting the set curds into a grid.
- Slotted Spoon: For gently lifting and moving curds without breaking them.
- Colander (or Fine-Mesh Strainer): A regular colander works well for mozzarella curds. Fine mesh is optional.
- Heat-Safe Bowl: For the hot water stretching step, plus another bowl underneath for catching whey while draining.
- Heat-Resistant Gloves: Stretching involves very hot water—protect your hands.
See the printable recipe card below for the full ingredients list and quantities.
How to make mozzarella cheese
Prep the milk-setting ingredients: Dissolve citric acid in water in one bowl. Dissolve rennet in water in another bowl. (Optional: dissolve calcium chloride in water in a third bowl.)
1. Dissolve citric acid in water
2. Dissolve rennet in water
3. Dissolve calcium chloride in water (optional)Heat the milk: Add the citric acid mixture to the milk (and calcium chloride, if using). Warm gently until it reaches 90°F (32°C).
4. Heat milk with citric acid
5. Reach 90ºFAdd rennet and set the curd: Remove from heat. Stir in rennet with an up-and-down motion for 20–30 seconds (avoid swirling), then cover and rest until set and you get a clean break.
Cut the curds: Cut into a grid pattern, slicing all the way to the bottom.
6. Add rennet and rest
7. Cut the curdsHeat the curds: Warm slowly, gently lifting/stirring, until curds reach 105–106°F (40–41°C). Turn off heat and let curds settle for 5 minutes.
8. Heat the curds
9. Reach 105ºFDrain (don’t overdo it): Scoop curds into a colander and drain 2–3 minutes. Gently press together. (If curds seem very wet/mushy, you can squeeze a little more.)
10. Drain the curdsStretch in hot water: Heat water to 170–180°F (76–82°C). Submerge curds until soft and stretchy. If they won’t stretch, refresh with hotter water closer to 180°F/82°C.
Salt, stretch, and shape: Sprinkle with salt, then stretch/fold just a few times until glossy. Shape into a smooth ball, re-warming briefly if it stiffens.
11. Add hot water
13. Stretch the curds
12. Fold the curds
14. Shape into ballsSet the shape: Chill in cold water 5–10 minutes to set.
15. Chill in cold waterTips for success
- Use a thermometer. Mozzarella is temperature-sensitive—being even a little off can mean weak curds or curds that won’t stretch.
- Drain well (but don’t over-squeeze). Too much whey left inside can cause a soft, gooey center, but over-squeezing can make the cheese dry and tougher than it needs to be.
- If it won’t stretch, it usually isn’t hot enough. Curds only become elastic within a hot range—refresh with hotter water (about 170–180°F / 76–82°C) until the cheese turns pliable and glossy.
- Do not overwork the curds. Once it’s smooth and shiny, stop—over-stretching makes mozzarella dense and rubbery.
- Salt at the right moment. Salt incorporates best while the cheese is warm and soft, so adding it during the stretch gives you even seasoning without gritty spots.
FAQs and troubleshooting
Most often it’s the milk or the rennet (not you). Make sure you’re using whole milk that is not UHT/ultra-pasteurized. Also, check that your rennet is fresh and diluted in cool, non-chlorinated water. Tip: If the curd looks “almost there,” simply cover and rest 2–3 minutes longer before cutting.
Nearly always: it isn’t hot enough yet. Stretching works best when the curds are heated to around 160–180°F (71–82°C). If the curds cooled down, pop them back in the microwave for a few seconds or refresh with new hot water. Wait until the outer layer turns pliable and glossy, then fold and stretch gently.
You likely overworked it or stretched it too much . Stop stretching as soon as it turns smooth, glossy, and cohesive—usually only 2–4 folds. Over-kneading it will squeeze out too much moisture and leave you with a tough, rubbery ball.
Don’t throw it away! If it won’t stretch or turns too soft, treat it like a delicious soft cheese:
Stir it into hot pasta sauces.
Dollop it onto a pizza right after baking.
Layer it into a lasagna or baked ziti.
Mix it into scrambled eggs or spread it on toast.
Storage
Best on day one: Fresh mozzarella is at its best the same day.
Fridge: Store in an airtight container in whey or a lightly salted brine for 3 days.
Freezer (best for cooking): Freeze in a freezer-safe container for up to 6 months. Thaw overnight in the refrigerator.
After freezing: Previously frozen mozzarella is usually best for melting in cooked dishes.
More ways to use homemade mozzarella
Once your mozzarella is shaped and still beautifully fresh, use it right away while it is at its softest: slice it up for a simple Caprese salad with tomatoes, basil, and olive oil, or tear it over a quick pizza night (especially good with this quick pizza sauce recipe).
If you are craving comfort food, it also melts into creamy, stretchy pockets when layered into baked pasta – try it in a homemade lasagna recipe, or any oven-baked dish where you want that fresh, milky melt.

More homemade cheese recipes
If you made this recipe, please leave a rating and a quick comment. Your feedback supports the blog and helps other readers.

Homemade Mozzarella Cheese (The Foolproof Method)
Equipment
- Colander or a fine mesh strainer
Ingredients
- 1 gallon whole milk not ultra-pasteurized
- 1 teaspoon cheese salt (or non-iodized kosher salt)
- 1.5 teaspoons citric acid dissolved in 1 cup water
- 1/4 teaspoon liquid rennet (single strength), diluted in 1/4 cup cool water; OR 1/4 rennet tablet dissolved in 1/4 cup cool water
- 1/4 teaspoon calcium chloride (optional but recommended), dissolved in 1/4 cup cool water
Yield: 1 pound mozzarella (16 oz / 450 g)
Instructions
- Heat milk + citric acid: Pour the milk into a large pot. Stir in the dissolved citric acid (and calcium chloride if using). Warm gently over medium-low heat until it reaches 90°F (32°C).
- Add rennet + set: Remove from the heat. Stir in the diluted rennet using an up-and-down motion for 20–30 seconds (avoid swirling). Cover and rest for 5–8 minutes until the curds set and you get a clean break.
- Cut curds: Cut the curds into a grid pattern, slicing all the way down to the bottom of the pot. Rest 5 minutes.
- Heat curds: Warm slowly, gently lifting/stirring, until the curds reach 105–106°F (40–41°C). Turn off heat and let the curds settle 5 minutes.
- Drain: Scoop curds into a colander and drain for 2–3 minutes. Gently press together (don’t over-squeeze).
- Heat water: Heat fresh water to 170–180°F (76–82°C).
- Soften curds: Place curds in a heatproof bowl and pour hot water over them. Rest 30–45 seconds until pliable.
- Salt + stretch: Sprinkle with salt, then gently fold/stretch 2–4 times until glossy and cohesive. Re-warm briefly in hot water if it stiffens or tears.
- Shape + set: Shape into a smooth ball and place in cold water for 5–10 minutes to set.
Video
Notes
Drain well (don’t over-squeeze): Too much whey can cause a soft center, but squeezing too hard can make mozzarella dry.
If it won’t stretch, it isn’t hot enough: Refresh with hotter water within 170–180°F / 76–82°C.
Do not overwork: Stretch only until glossy and cohesive—overworking makes it tough. Check the blog post for more tips and troubleshooting.
Nutrition
Nutrition information is automatically calculated, so should only be used as an approximation.













Just tried this and everything went well up to the point of stretching the curds. I poured 180F water over the curds and tried to keep the temp up but it seemed to hang out at about 150F. The curds never got stretchy, they just started to crumble even after trying to heat the curds in the water in the microwave up to 170F. I ended up with a delicious smelling batch of crumbled and gummy curds (I ate them anyway on pizza, delicious but chewy). I used A2 full fat grass fed vat pastuerized non-homogenized cows milk. I’m going to try again w/ raw cows milk. Just wondering if you have any thoughts as to why the curds didn’t melt?
Hi Paul! Thanks so much for the detailed notes, that really helps diagnose things. When curds crumble instead of stretching, it’s almost always a pH issue (curds a touch too acidic or not acidic enough) rather than the milk fat. Your A2 non-homogenized milk should actually be great. The most common culprits are: the curd needing to rest/knit a bit longer before stretching, or the water/curd not quite reaching the right stretch temperature throughout (aim to keep the curd itself around 160-170F). It’s also worth double-checking your citric acid amount and that your rennet is active. Raw milk is a great next test! Let me know how round two goes 😊
I have never made cheese in my life, but I want to start making my own to cut on costs and learn a new skill.
I bought tablet rennet without doing any research, because it seems like no one wants to use it. Still, I did some research and decided to jump the gun and try this recipe. I was so pleased, it came together beautifully even though it was my first shot!
I didn’t use the chloride and it is a lot harder to stretch. I think the water almost needs to be hotter, but I didn’t have gloves so I was dealing with the burn lol. I also forgot the salt so I added the salt into the whey to store. That’s how it’s sold in Italy, so it should last for a little while. I think I also maybe worked it a bit too much so it’s not as soft, but it still worked!
Still, I cannot be more pleased and I’m so excited to try again.
Hi Cammie! What an amazing first cheese-making attempt, and tablet rennet works just fine, so no worries there! 😊 You’re spot on: a little more heat really helps with stretching, and the calcium chloride does improve the curd, so it’s worth adding next time. Salting into the whey for storage is a great traditional trick too. So thrilled it came together for you, enjoy your next batch!
I bought all the ingredients, did everything to a “T” and have the grainest cheese I’ve ever seen. It looked okay until the last step… and it was never “stretchy”.
Hi Mical! I’m so sorry it turned out grainy and wouldn’t stretch, how frustrating after doing everything carefully. The most common culprit is actually the milk: if it’s ultra-pasteurized or UHT, the proteins often won’t develop into a stretchy structure no matter how precise you are, so it’s worth double-checking the carton (whole milk that is NOT ultra-pasteurized works best). The other big one is temperature: curds only turn elastic when hot enough, so if the stretching water wasn’t in the 170 to 180°F range, they stay grainy and tear. Try refreshing with hotter water (closer to 180°F) until the curds turn glossy and pliable before folding. And the good news, grainy curds aren’t wasted, they’re delicious stirred into pasta, eggs, or onto pizza. I hope the next batch stretches beautifully! 😊
What is the point exactly of heating the curds back up to 105 degrees after cutting them? By that temp they often begin to melt back together, making the straining process more difficult. Also, they get heated back up when immersed in the hot water.
Hi Brandon! Heating the cut curds to around 105 to 106°F before draining helps expel more whey and encourages the curds to firm up and knit together, which sets you up for a better stretch later. You’re right that they’ll warm again in the hot stretching water, but that initial gentle heat-and-settle step (letting the curds settle for 5 minutes) is more about expelling whey and consolidating than melting. If yours are melting back together too much, you may be heating a touch too fast or too high, so warm slowly and stir gently. Hope that helps! 😊
Why isn’t the curds setting afyer it heats to 90 i add the renitt and sit for 8 minutes. Off heat and it’s still watery not setting to cut
I’m sorry to hear it’s not working for you, John. If the curds aren’t setting, it’s often due to the milk type or inactive rennet. Please make sure you’re using whole milk that is not UHT/ultra-pasteurized. Also, check that your rennet is fresh and diluted in cool, non-chlorinated water.
I had the same issues as John I knew my rennet was good, because it was brand new, unopened What I ended up doing was reheating the curdled liquid to 100 degrees and adding about another 1/4 tsp of rennet diluted in water. The second time I stirred the rennet well, which is what I think I did wrong the first time, not stirring it in enough. At any rate after doing this the curds did what they were supposed to do and the cheese was excellent
Hi Beth! Thank you so much for sharing this, it’s really helpful for other readers who run into the same thing. You’re spot on: stirring the rennet in thoroughly (with that gentle up-and-down motion) makes a big difference, and gently reheating with a touch more diluted rennet is a great rescue. So glad your cheese turned out excellent in the end! 😊