Growing up in China, this soup was the ultimate definition of “tenderness.” We often describe it as tasting the “final gentleness of the fish.” It is famous not for a complex list of spices, but for its magical, milky-white broth that looks like cream but contains absolutely no dairy. It is savory, deeply umami-rich, and incredibly comforting.

In traditional Chinese culture, and in my own family, this soup is revered for its nutritional value. It is the go-to dish for recovery and is famously served to new mothers to support health. But beyond its functional benefits, it is simply delicious—a perfect harmony between the sweet, fresh fish and the soft, silky tofu.
What is Crucian Carp Tofu Soup?
Crucian Carp Tofu Soup (Jiyu Doufu Tang) is a classic Chinese home-style dish. The star is the Crucian Carp (鲫鱼), a freshwater fish known for its sweet, tender meat, paired with soft tofu and aromatic ginger and scallions.
The hallmark of a successful Jiyu Doufu Tang is the milky white broth (奶汤, Nai Tang). This isn’t achieved by adding milk or cream. Instead, it is a culinary chemical reaction—an emulsion created by frying the fish first and then boiling it vigorously with hot water, causing the proteins and fats to suspend in the liquid.
About the Author & Recipe Development
As a professional chef running a restaurant in China, I have made this soup hundreds of times. In my test kitchen, I’ve experimented with cold water versus boiling water, different frying times, and various tofu types. The recipe below is the result of those tests—it is the most reliable method to ensure your soup turns white every single time and has zero fishy odor.
Why This Recipe Works
- The “Milky” Science: By frying the fish first and adding boiling water, we create a rapid emulsion of the fish oils and gelatin, turning the soup opaque and creamy white instantly.
- Ginger Rub Technique: Using a slice of ginger to rub the pan before adding oil creates a protective layer (almost like a non-stick coating) that prevents the delicate fish skin from tearing.
- Flavor Balance: The combination of frying the aromatics and the fish creates a Maillard reaction that adds depth, ensuring the soup is savory, not bland.
Ingredients for Crucian Carp Tofu Soup
Here is what you will need. The list is short, so ingredient quality matters.
- Crucian Carp (1 whole, about 1 lb / 450-500g): This is the traditional choice.
- Note: Crucian carp has many small intermuscular bones. If you are feeding young children or are uncomfortable with bones, you can substitute with Whole Tilapia or Sea Bass, though the flavor will be slightly less sweet.
- Tofu (1 block, approx. 14 oz / 400g): I recommend Soft Tofu or Silken Tofu for this soup. It should be tender enough to wobble but hold its shape.
- Reference: If you are unsure about which tofu to buy, check out my guide on Types of Tofu to spot the difference.
- Ginger (1 small chunk): Sliced. Essential for neutralizing fishiness.
- Scallions (1 small bunch): Divided. Keep 2-3 stalks whole (tied in a knot) for stewing, and chop the rest for garnish.
- Boiling Water: Critical for the soup color.
- Oil & Salt: Neutral oil (like canola or vegetable) for frying and salt to taste.
What You Will Need (Tools & Equipment)
- Wok or Deep Frying Pan: A carbon steel wok is traditional, but a good non-stick pan works if you are worried about the skin sticking.
- Kitchen Paper Towels: Essential for drying the fish.
- Kettle: To boil water before you start cooking.
Recipe Notes Before We Begin
- Safety Warning: Crucian carp is a bony fish. Please eat with care. Do not swallow large mouthfuls without checking for bones.
- The Black Film: Inside the fish’s belly, there is often a black membrane. You must scrub this off completely. It is a major source of fishy odor and bitterness.
- Tofu Choice: While I love firm tofu in dishes like Home-Style Tofu, for this soup, soft tofu absorbs the broth better.
How to Make Milky Crucian Carp Tofu Soup
Step 1: Prep the Fish and Ingredients
Ask your fishmonger to scale and gut the fish. When you get home, wash it thoroughly. Crucial Step: Check the belly cavity and scrape away the black film lining the stomach walls. Rinse until clean.
Pat the fish completely dry with paper towels—inside and out.
- Why? Moisture causes hot oil to splatter and lowers the pan temperature, making the skin stick.
Cut the tofu into 1-inch cubes. Slice the ginger. Tie half the scallions into a knot and chop the rest for garnish.

Step 2: The Ginger Rub & Frying
Heat your wok or pan over medium-high heat. Before adding oil, take a slice of ginger and rub it vigorously all over the bottom of the hot pan.
- Why? The ginger juice creates a temporary non-stick layer.
Add 2-3 tablespoons of oil. When the oil is shimmering hot, gently slide the fish in. Do not move it. Let it fry for about 3-4 minutes until the bottom is golden brown and the skin releases naturally from the pan. Flip carefully and fry the other side until golden.
- Chef’s Tip: Don’t rush this. A good sear creates flavor and helps the soup turn white later.
Drop in the remaining ginger slices and fry briefly in the oil until fragrant.

