The soul of 糖醋鱼 is a whole fish with crisp, nearly glassy skin and a glossy red-brown sauce that snaps between tart and sweet. Restaurant versions lean on a deep vat of oil and a squirrel-tail score that flares into spikes. Home cooks rarely have either, and most recipes that promise "no deep-frying" hand you back a pale, waterlogged fillet bobbing in ketchup. This is the middle path: one whole trout, a thin starch skin, a shallow pan, and a sauce built on vinegar and sugar instead of tomato alone. Twenty minutes from fridge to table, and the skin still shatters when you bite it.
I have ruined this dish more times than I have nailed it. The first failure was a tilapia that stuck so hard the skin stayed riveted to the carbon steel while the flesh tore away in gray clumps. The second was a sauce so sweet it tasted like sweet-and-sour cough syrup. What fixed both was treating the starch coating and the sauce ratio as the two decisions that actually decide the plate, and refusing to flip the fish early. Get those three things right and the rest is forgiving.
At a glance. One ~600 g (1⅓ lb) whole fish, dried bone-dry, dusted in a thin cornstarch veil, pan-fried 2 minutes a side over medium, then braised 5 minutes per side in a sauce of 3 tbsp rice vinegar to 1½ tbsp sugar to 3 tbsp ketchup, reduced until it coats a spoon. The cornstarch dust is non-negotiable. Do not flip until the first side releases on its own.
What the dish is, and where it sits at the table
Sweet and sour fish is banquet and festival food first, weekday food second. In northern and eastern Chinese homes it appears at Chinese New Year because a whole fish, head and tail intact, is the visual pun 年年有余, "surplus year after year." You can see the same logic in any round-up of New Year recipes: the whole-protein centerpiece carries the symbolism, and the sweet-sour glaze is the crowd-pleaser that follows.
The sauce has two dialects. The southern, Cantonese-leaning school dials up tomato ketchup and pineapple for a bright red, candy-shop glaze. The northern school leans on rice vinegar and rock sugar and barely colors the dish. This recipe splits the difference, but my own taste runs to the vinegar-forward side. If you want the candy-shop version, double the ketchup and add a tablespoon more sugar. Either way the technique is the same.
The fish you choose changes everything
Rainbow trout is the pragmatic pick: thin enough to cook through before the belly dries, a clean flavor that does not fight the sauce, and skin that crisps reliably in a shallow pan. Beyond trout, look for any small, whole, relatively flat fish.
- Rainbow trout (600–700 g / 1⅓–1½ lb) — my default. Cooks evenly, crisp skin, mild flesh.
- Whole sea bass or branzino — firmer, more elegant; great if you can get it fresh.
- Small grass carp or silver carp. The traditional banquet choice; more bones, so score and braise long enough to flake.
- Tilapia. Cheap and widely available, but the flesh is soft and the flavor flat. Acceptable, not exciting.
Avoid thick, round fish like a large snapper. By the time the center is cooked, the outside has turned to cardboard in the pan. If your only option is a fillet, switch tactics entirely: the crispy-skin sweet and sour salmon approach handles individual portions far better than a broken-down whole fish will.
Ingredients
Ingredients at a glance

