This is the first recipe I ever learned to make, twenty five years ago. Cantonese steamed fish is one of those dishes that looks effortless and tastes like someone poured years of cooking knowledge into a single plate — because in a way, that’s exactly what it is. A whole fish, seasoned simply with salt and Shaoxing wine, stuffed with ginger, steamed over high heat for eight to ten minutes, and finished with a double pour of hot oil that sizzles dramatically over a mountain of fresh scallion strings and a savory soy sauce drizzle. It is clean, fragrant, deeply satisfying, and one of the most iconic dishes in all of Cantonese cooking.
Why You’ll Love This Recipe
The Three-Score Technique Making three deep diagonal cuts on each side of the fish before steaming is the step that ensures even cooking all the way to the bone. Without the cuts, the thick flesh near the spine takes significantly longer to cook through than the thinner edges, and by the time the center is done the exterior has overcooked. The cuts also allow the ginger and Shaoxing wine to penetrate deeper into the flesh during steaming, seasoning the fish from the inside out rather than just on the surface.
Eight Minutes Is the Rule For a standard-sized whole fish, eight minutes of high-heat steaming is the sweet spot — enough to cook the flesh through completely while keeping it silky, moist, and just barely flaking at the bone. A larger fish gets ten minutes. The key is that the water must already be at a full, rolling boil before the fish goes in — starting in cold or warm water extends the cooking time unpredictably and can result in uneven texture. Precision here is what separates silky, restaurant-quality steamed fish from dry, overcooked fish.
The Double Hot Oil Pour The finish of this dish is its most dramatic and most important moment. First, garlic-infused hot oil is poured over the fish and scallion — the sizzle releases the scallion’s aroma instantly and the garlic flavor coats every surface. Then a second pour of plain smoking-hot oil follows, creating another wave of sizzle and heat that flash-cooks the raw scallion strings at the very surface and fills the room with an aroma that is unmistakably Cantonese. The soy sauce drizzled between the two oil pours soaks into the fish and combines with the garlic oil into a light, fragrant sauce that pools at the bottom of the plate.
Key Ingredients
Whole Fish — Any fresh, mild white fish works well for this preparation — sea bass, grouper, tilapia, or red snapper are all excellent choices. Freshness is the most important factor; a fresh fish needs almost no seasoning to taste remarkable, while a less fresh fish will taste fishy regardless of what you do to it.

Ginger — Used two ways: sliced and stuffed into the cuts on the fish before steaming to neutralize any fishiness and infuse the flesh with warmth, and optionally in the garlic oil for extra aromatic depth.
Shaoxing Wine — Rubbed over the fish before steaming. It removes any residual fishy odor and adds a subtle fermented sweetness that complements the natural flavor of the fish.
Scallions — Cut into long, thin strings and piled generously over the top of the cooked fish just before the hot oil is poured. The oil flash-cooks the scallion strings on contact, releasing their sweet, grassy aroma into the dish.
Garlic — Cooked in the oil until golden brown before being poured over the fish. The garlic infuses the oil with a deep, savory richness that elevates the dish beyond a simple steamed fish.
The Sauce — A simple combination of soy sauce, oyster sauce, and a pinch of sugar, diluted with a small dash of water. The soy sauce provides saltiness and depth, the oyster sauce adds a thick savory sweetness, and the sugar rounds out any sharpness. Diluting with a little water ensures the sauce flows evenly over the fish rather than sitting in concentrated pools.
Key Steps
Make three deep diagonal cuts on each side of the fish, cutting all the way down to the bone. Rub the fish inside and out with a light amount of salt. Pour Shaoxing wine over the fish and rub it in thoroughly, including inside the cavity and into the cuts. Stuff slices of fresh ginger into the cuts on both sides and inside the cavity.
Bring a pot or wok of water to a full, rolling boil. Place the fish on a heatproof plate and set it in the steamer over the boiling water. Steam on high heat for 8 minutes for a standard-sized fish, or 10 minutes for a larger one. Do not lift the lid during steaming.
While the fish steams, cut the scallions into long, thin strings. In a small pan, heat oil over medium heat and add the sliced garlic. Cook until the garlic turns golden brown, watching carefully.

