Cantonese Steamed Whole Fish (清蒸鱼) — Ginger-Scallion Soy Celebration Fish
A classic Cantonese whole fish steamed just until silky, then finished with ginger, scallions, hot oil, and light soy. It is prized at family banquets and Lunar New Year meals because whole fish symbolizes abundance.

Printable Recipe Card
Servings: 4 · Total: 32 min · Difficulty: medium
Ingredients (quick list)
- 1 whole fresh whole sea bass, snapper, or branzino (700-800 g, scaled, gutted, gills removed)
- 0.5 tsp fine sea salt
- 0.25 tsp ground white pepper
- 3 inch fresh ginger (peeled; half sliced thinly, half cut into fine julienne)
- 6 scallions (2 cut into 5 cm lengths, 4 finely shredded)
- 6 sprig cilantro (tender leaves and stems)
- 45 ml light soy sauce
- 30 ml water
- 4 g granulated sugar
- 5 ml toasted sesame oil
- 45 ml neutral oil (peanut, canola, or grapeseed oil)
Steps (summary)
- Rinse the fish under cold running water and dry it very thoroughly inside and out with paper towels. Make 3 shallow diagonal cu…
- Set a heatproof oval plate inside a wok or large steamer and check that the lid closes fully before heating. Scatter the sliced…
- Bring 5 cm of water in the wok or steamer to a vigorous boil over high heat before adding the plate with the fish. Cover tightl…
- While the fish steams, combine the light soy sauce, water, sugar, and sesame oil in a small saucepan. Warm the mixture over low…
- Carefully lift the plate from the steamer and pour away the cloudy steaming liquid, because it can taste fishy and dilute the c…
- Scatter the julienned ginger, shredded scallions, and cilantro over the hot fish in a loose pile. Heat the neutral oil in a sma…
+ 1 more steps in the full instructions section below.
Cultural Background
In Cantonese cooking, steaming highlights the freshness of seafood and the skill of precise timing. Serving the fish whole is associated with completeness, prosperity, and abundance, especially at Lunar New Year banquets.
Equipment
💡 Tips
- Choose a live-tank or very fresh fish with clear eyes, bright gills, and a clean sea smell; this simple dish depends on freshness.
- Do not open the steamer repeatedly, because lost steam can make the fish cook unevenly and toughen the outer flesh.
- Pouring away the steaming juices before adding the final sauce is a key Cantonese restaurant technique for a clean, bright flavor.
⚠️ Common Mistakes
❌ Using a fish that is too large for the steamer
✅ Fix: Choose a 700-800 g fish that fits flat on the plate with the lid fully closed, or use a larger fish kettle-style steamer.
❌ Serving the fish with the cloudy steaming liquid
✅ Fix: Pour off the liquid after steaming and replace it with a fresh hot soy mixture for a cleaner Cantonese flavor.
❌ Heating the finishing oil until it smokes heavily
✅ Fix: Heat the oil to about 190°C so it sizzles the aromatics without burning them or making the dish taste bitter.
🧊 How to Store
Whole steamed fish is best eaten immediately. Refrigerate leftovers in an airtight container for up to 2 days, then reheat gently with 15 ml water in a covered pan over low heat to avoid drying the flesh.
📅 Make Ahead
The fish can be cleaned and dried up to 6 hours ahead, then kept covered in the refrigerator. Shred the scallions and ginger up to 2 hours ahead and hold them in cold water, then drain well before serving.
🍽️ Pairs Well With
- Steamed jasmine rice
- stir-fried choy sum
- garlic bok choy
- simple egg drop soup
- Chinese pickled cucumbers.
Regional Variations
- Hong Kong restaurant versions often use a prepared sweetened seafood soy sauce and a dramatic pour of very hot oil at the table.
- Teochew-style steamed fish may include salted plums, preserved vegetables, tomatoes, and ginger for a sharper, brinier profile.
- Home-style Cantonese versions may add a small amount of fermented black beans or omit cilantro depending on family preference.
Ingredients
- 1 wholefresh whole sea bass, snapper, or branzino (700-800 g, scaled, gutted, gills removed)
- 0.5 tspfine sea salt
- 0.25 tspground white pepper
- 3 inchfresh ginger (peeled; half sliced thinly, half cut into fine julienne)
- 6scallions (2 cut into 5 cm lengths, 4 finely shredded)
- 6 sprigcilantro (tender leaves and stems)
- 45 mllight soy sauce
- 30 mlwater
- 4 ggranulated sugar
- 5 mltoasted sesame oil
- 45 mlneutral oil (peanut, canola, or grapeseed oil)
🔄 Substitutions
- whole sea bass, snapper, or branzino→ whole trout
- light soy sauce→ gluten-free tamari
- neutral oil→ peanut oil
Instructions
- 1
Rinse the fish under cold running water and dry it very thoroughly inside and out with paper towels. Make 3 shallow diagonal cuts on each side of the fish, then rub the salt and white pepper evenly over the skin, into the cuts, and inside the cavity.
- 2
Set a heatproof oval plate inside a wok or large steamer and check that the lid closes fully before heating. Scatter the sliced ginger and scallion lengths on the plate and inside the fish cavity, then lay the fish on top so steam can circulate underneath.
- 3
Bring 5 cm of water in the wok or steamer to a vigorous boil over high heat before adding the plate with the fish. Cover tightly and steam for 8-10 minutes, until the thickest part of the fish is opaque, the flesh flakes from the bone, and an instant-read thermometer registers about 63°C.
- 4
While the fish steams, combine the light soy sauce, water, sugar, and sesame oil in a small saucepan. Warm the mixture over low heat for 1-2 minutes, stirring until the sugar dissolves, then keep it hot but do not boil it aggressively.
- 5
Carefully lift the plate from the steamer and pour away the cloudy steaming liquid, because it can taste fishy and dilute the clean sauce. Remove and discard the cooked ginger and scallion pieces, keeping the fish intact on the platter.
- 6
Scatter the julienned ginger, shredded scallions, and cilantro over the hot fish in a loose pile. Heat the neutral oil in a small saucepan to about 190°C, then pour it evenly over the aromatics so they sizzle and release their fragrance.
- 7
Pour the hot soy mixture around the fish rather than directly over the crisped aromatics, allowing the sauce to pool on the platter. Serve immediately, spooning the soy-oil sauce over portions of fish at the table while the flesh is still delicate and steaming.
🪪 Recipe Passport
Cultural Background
In Cantonese cooking, steaming highlights the freshness of seafood and the skill of precise timing. Serving the fish whole is associated with completeness, prosperity, and abundance, especially at Lunar New Year banquets.
Regional Variations
Researched from multiple sources and validated by the Zaffaron editorial team. Every recipe is tested for accuracy, measurements, and cultural authenticity.
📚 Sources & Cultural References
- Eileen Yin-Fei Lo — Mastering the Art of Chinese Cooking — (2009)
- Grace Young — The Wisdom of the Chinese Kitchen — (1999)
Sources cited by the Zaffaron editorial team during recipe research. Cultural and culinary references supporting authenticity claims.
Nutrition per serving
Pairs well with
If you enjoyed this recipe, here are a few related Zaffaron recipes to try next.
Does your family make this differently?
Every family has their own version. Maybe your grandmother adds a secret ingredient, or your aunt has a completely different technique. Preserve your family's version — with their name on it, forever.
You Might Also Like

