Filipino Chinese Fish Recipe: Snapper in Calamansi-Ginger Broth
Recipe Overview
Dish Name: Snapper in Calamansi-Ginger Broth with Crisp Garlic Threads Cuisine: Filipino-Chinese | Category: Fish Course | Serves: 4 Prep Time: 25 minutes | Cook Time: 20 minutes | Total Time: 45 minutes
Why This Works
This Filipino Chinese fish recipe solves the central problem of whole fish cookery: keeping flesh silky while building aggressive flavor. We’re marrying the Filipino love of citrus and vinegar with Chinese precision steaming, then finishing with a hot oil technique that belongs to neither tradition but serves both. The calamansi-ginger broth stays light enough to let quality snapper shine, while crisp garlic threads add textural contrast most fish dishes lack. You get restaurant refinement without the fuss, and the technique works across any quality white fish. This is how to cook whole fish Filipino Chinese style when you want something that tastes like neither cuisine’s greatest hits but borrows their best instincts.
Ingredients (Serves 4)
For the Fish:
- 2 whole snapper (600-700g each), scaled and gutted, gills removed
- 15g kosher salt
- 8g white pepper, freshly ground
- 60ml Chinese rice wine (Shaoxing)
- 50g ginger, cut into matchsticks
- 4 stalks scallions, whites crushed, greens cut into 5cm batons
For the Calamansi-Ginger Broth:
- 400ml fish stock or water
- 80ml calamansi juice (or 50ml lime juice + 30ml mandarin juice)
- 40ml patis (Filipino fish sauce)
- 30g palm sugar, crushed
- 40g young ginger, smashed
- 3 cloves garlic, smashed
- 2 Thai chilies, split lengthwise
- 15ml white vinegar
For the Crisp Garlic Threads:
- 8 cloves garlic, sliced paper-thin on mandoline
- 120ml neutral oil (grapeseed or rice bran)
- 5g cornstarch
For Finishing:
- 30ml neutral oil
- 20g cilantro leaves and tender stems
- 2 scallions, greens only, julienned
- Flaky sea salt
Method
Mise en Place (25 minutes)
Get your steamer ready. You need a vessel large enough to hold both fish without crowding. A wok with bamboo steamer works, as does a roasting pan with elevated rack covered tightly with foil. Water should be at a rolling boil before fish goes in.
Score each snapper three times on both sides, cutting through to the bone at a 45-degree angle. This isn’t decorative; it lets seasoning penetrate and ensures even cooking. Pat fish completely dry inside and out. Season cavity and exterior with salt and white pepper, then pour rice wine over both fish, rubbing it into the scores. Let sit while you prep everything else.
Slice garlic for the threads as thin as physically possible. Toss with cornstarch and shake off excess through a fine sieve. Set aside on paper towels, separated so they don’t clump.
Build the Aromatic Base (5 minutes)
Stuff each fish cavity with half the ginger matchsticks and crushed scallion whites. Arrange fish on heatproof platter that fits your steamer, leaving space between them for steam circulation. Scatter remaining ginger over the top. The aromatics will perfume the flesh as it steams.
Steam the Fish (12-15 minutes)
Once water is boiling aggressively, place platter in steamer and cover tightly. A 600g fish needs 12 minutes, 700g needs 15 minutes. You’re looking for flesh that just releases from the bone when tested with a chopstick at the thickest part near the head. The eye should be opaque white and slightly bulged. Don’t overcook. Snapper goes from perfect to dry in 90 seconds.
While fish steams, make your broth and garlic threads simultaneously.
Make the Calamansi-Ginger Broth (10 minutes)
Combine stock, calamansi juice, patis, palm sugar, young ginger, smashed garlic, and chilies in a small saucepan. Bring to a simmer and reduce by one-third, about 8 minutes. You want concentrated flavor but not syrupy consistency. Taste for balance: it should be citrus-forward with underlying funk from fish sauce, slight sweetness, and ginger heat. Add white vinegar in the final minute. This sharpens everything. Strain and keep warm.
Fry the Garlic Threads (4 minutes)
Heat 120ml oil in a small saucepan to 160°C. No thermometer? Drop one garlic slice in. It should gently sizzle and take about 90 seconds to turn golden. Add garlic in three batches, stirring constantly with chopsticks. They’ll go from pale to golden in 60-90 seconds. Pull them early; they continue cooking on the paper towels. If they turn brown in the oil, you’ve burned them. Start over. Burned garlic tastes like failure. Season with flaky salt while still hot.
Final Assembly (3 minutes)
Remove steamed fish from steamer. There will be liquid on the platter. Pour it off and discard; it’s fishy and dilutes your broth. Transfer fish to serving platter or keep on same plate if it’s presentable.
Heat 30ml neutral oil in a small pan until it smokes slightly. Pour this hot oil directly over the scallion greens and cilantro scattered on the fish. You should hear a violent sizzle. This flash-cooks the herbs and releases their aromatics.
Ladle the warm calamansi-ginger broth around (not over) the fish. You want the crisp skin to stay dry where possible. Top with crisp garlic threads and additional cilantro leaves.
What You Need to Know
Fish Selection Matters: Snapper is ideal because it holds together under steam and has sweet, clean flavor that doesn’t fight citrus. Sea bass, grouper, or striped bass work identically. Avoid oily fish like mackerel or bluefish; they’ll clash with the delicate broth. Fresh is non-negotiable. If the eyes are cloudy or it smells like anything other than clean ocean, walk away.
The Steaming Technique: This is where most people fail. Water must be boiling before fish enters. If you add fish to cold water and bring it up to temperature, you’ll overcook the exterior before the interior is done. Steam is actually hotter and more efficient than boiling water, which is why this works. The tight seal matters. If steam escapes, add 3-4 minutes to cooking time and accept inferior results.
Make-Ahead Strategy: You can prep the broth base up to the reduction stage one day ahead. Refrigerate and reheat when needed, adding the vinegar only when serving. The garlic threads hold for 4 hours in an airtight container at room temperature. Don’t refrigerate them; moisture will kill the crispness. The fish must be cooked and served immediately. There’s no workaround.
The Result
You’re looking at whole fish with taut, glossy skin where it hasn’t been hit with hot oil, and blistered aromatics where it has. The flesh should be opaque white, releasing cleanly from the bone in large, moist flakes. First bite delivers clean fish flavor, then the citrus-ginger broth cuts through with acidity and mild heat. The garlic threads provide crunch against silky fish. The broth should taste bright and alive, not muddy or overly fishy. If it tastes flat, you didn’t reduce it enough or your calamansi juice lacks acidity. If it’s too sharp, you added vinegar too early and it became harsh rather than bright.
Nutrition Information Based on a 2,000 Calorie Diet (Per Serving)
| Nutrient | Amount | % Daily Value |
|---|---|---|
| Calories | 385 kcal | 19% |
| Total Fat | 18g | 28% |
| Saturated Fat | 2.5g | 13% |
| Trans Fat | 0g | 0% |
| Cholesterol | 95mg | 32% |
| Sodium | 1,850mg | 80% |
| Total Carbohydrates | 14g | 5% |
| Dietary Fiber | 1g | 4% |
| Total Sugars | 9g | – |
| Protein | 42g | 84% |
| Vitamin D | 2.8µg | 14% |
| Calcium | 85mg | 7% |
| Iron | 1.4mg | 8% |
| Potassium | 685mg | 15% |
Flavor Balance
Sweet (4/10): Palm sugar provides the baseline, with calamansi’s natural fruit sweetness adding complexity. The snapper itself has inherent sweetness that comes forward against the acidic broth. This isn’t a sweet dish; the sugar exists to balance acid and salt.
Salty (7/10): Patis drives this dimension hard, reinforced by the initial salt rub on the fish. The fish sauce brings not just sodium but fermented depth. It’s aggressive by design; you need this level to stand up to citrus and cut through rich fish oils.
Sour (8/10): Calamansi and white vinegar make this the dominant note. The citrus is bright and immediate, while vinegar provides sharper, more penetrating acidity. This is a high-acid dish that cleanses your palate between bites rather than coating it.
Bitter (2/10): Minimal presence, coming only from slight char on ginger and the trace bitterness in cilantro stems. Bitter isn’t the point here, and too much would fight the citrus.
Umami (6/10): Patis and fish stock build the savory foundation. The snapper itself contributes glutamates, and the ginger-garlic combination adds aromatic depth that reads as umami. The fish sauce is doing double duty as both salt and umami driver.
Wine Pairing
1. Technical Match
Weight: This is a medium-bodied dish despite being seafood. The broth adds body, and snapper is meatier than sole or flounder. You need a wine with enough structure to match without overwhelming the delicate citrus profile. Light-medium to medium weight wines work best.
Acid Balance: The dish runs high acid from calamansi and vinegar. Your wine needs comparable or higher acidity to avoid tasting flabby. Low-acid wines will taste sweet and cloying against this broth. Look for wines with pH below 3.3 and TA above 6.5g/L.
Tannin Interaction: There’s minimal fat in steamed snapper to soften tannins, and the acidity would make any tannic wine taste astringent and bitter. This demands white wines or the lightest, most acid-driven reds served cool. Tannin is your enemy here.
Serving Temperature: 8-10°C for whites. The citrus and ginger in the dish read as “cool” flavors, and warm wine would clash. If attempting light red, serve at 12-13°C maximum.
2. Flavor Architecture
Primary Bridge: Citrus and ginger create the connection point. Wines with citrus zest, ginger, or white pepper notes will mirror these aromatics. The fish sauce’s umami needs wines with some savory character or lees contact to avoid feeling one-dimensional against it.
Complementary Elements: The palm sugar’s gentle sweetness plays well against off-dry wines, while bone-dry wines can contrast effectively with the sweet element and amplify the fish’s natural flavor. The garlic’s richness needs cutting acidity in the wine.
Regional Logic: While this isn’t a traditional pairing situation (Filipino-Chinese fusion with Australian wine), the principle holds: high-acid seafood with citrus calls for high-acid wines with aromatic complexity. Think of how Riesling works with Asian flavors, or how Albariño handles Portuguese seafood.
Common Mistakes: Oaked Chardonnay will smother the delicate fish and clash with citrus. Big, alcoholic whites (14%+) will taste hot against the ginger. Tannin-heavy reds will turn metallic against the acid and fish sauce. Avoid anything buttery, oakey, or heavy.
3. Recommendations with Scoring
Primary Pairing: Clare Valley Riesling
Intensity Match: 8/10 Flavor Harmony: 9/10 Texture Interaction: 8/10
Why: Clare Valley Riesling is built for this dish. The razor-sharp acidity (often 7-8g/L TA) matches the calamansi’s bite without getting steamrolled. These wines commonly show lime zest, ginger, and white pepper aromatics that directly mirror the dish’s flavor profile. The slate-mineral backbone stands up to patis without competing, and the bone-dry style (most Clare Rieslings are under 5g/L residual sugar) keeps the focus on the snapper. The wine’s precision and linearity complement the dish’s clean execution. At 11.5-12.5% alcohol, it won’t overpower delicate fish.
Specific Producers: Grosset Polish Hill, Pikes Traditionale, Kilikanoon Mort’s Reserve
Alternative 1: Margaret River Sauvignon Blanc-Semillon Blend
Intensity Match: 7/10 Flavor Harmony: 8/10 Texture Interaction: 7/10
Why: Margaret River’s signature blend brings the best of both grapes. Sauvignon Blanc contributes the citrus and herbaceous notes that echo cilantro and scallions, while Semillon adds texture and weight to match the fish’s meatiness. The blend typically shows lemongrass and ginger spice that work with your aromatics. Barrel-fermented versions (not barrel-aged; there’s a difference) gain texture from lees without oak flavor, giving you enough body to handle the broth. Look for 60-80% Sauvignon Blanc dominant blends with neutral oak or stainless steel. Acidity is high but not quite Riesling-level, which is fine; the Semillon’s waxy texture provides a different kind of counterpoint to the dish.
Specific Producers: Vasse Felix Classic Dry White, Cape Mentelle Sauvignon Blanc-Semillon, Cullen Sauvignon Blanc-Semillon
Alternative 2: Adelaide Hills Grüner Veltliner
Intensity Match: 8/10 Flavor Harmony: 9/10 Texture Interaction: 8/10
Why: This is the wildcard that works brilliantly. Australia’s cool-climate Grüner Veltliner production is small but serious, and the grape’s natural affinity for Asian flavors is well-documented. The variety’s signature white pepper spice mirrors both the white pepper on the fish and the ginger in the broth. High natural acidity cuts through fish sauce, and the wine’s savory, almost vegetable-like character (snap pea, celery) complements rather than fights the dish’s complexity. The texture is more viscous than Riesling but not heavy, which helps carry the delicate snapper flavor across your palate. These are typically 12-12.5% alcohol with pronounced minerality. The challenge is finding them; production is limited to a handful of Adelaide Hills producers.
Specific Producers: Hahndorf Hill, Unico Zelo, Sidewood Estate
HACCP-Compliant Storage and Safety
Purchasing and Initial Storage
- Purchase snapper from reputable fishmonger with product held at 0-2°C on ice
- Transport fish in insulated container with ice packs, total transport time under 1 hour
- If not cooking immediately, gut fish, rinse, pat dry, wrap in plastic, and refrigerate at 0-2°C
- Use within 24 hours of purchase; whole fish degrades rapidly
Hot Holding During Service
- Serve fish immediately after cooking; internal temperature should reach minimum 63°C during steaming
- If holding for service, maintain at minimum 60°C for no more than 30 minutes
- Do not attempt to hold this dish; quality and safety both degrade rapidly
Cooling Protocol
- Leftover cooked fish must cool from 60°C to 21°C within 2 hours, then from 21°C to 4°C within an additional 4 hours
- Portion large fish into smaller pieces to accelerate cooling
- Place in shallow containers (maximum 5cm deep), uncovered, in refrigerator
- Do not stack containers; allow air circulation
Cold Storage
- Store cooked fish in sealed containers at 0-4°C for maximum 48 hours
- Store broth separately in sealed container at 0-4°C for maximum 3 days
- Do not store crisp garlic with fish; moisture will destroy texture (store at room temperature in airtight container for maximum 4 hours)
- Label all containers with preparation date and time
Reheating Procedures
- Reheat fish to internal temperature of minimum 75°C
- Steam method preferred: 4-5 minutes in steamer until core temperature reaches 75°C
- Reheat broth to rolling boil (100°C) before serving
- Do not reheat more than once
- Consume reheated fish immediately; do not re-refrigerate
Disposal Guidance
- Discard any fish held at room temperature (20-25°C) for more than 2 hours
- Discard any fish stored in refrigerator beyond 48 hours post-cooking
- Discard any fish with off-odors, slimy texture, or discoloration
- Discard broth beyond 3 days or if showing any signs of fermentation (bubbling, off-smell, cloudiness beyond initial appearance)