| Ingredient | Amount | Notes / substitute |
|---|---|---|
| Whole rainbow trout, gutted and descaled | 1, about 600 g (1⅓ lb) | Sea bass, branzino, or small carp also work |
| Cornstarch (or potato starch) | 1 tbsp | Potato starch gives a slightly crispier skin |
| Neutral cooking oil | 2 tbsp | Peanut, canola, or grapeseed; not olive oil |
| Scallions, chopped | 2 stalks | Keep white and green separate |
| Ginger, sliced | 2 slices | Smashed slices release more flavor |
| Garlic, sliced | 4 cloves | Minced if you want a sharper bite |
| Shaoxing rice wine | 1 tbsp | Dry sherry or a splash of white wine |
| Light soy sauce | 1 tbsp | Do not substitute dark soy; it will muddy the color. See light vs. dark soy sauce |
| White rice vinegar | 3 tbsp | Cider vinegar works; avoid aged black vinegar here, it is too dark |
| Sugar | 1½ tbsp | Rock sugar, dissolved, gives a cleaner sweetness (see rock sugar) |
| Tomato ketchup | 3 tbsp | Body and color; the sauce is not built on it alone |
| Water | 120 ml (½ cup) | Hot water keeps the pan temperature up |
| White pepper | ¼ tsp | White, not black, for a clean finish |
| Salt | ½ tsp | Plus a pinch for the cavity |
| Fresh cilantro, chopped | To finish | Scallion greens if you hate cilantro |
Method
- Dry the fish, then score it. Pat the outside and the belly cavity with paper towels until not a drop of water remains. Moisture is the enemy of crisp skin. With a sharp knife, cut three diagonal slashes through to the bone on each side at a 45° angle. Scoring does two jobs: it lets heat and sauce penetrate so the thick back cooks at the same rate as the belly, and the cut edges crisp up into the best part of the dish. The same logic applies to pan-fried belt fish and even to a clean Chinese-style steamed fish, where slashes carry the scallion-ginger steam into the flesh.
- Dust with cornstarch. Spoon the starch over both sides and the cavity, then rub it in and shake off every last bit of excess. You want a translucent film, not a batter. If you can see white powder sitting on the skin, you have used too much. The starch gelatinizes in the hot oil and forms the crisp shell; without it, the skin steams in its own juice and sticks.

After drying the skin and cavity completely and cutting three diagonal slashes per side, rub in only a thin starch film and shake off every loose trace. Visible white patches mean the coating is too heavy and will behave like batter.
- Sear the first side, and do not touch it. Heat a well-seasoned wok or a heavy nonstick skillet over medium-high, add the oil, and let it shimmer. Lay the fish in away from you so any spit flies the other direction. Now turn the heat down to medium and walk away for two minutes. The fish will tell you when it is ready: it releases on its own and the edge facing the pan is deep gold. If you have to pry, it is not done. Patience here is the single biggest difference between a stuck disaster and a clean flip.

