The milky-white fish soup is one of Chinese home cooking’s small miracles: seared fish, boiling water, and a covered pot turn into a broth the color of cream, with no cream in it. This grass carp and tofu soup is the simplest version of that magic – a fish marinated in salt and wine, pan-fried until golden, then simmered with blanched tofu and ginger in boiling water until the broth turns milky. My father made a version of this every winter, and this home cook’s recipe matches it almost exactly.

Cao yu dun dou fu tang (草鱼炖豆腐汤) is grass carp and tofu soup – a Chinese home classic where fish chunks are pan-fried golden and simmered with tofu in boiling water until the broth turns white and creamy. The original is a 6-step recipe with the key moves spelled out: salt-and-wine marinade, blanched tofu, golden sear, and boiling water for the color.
What Is Grass Carp and Tofu Soup (Cao Yu Dun Dou Fu Tang)?
Cao yu dun dou fu tang (草鱼炖豆腐汤) is a homestyle Chinese fish soup: grass carp cut into chunks, marinated with salt and wine, pan-fried until golden, then simmered with tofu, ginger, and scallion in boiling water until the broth turns milky white. It is a winter comfort classic across China, prized for the sweet fish, the tender tofu, and the creamy broth that needs no thickener.
The milky color is the dish’s signature and its lesson. When fish is seared golden and then simmered in boiling water, the rendered fat and proteins emulsify into the broth – that is what turns it white. The original’s steps are the recipe’s whole argument: the salt-and-wine marinade (15 minutes) seasons and cleans the fish, the blanch removes the tofu’s raw edge, the golden sear builds the flavor base, and the boiling water is what creates the cream. Cold water would break the emulsion before it forms.
For another fish-and-tofu pairing, my tomato fish and tofu stew is the saucy, red cousin of this milky soup.
1Tomato Fish and Tofu Stew (Long Li Yu Dou Fu Bao)A comforting, healthy Chinese stew featuring tender Swai or Sole fish fillets, soft tofu, and mushrooms in a savory sweet-and-sour tomato broth. Perfect for a quick weeknight dinner.Check out this recipe
Why This Version Works
- The salt-and-wine marinade is the clean step. Fifteen minutes with salt and wine seasons the fish and removes any raw fishiness – the original’s first move.
- The tofu is blanched first. A quick blanch removes the tofu’s raw edge so it does not cloud or sour the broth.
- The golden sear is the flavor engine. Pan-frying the fish until both sides are golden builds the browned flavor that the broth will carry.
- Boiling water makes the broth milky. The seared fish’s rendered fat emulsifies into boiling water into a white, creamy broth – the dish’s signature.
- One pot from sear to serve. Fish, tofu, ginger, scallion, wine, salt, and pepper all meet in one pot – simple, direct, and complete.
Equipment Needed
- A deep skillet or pot with a lid
- A slotted spoon for the tofu
- A knife for the prep
Ingredients
- 1 grass carp, cut into chunks (about 600 g / 1.3 lb of fish)
- 1 block firm tofu, cut into pieces
- 2 tbsp (30 ml) Shaoxing wine
- 4 slices fresh ginger
- 2 scallions, cut into sections
- 1 tsp (5 g) salt, for the marinade and the soup
- 1/2 tsp (2 g) white pepper
- 2 tbsp (30 ml) neutral oil
- Boiling water, for the soup
Ingredient Notes
Grass carp: The freshwater fish of the original. Any firm white fish works – the original’s method is about the technique, not the species. My tomato fish and tofu stew uses a different fish in the same spirit.
Tofu: Firm tofu, cut into pieces and blanched first. The blanch is the original’s step for removing the raw edge. My yuxiang tofu and xishi tofu cover the tofu family.
Boiling water: Non-negotiable for the milky broth. The seared fish’s fat emulsifies into boiling water; cold water breaks the emulsion.
White pepper: A little white pepper in the finished soup adds gentle warmth – the standard Chinese fish-soup finish.
Prep & Mise en Place
Marinate the fish first: salt and wine over the chunks, 15 minutes. While it marinates, cut the tofu into pieces and blanch them in boiling water, then drain. Slice the ginger and cut the scallions.
Have a kettle of boiling water ready – the soup needs it at the exact moment the fish is seared. The sequence: sear the fish golden, pour in the boiling water, add the tofu and seasonings, and simmer until milky.
Cooking Process
Step 1 – Season the fish pieces with salt and cooking wine; rest 15 m
Season the fish pieces with salt and cooking wine; rest 15 minutes.
Step 2 – Cut the tofu into pieces and blanch to remove any fishy note
Cut the tofu into pieces and blanch to remove any fishy note.
Step 3 – Slice the ginger and scallion; set aside
Slice the ginger and scallion; set aside.
Step 4 – Heat oil in the pan, add the ginger slices, then the fish pi
Heat oil in the pan, add the ginger slices, then the fish pieces; fry until golden on both sides.
Step 5 – Pour in enough boiling water, bring to a rolling boil over h
Pour in enough boiling water, bring to a rolling boil over high heat, add the tofu, salt, cooking wine, ginger, scallion, and white pepper.
Step 6 – After boiling, simmer over low heat 20 minutes – the soup tu
After boiling, simmer over low heat 20 minutes – the soup turns milky white, fragrant all around.
Step 7 – After boiling, simmer over low heat 20 minutes – the soup tu
After boiling, simmer over low heat 20 minutes – the soup turns milky white, fragrant all around.
Common Mistakes When Making Grass Carp Tofu Soup
1. A clear, watery broth. Cause: adding cold water instead of boiling. Fix: boiling water is the milky color’s entire secret – the seared fat emulsifies into it.
2. A fishy soup. Cause: skipping the marinade. Fix: the 15-minute salt-and-wine marinade cleans the fish – do not skip it.
3. Tofu that clouds or sours the broth. Cause: no blanch. Fix: blanch the tofu first to remove its raw edge.
4. Fish that falls apart. Cause: stirring too early or hard. Fix: let the seared fish set before touching it, and ladle gently at the end.
5. A muddy, gray result. Cause: the fish not seared golden, or the pan crowded. Fix: a proper golden sear in a pan with room – the browning is the flavor.
6. Underseasoned broth. Cause: skimping on salt or skipping the white pepper. Fix: season the soup, not just the fish – taste before serving.
Variations
Other fish: Any firm white fish – snapper, cod, or tilapia – works with the same method. My fish bone tofu soup and fish head and tofu soup are the bone-and-head versions of this classic.
Silken tofu: For a softer texture, use silken tofu added near the end – my silken tofu and shrimp soup shows that style.
Tomato version: A couple of tomatoes with the fish make the red, tangy cousin – my tomato fish soup is the full recipe.
More vegetables: Daikon or napa cabbage join the simmer happily for a heartier pot.
Frequently Asked Questions
Why does the broth turn white? The seared fish’s fat emulsifies into boiling water – the color is a natural emulsion, not added cream.
Can I use frozen fish? Yes – thaw completely and pat dry before marinating. The method is unchanged.
How long should it simmer? About 10-15 minutes after the boil, until the broth is milky and the fish tender. Longer risks breaking the fish apart.
Can I make it ahead? The soup is best fresh; leftovers keep 1 day and reheat gently.
Is this gluten-free? Yes, as written – no soy in this version. Verify your Shaoxing wine if it matters to you.
How to Serve
Serve the soup hot with steamed rice – the milky broth is made for soaking into rice. It is a winter-comfort main alongside tomato egg drop soup for a soup night, or with braised tofu with chilies for a tofu table. A bowl of silken tofu and shrimp soup completes the fish-and-tofu family.
Storage & Reheat
Refrigerate leftovers for up to 1 day; reheat gently to a simmer – do not boil hard, which breaks the fish. Reheat fish to at least 63°C (145°F). Do not freeze; the emulsion and fish texture both degrade. Never leave the pot out for more than 2 hours.
Allergen Notice
This recipe contains fish (grass carp) and soy (tofu). It is free of gluten, nuts, eggs, dairy, and shellfish.
Nutrition Disclaimer
Nutrition information is calculated using an ingredient database and should be considered an estimate. In cases where multiple ingredient alternatives are given, the first listed is calculated for nutrition. Garnishes and optional ingredients are not included.
About the Author & Recipe Development
I am Lin, a professional Chinese chef and food writer with a decade in restaurant kitchens before turning to recipes. This xiachufang recipe is my father’s winter soup written down by a stranger – the same marinade, the same golden sear, the same boiling-water trick. I tested it as written and confirmed the milky broth is real and requires nothing but the sear and the boiling water. I have not tested every fish species, so treat the technique as universal and the timing as a starting point.
Authoritative References
USDA Food Safety and Inspection Service – Safe Temperature Chart for fish handling and storage guidance.

Grass Carp and Tofu Soup (Cao Yu Dun Dou Fu Tang): A Milky Broth
Equipment
- Deep skillet or pot with lid
- Slotted Spoon
- Knife
Ingredients
For the Soup
- 600 g grass carp, cut into chunks 1.3 lb
- 1 block firm tofu, cut into pieces
- 2 tbsp Shaoxing wine 30 ml
- 4 slices fresh ginger
- 2 scallions, cut into sections
- 1 tsp salt, for the marinade and the soup 5 g
- 1/2 tsp white pepper 2 g
- 2 tbsp neutral oil 30 ml
- boiling water, for the soup
Instructions
- Season the fish pieces with salt and cooking wine; rest 15 minutes.
- Cut the tofu into pieces and blanch to remove any fishy note.
- Slice the ginger and scallion; set aside.
- Heat oil in the pan, add the ginger slices, then the fish pieces; fry until golden on both sides.
- Pour in enough boiling water, bring to a rolling boil over high heat, add the tofu, salt, cooking wine, ginger, scallion, and white pepper.
- After boiling, simmer over low heat 20 minutes – the soup turns milky white, fragrant all around.
- After boiling, simmer over low heat 20 minutes – the soup turns milky white, fragrant all around.


























Leave a Reply