Peking Duck (北京烤鸭) — Crisp-Skinned Beijing Roast Duck
Chinese · Main Courses · 180 min

Buddha Jumps Over the Wall (佛跳墙) — Fujian Banquet Treasure Soup
Chinese · Soups · 540 min

Crossing-the-Bridge Rice Noodles (过桥米线) — Yunnan Hot Broth Noodle Soup
Chinese · Soups · 195 min

Ploughman's Lunch (Ploughman's Lunch) — British Pub Cheese Platter
British · Main Courses · 30 min

Cincinnati Chili (Cincinnati Chili) — Skyline-Style Spiced Chili over Spaghetti
American · Main Courses · 140 min

Hanoi Turmeric Fish with Dill (Chả Cá Lã Vọng) — Sizzling Fish with Rice Noodles
Vietnamese · Main Courses · 47 min

Japanese Oyakodon (親子丼) — Chicken and Egg Rice Bowl
Japanese · Rice Dishes · 29 min

Biangbiang Noodles (油泼扯面) — Xi'an Hand-Pulled Belt Noodles
Chinese · Main Courses · 65 min
Reviews
Cooked this recipe?
Tap the stars to rate it — that's all it takes. A few words are welcome but optional.
No ratings yet. Cooked this one? Be the first to rate it — it takes one tap.