Lay the fish into shimmering oil away from you, lower to medium heat and leave it untouched for about two minutes. Test with only a light nudge at the edge; flip only when the skin has set, turned deep gold and releases on its own.
- Flip and finish the second side. Turn the fish with a wide spatula and your hand or a second spatula bracing the back. Another two minutes, skin down. While it works, mix the rice wine, soy, vinegar, sugar, ketchup, water, white pepper, and salt in a bowl. The sugar will not fully dissolve cold; that is fine, the simmer takes care of it.
- Bloom the aromatics in the same pan. Once the second side is golden, nudge the fish to one edge of the pan so the oil pools on the empty side. Drop in the scallion whites, ginger, and garlic and let them sizzle for about thirty seconds. You are not frying them hard, just waking up the volatile oils so they perfume the sauce instead of tasting raw.
- Braise, then reduce. Pour in the sauce mixture. It should come up around the lower third of the fish. Bring it to a rolling boil, cover, drop the heat to low, and simmer five minutes. Flip carefully, cover again, and give it another five minutes. Take the lid off for the last minute or two and let the sauce boil down until it coats the back of a spoon in a glossy sheet. This is where a cornstarch-thickened sauce wants to separate if you boil it too hard, so keep it at a steady, controlled bubble.
- Finish and plate. Slide the fish onto a warmed plate, spoon the sauce and aromatics over the top, and scatter the scallion greens and cilantro. The herbs go on after the heat, never under the lid, or they turn black and taste of wet grass. Serve at once with plain rice.
When it goes wrong, and how to save it
This section is the one I wish someone had handed me the first six times I tried this dish.
- The skin sticks and tears on the flip. Two causes, both fixable. Either the fish was wet when it hit the pan, or you tried to flip before the crust had set. Dry more aggressively next time, dust with starch, and trust the two-minute clock. To rescue the current fish: stop poking, lower the heat slightly, and let it cook another minute. A stuck fish often releases itself if you wait.
- The flesh near the backbone is still raw. The fish was too thick or the heat too high. Add two tablespoons of hot water, clap on the lid, and steam-braise for another two to three minutes. This is exactly why scoring matters; a properly slashed trout rarely has this problem.
- The sauce tastes flat or one-dimensional. You leaned too hard on ketchup. Wake it up with an extra teaspoon of vinegar and a pinch of salt; salt makes sweet-and-sour read as flavor rather than sweetness. If it is too sharp, a half-teaspoon of sugar rounds it without making it cloying.
- The sauce breaks or looks greasy. You boiled it too violently after the starch cooked, or the oil was too hot when you added the liquid. Whisk in a teaspoon of cold water off the heat to re-emulsify, then return to a gentle simmer. The same failure mode haunts the glaze on sweet and sour ribs and sweet and sour meatballs; the fix is identical.
- The belly collapses and the fish looks ragged. You used a fish that was too large or too round for shallow pan-frying. Next time go smaller and flatter, or split the recipe into two fish.
Variations and what to serve alongside
The sauce is a template. Once you have the ratio, you can bend it. Add a tablespoon of Shaoxing rice wine and a teaspoon of dark soy for a deeper, redder glaze closer to the red-cooked family. Spike it with a spoon of black rice vinegar for a smokier edge, or fold in diced pineapple and bell pepper for the Cantonese banquet version. A pinch of dried chili flakes takes it toward the numbing heat of Sichuan boiled fish without fully leaving sweet-and-sour territory.
For the rest of the table, keep it simple and let the fish carry the meal. Plain steamed rice is non-negotiable; it is what soaks up the sauce. A quick tomato egg stir-fry echoes the tomato in the glaze without competing. Something crisp and salty on the side, like salt and pepper squid, gives texture contrast. If you want a second fish course for a larger spread, the clean, bright acid of suan cai yu sits on the opposite end of the spectrum and balances the sweetness.
Storage and reheating
Leftover sweet and sour fish will keep, covered, in the fridge for up to two days. The skin loses its crunch overnight, which is the one thing you cannot fully get back. Reheat gently in a covered pan over low heat with a splash of water to loosen the sauce, or in the microwave at half power. Do not re-fry; you will only dry out the flesh. I would not freeze it. Fish that has been braised in a sugar-heavy sauce tends to emerge from the freezer with a cottony texture that no amount of sauce can hide.
Questions I get asked
Do I have to marinate the fish first? Not for this version. The starch dust and the braise carry the flavor. A brief salt-and-wine rub will not hurt, but it also draws out moisture, which works against the crisp skin.
Is two tablespoons of oil really enough to fry a whole fish? Yes, because you are pan-frying, not shallow-frying. The oil films the pan and conducts heat to the skin. Add a third tablespoon only if your pan is dry at the edges.
Can I use fillets instead of a whole fish? You can, but the dish becomes something else. Without the bone to insulate the flesh and the cavity to hold the aromatics, you lose the banquet feel. For fillets I would steer toward scallion ginger salmon and save the whole-fish treatment for the shape it was designed for.
How do I tell when the sauce is thick enough? Dip a spoon, pull it out, and run your finger through the coating. If the line holds and the sauce sheets off slowly rather than running like water, it is ready. It will thicken a little more as it cools on the plate.
Sweet and sour fish lives or dies on two moments: the dry starched skin hitting a hot pan, and the patience to flip only when the crust says so. Nail those, and the rest of the recipe forgives you. The sauce ratio is a habit you keep for life, and once it is in your hands the same glaze does honest work on pork, on meatballs, and on whatever firm fish the market has that day.