Step 3: The “Milky” Transformation
Turn the heat up to high. Pour in a kettle of boiling water (enough to cover the fish by an inch).
- Reaction: You will see the water turn white almost immediately. The violent boiling emulsifies the fat droplets into the water. Drop in the scallion knot.

Step 4: High Heat Boil
Cover the pot. Boil on high heat for 5 minutes. Then, turn the heat down to medium but keep it at a steady simmer (not a weak bubble) for another 10 minutes.
- Visual Cue: The soup should be creamy and opaque white now.

Step 5: Add Tofu and Simmer
Gently slide the tofu cubes into the soup. Turn the heat to medium-low and simmer for 10 minutes.
- Why? This allows the tofu to heat through and absorb the savory fish broth. It reminds me of the texture in my Tofu Mushroom Soup with Egg.

Step 6: Season and Serve
About 3 minutes before turning off the heat, add salt to taste. (I usually start with 1 teaspoon and adjust).
- Note: Adding salt too early can cause the proteins in the fish to tighten up, making the meat tough.
Remove the scallion knot and ginger slices (optional). Turn off the heat. Ladle into bowls and sprinkle with the fresh chopped scallions.

Tips to Succeed
- Water Temperature: Never add cold water to the hot fried fish. It will “shock” the protein, making the meat tough, and the soup will likely stay clear rather than turning milky white.
- Don’t Over-flip: The fish is delicate. Fry one side completely before flipping. Constant flipping breaks the skin.
- Sufficient Oil: You need a little more oil than a standard stir-fry. The oil is what emulsifies to make the white color.
Common Mistakes When Making Fish Soup
- “Why is my soup clear and not white?”
- Cause: You likely used cold water, didn’t fry the fish long enough, or simmered it on too low heat initially.
- Fix: Next time, ensure the water is boiling and maintain a high rolling boil for the first 5-8 minutes to force the emulsion.
- “Why does the soup taste fishy?”
- Cause: The black membrane in the belly wasn’t removed, or the ginger was omitted.
- Fix: Scrub the belly cavity thoroughly. If you are very sensitive to fish smells, you can also add a tablespoon of Shaoxing wine during the boiling stage.
- “My tofu fell apart.”
- Cause: You stirred too vigorously.
- Fix: Once the tofu is in, use a ladle to gently push the liquid, don’t stir rapidly. If you struggle with soft tofu, try a firmer variety or check out my recipe for Homemade Tofu & Silken Tofu Pudding to understand textures better.
Serving Suggestions
This soup is mild and comforting, making it a perfect center for a meal with stronger flavors.
- Rice: Serve with steamed jasmine rice.
- Vegetables: A crunchy side like Steamed Tofu with Egg and Shrimp (for a protein-heavy meal) or a simple garlic bok choy works well.
- Cold Dish: A spicy cold dish like Silken Tofu with Sichuan Pepper Oil provides a nice contrast to the mild soup.
Food Safety and Preparation
- Bone Safety: As mentioned, Crucian carp is bony. I recommend using chopsticks to gently pick the meat from the bones.
- Fish Freshness: Look for clear eyes and red gills. Fresh fish is non-negotiable for this soup as there are minimal seasonings to hide spoilage.
- Allergens: Contains Fish and Soy (Tofu).
Authoritative References
- FDA Advice about Eating Fish: For guidelines on selecting safe fish and understanding mercury levels, refer to the FDA’s Advice about Eating Fish.
- Dietary Guidelines: For general information on the benefits of seafood in a balanced diet, see the USDA Dietary Guidelines for Americans.

Milky Crucian Carp Tofu Soup (Jiyu Doufu Tang 鲫鱼豆腐汤)
Ingredients
Equipment
Method
- Clean the fish thoroughly. Be sure to scrape off the black film inside the belly cavity to remove fishiness. Rinse and pat the fish completely dry with paper towels.
- Cut the tofu into 1-inch cubes. Slice the ginger. Tie the white parts of the scallions into a knot and chop the green parts for garnish.
- Heat a wok or frying pan over medium-high heat. Rub a slice of ginger over the surface of the pan (to prevent sticking), then add the oil.
- When the oil is hot, gently add the fish. Fry undisturbed for 3-4 minutes until the skin is golden and releases naturally. Flip carefully and fry the other side until golden.
- Add the remaining ginger slices. Turn heat to high and immediately pour in the boiling water. The soup should turn white quickly. Add the scallion knot.
- Cover and boil on high heat for 5 minutes. Reduce heat to medium and simmer for another 10 minutes to develop the milky broth.
- Gently slide the tofu cubes into the soup. Reduce heat to medium-low and simmer for 10 minutes.
- Add salt to taste about 3 minutes before the end of cooking. Remove the scallion knot. Garnish with chopped scallions and serve hot.
Notes
Tips to Succeed:
- Water Temp: You must use boiling water to achieve the milky white color.
- Fish Prep: Removing the black membrane in the belly is crucial to avoid a bitter taste.
- Safety: This fish contains small bones. Eat with caution.