When the fish is done, carefully remove it from the steamer. Pile the scallion strings generously over the top of the fish. Drizzle soy sauce over the fish and scallions.
In a small bowl, combine 2 tablespoons of soy sauce, 1 tablespoon of oyster sauce, a pinch of sugar, and a small dash of water. Stir until the sugar dissolves.
Pour the golden garlic oil directly over the scallions — it will sizzle aggressively on contact. Drizzle the soy oyster sauce mixture evenly over the fish. Finally, heat a second small amount of plain oil in the same pan until smoking and pour that over the fish as well for a second dramatic sizzle. Serve immediately.
Expert Tips
Discard the liquid that collects on the steaming plate after cooking before adding the scallions and sauce. This liquid is drawn out during steaming and can taste slightly bitter and diluted — removing it gives the finished dish a much cleaner, more refined flavor, exactly as with the Cantonese steamed cod recipe on this blog.
Bring the fish to room temperature for about 15 minutes before steaming if it has been refrigerated. A cold fish going into a hot steamer can cook unevenly, with the exterior done before the center has had time to come up to temperature.
How to Serve
Serve the fish whole at the table, directly on the steaming plate, while the oil is still sizzling. Cantonese steamed fish is traditionally served as part of a larger shared meal alongside steamed rice and other dishes. The sauce that pools at the bottom of the plate is excellent spooned over rice — don’t let it go to waste.
Storage & Reheating
Steamed fish is best eaten immediately and does not store or reheat well — the silky texture is specific to freshly steamed fish and is largely lost upon reheating. Make only what you plan to eat in one sitting.
Variations
For extra fragrance, add a few slices of young ginger to the steaming water itself alongside the fish. For a richer sauce, add a small amount of oyster sauce alongside the soy sauce drizzle. For a spicier version, add thinly sliced fresh red chili to the scallion pile before the hot oil pour.
FAQs
How do I know when the fish is fully cooked? Insert a chopstick into the thickest part of the fish near the spine — it should slide in with no resistance and the flesh should be completely opaque and flake easily. If there is any translucency near the bone, steam for another minute and check again.
Can I use fish fillets instead of a whole fish? Yes — fillets work well and reduce the steaming time to about 5 to 6 minutes depending on thickness. The presentation won’t be as dramatic as a whole fish but the flavor is nearly identical.
Why does my fish smell fishy after steaming? This usually means either the fish wasn’t fresh enough or the Shaoxing wine step was skipped. Make sure to rub the wine thoroughly into the cuts and the cavity before steaming — it actively neutralizes the compounds responsible for fishiness.
Steamed Whole Fish with Scallion Oil Sauce
Whole fish stuffed with ginger and steamed over high heat until silky and flaky, then finished with golden garlic oil and a dramatic hot oil sizzle over fresh scallion strings and soy sauce — a classic Cantonese recipe passed down for generations.
Ingredients
Instructions
-
Make three deep diagonal cuts on each side of the fish down to the bone. Rub the fish with salt and Shaoxing wine inside and out. Stuff ginger slices into the cuts and the cavity.
-
Bring a pot of water to a full rolling boil. Place the fish on a heatproof plate and steam over high heat for 8 minutes for a standard fish, 10 minutes for a larger one. Do not lift the lid during steaming.
-
While the fish steams, cut the scallions into long thin strings. Heat oil in a small pan and cook the garlic until golden brown. Set aside.
-
When the fish is done, remove from the steamer and discard any liquid that has collected on the plate.
-
Pile the scallion strings generously over the top of the fish. In a small bowl, mix together 2 tablespoons soy sauce, 1 tablespoon oyster sauce, a pinch of sugar, and a dash of water until the sugar dissolves.
-
Pour the golden garlic oil directly over the scallions — it will sizzle aggressively. Drizzle the soy oyster sauce over the fish. Heat a second portion of plain oil until smoking and pour over the fish for a final sizzle. Serve immediately.
