There’s a seafood house in Sai Kung, on the eastern edge of Hong Kong, where you point at a fish in a tank and ten minutes later it lands on a long oval plate, the soy dressing still moving around the edges. I was nineteen the first time I ate there, visiting my mother’s cousin. I remember the sound more than the taste. The cook poured smoking peanut oil over the ginger and scallion at the table and the whole plate hissed for a full five seconds. The ginger smelled green and sharp, almost like cut grass burning.
That is the dish. Cantonese steamed fish, 清蒸鱼, is a home and banquet staple built on three things people get wrong: the fish is not fresh enough, the steaming is timed by weight instead of thickness, and the oil finish is poured too cool. Get those three right and you have one of the cleanest plates of food in any Chinese home kitchen.
| Yield | 2 servings as a main, 4 as part of a meal |
| Prep time | 15 minutes |
| Cook time | 10 minutes |
| Total time | 25 minutes |
| Difficulty | Intermediate |
Reading the fish at the counter
The dish lives or dies here. In Hong Kong you buy the fish swimming. At a Western supermarket you have to read it.
Three tests, in order. The eye should be clear and slightly domed, not sunken or cloudy. Lift the gill flap: bright red-pink means recent, brown means days old. Press the flesh near the dorsal fin and it should spring back within a second. If your thumbprint stays, walk away.
For whole fish, the Cantonese ideal is a 600–800 g live sea bass, grouper, or sand dab. From a Western counter, branzino is the closest match and usually sold whole at that weight. Black sea bass and red snapper work too. Tilapia is acceptable but earthier, and you’ll need to be more aggressive with the ginger to cover the mud note. I tested this last month with a 700 g branzino from my local Chinese grocer in Chengdu, and the gill test was the one that flagged a second fish on the same ice bed as not worth buying, brown under the flap, eye still bright. Trust the gill.
If you can only get fillets, use a thick-cut, skin-on piece of black cod, halibut, or sea bass, 200–250 g per person, at least 2.5 cm thick. Thin fillets overcook before the aromatics have a chance to do their job.
Scoring, salting, and the ginger bed
Rinse the whole fish under cold water and pat it bone-dry inside and out. Wet fish steams to a watery plate.
Score the thickest part of each side with two diagonal slashes about 1 cm deep, stopping at the bone. This is not decoration. It opens the flesh so heat reaches the spine at the same time the thinner belly cooks.
Salt the cavity lightly, about half a teaspoon of kosher salt rubbed inside, nothing on the skin. The skin needs to stay slick so the soy dressing pools and clings later.
Slice 30 g of ginger into coins. Cut 4 scallions into 8 cm lengths and bruise them with the flat of a knife. Lay half the ginger and all the scallion lengths across a heatproof plate in a loose lattice. Set the fish on top. The bed lifts the fish 1 cm off the plate so steam circulates underneath, and it perfumes the flesh as it cooks.
{{IMG:step-prep:a whole branzino scored with two diagonal slashes on each side, resting on a bed of ginger coins and bruised scallion lengths on a white oval platter, natural side-window light, shallow depth of field, rustic wooden surface}}
Why the timer runs on thickness, not weight
Here is the rule that separates a Cantonese kitchen from a guessing kitchen: 8 minutes per 2.5 cm (1 inch) of thickness at the thickest point, measured from spine to belly with the fish lying flat. A 3 cm fish steams 9–10 minutes. A 4 cm grouper steams 12–13. Weight tells you nothing. A long thin fish and a short fat fish of the same weight cook differently.
Instructions
-
Set up the steamer. Fill a wok or wide pot with 5 cm of water, set a steaming rack inside, and bring it to a hard rolling boil over high heat. The water must already be screaming before the fish goes in. A cold start steams the fish twice and the flesh turns chalky.

-
Lower the plated fish onto the rack, cover, and start a timer for the calculated time. Do not lift the lid mid-steam. Every peek drops the steamer 20F (10C) and adds a minute of dry cooking.
-
Make the see yau dressing while the fish cooks. In a small pan, warm 60 ml of light soy sauce, 30 ml of water or unsalted chicken stock, 1 teaspoon of rock sugar (or 1 teaspoon of regular sugar), 1 teaspoon of Shaoxing wine, and a pinch of white pepper. Heat just to dissolve the sugar, about 60 seconds at a low simmer. Do not boil. This is see yau, the steamed fish soy: lighter and sweeter than table soy, built to season without overwhelming.
-
Check doneness at the dorsal fin. At the timer, lift the lid and slide a chopstick into the slash at the thickest point. It should meet no resistance and the flesh along the spine should look just opaque, not glassy, not flaking. If it resists, give it another 60 seconds and check again.

-
Transfer and drain. Lift the fish on its plate to a tea towel. Tilt and pour off all the cloudy water that collected during steaming. That liquid is bitter and will muddy the dressing. Discard the cooked ginger and scallion under the fish; they have done their job.
-
Top with fresh aromatics. Pile 20 g of fine ginger julienne, the white and pale green of 3 scallions cut into 6 cm threads, and a small handful of cilantro across the fish. Pour the warm see yau around the fish, not over it, so the dressing pools without washing the aromatics off.
-
The sizzling oil finish. Heat 3 tablespoons of peanut or grapeseed oil in a small pan until it just begins to shimmer and a thread of smoke rises, around 200C (390F). Pour it in one steady stream directly over the ginger and scallion threads. They should hiss for 4–5 seconds and the kitchen should smell green and sharp. This step cooks the raw aromatics to the right side of done and emulsifies the soy dressing into something glossy.

Fixes for the four things that usually go wrong
- Muddy dressing after plating: you skipped step 5. Always drain the steaming liquid.
- Overcooked tail, undercooked back: prop the tail end up on a folded piece of foil so the thinner flesh sits higher above the steam. The thick shoulder cooks longer; the tail cooks less.
- Watery plate after pouring: the oil was not hot enough. The pour should hiss audibly across the room. If it only fizzles, the dressing will sit thin and the ginger will taste raw.
- No rock sugar on hand: a teaspoon of regular sugar works. Do not substitute dark soy. It will turn the dressing black and bitter.
- Fillets: reduce steam time to 6 minutes per 2.5 cm and skip the scoring. Lay the fillet skin-side up on the ginger bed.
What sits next to it on the table
A Cantonese home table sets steamed fish next to a bowl of properly cooked short-grain rice, a green vegetable stir-fried with garlic (gai lan or choy sum), and a clear soup in the same spirit as a Hanoi pho broth. Nothing else with soy. The fish is the seasoning for the rice.
One last thing the cooks at Sai Kung do that home kitchens skip. They pour the oil last, after the dressing, never before. Dressing first, aromatics on top, oil over the aromatics. Reverse that order and the ginger sits in cold soy and the whole plate goes flat.