Culinary Explorer

A cooking platform built around craft, culture, and the stories behind what we eat.

Discover Culinary Explorer
Fish Hot and Sour Soup (Tom Yam Pla)

Fish Hot and Sour Soup (Tom Yam Pla)

Created by

Same aromatic trinity as the goong version, different protein, different soul. River fish gives tom yam a sweetness shrimp can't. The herbs infuse whole, the lime goes in last, and fish sauce is the only salt. That's the system.

Soups & Stews
Thai
Weeknight
Comfort Food
15 min
Active Time
20 min cook35 min total
Yield4 servings

Tom yam pla is the river version. The older version, if you ask the people who grew up along the Chao Phraya. Before shrimp became the export darling of Thai cuisine, before tom yam goong showed up on every tourist menu in Bangkok, there was a clay pot of fish soup on the family table. Whole fish or thick steaks, simmered in a clear broth infused with lemongrass, galangal, and kaffir lime leaves.

Ajarn always said that tom yam is the exception that proves the kreung tam rule. No paste. No mortar. The aromatics go in whole, bruised and torn, infusing the broth with their essential oils directly. Lemongrass cracked with the back of a knife. Galangal sliced thin so the surface area releases maximum flavor. Kaffir lime leaves torn down the center vein to let the oils bleed into the liquid. These are not garnish. They are medicine and flavor delivery, doing the work that a pounded paste does in every other Thai dish.

The four pillars hold here like they hold everywhere. Nam pla (fish sauce) for salt. A bare touch of nam tan pip (palm sugar) to round the edges. Manao (lime juice) for sour, the dominant voice in every tom yam. Prik (chili) for heat. But the balance tips hard toward sour and salty. Tom yam is not a sweet soup. If yours tastes sweet, you've broken the principle.

Here's what changes with fish: timing is everything. Shrimp curl and they're done, two minutes, no thought required. A thick steak of pla chon (snakehead) or any firm white fish needs gentle heat and patience. You simmer the broth first, build all the flavor, then slide the fish in and let the residual heat do the work. Overcook it and the flesh turns to chalk. Undercook it and you're eating raw freshwater fish, which is a different problem entirely. And the lime juice, always, always goes in off the heat. The moment you boil lime juice, the bright acid dies and you're left with a flat, cooked sourness that tastes nothing like manao. Ajarn drilled this into me: "Lime last. Lime off the fire. That's the law."

Tom yam pla predates the now-famous tom yam goong as a Central Thai household soup, rooted in the river and canal cultures of the Chao Phraya basin where freshwater fish (especially pla chon, snakehead) was the primary protein. The dish follows the tom yam nam sai (clear broth) tradition rather than the nam khon (creamy) style that became popular with the shrimp version in the late 20th century. Snakehead fish (Channa striata) remains the traditional choice in Thai home cooking for its firm flesh and clean sweetness, though its use has declined in Bangkok restaurants as farmed shrimp became cheaper and more photogenic for the tourist market.

The technique, the tradition, and the story behind every dish.

Discover Culinary Explorer

Ingredients

firm white fish fillets or steaks (snakehead, barramundi, sea bass, or tilapia)

Quantity

400g

cut into 2-inch pieces

water or light fish stock

Quantity

5 cups

lemongrass (takhrai)

Quantity

3 stalks

cut into 2-inch lengths, bruised

galangal (kha)

Quantity

7 slices

1/4 inch thick

kaffir lime leaves (bai makrut)

Quantity

5

torn in half, center vein removed

bird's eye chilies (prik khi nu)

Quantity

5-7

bruised

shallots (hom daeng)

Quantity

3

halved

mixed mushrooms (straw or oyster)

Quantity

200g

halved or quartered

Roma tomatoes

Quantity

2

cut into wedges

fish sauce (nam pla)

Quantity

3 tablespoons

lime juice (nam manao)

Quantity

3-4 tablespoons (about 3 limes)

palm sugar (nam tan pip)

Quantity

1 teaspoon

dried chilies (prik haeng) (optional)

Quantity

3-4

toasted briefly

fresh cilantro leaves (pak chi)

Quantity

for finishing

steamed jasmine rice

Quantity

for serving

Equipment Needed

  • Medium stockpot or saucepan
  • Sharp knife for fish portioning
  • Ladle

Instructions

  1. 1

    Prepare the aromatics

    Bruise the lemongrass by pressing down firmly with the flat side of a knife or the heel of your hand. You should hear it crack. That crack is cell walls breaking and essential oils releasing. Cut it into 2-inch lengths. Slice the galangal thin, about a quarter inch. Tear each kaffir lime leaf in half along the center vein, discarding the tough vein. Bruise the bird's eye chilies by pressing them lightly with the flat of your knife. Every one of these steps has the same purpose: maximize the surface area that touches the broth. More surface, more oil release, more flavor.

    Don't skip the bruising. Whole, uncracked lemongrass sitting in broth does almost nothing. The oils are locked inside the fibrous stalks. You have to break them open. That's not a suggestion. That's chemistry.
  2. 2

    Build the infused broth

    Bring the water or fish stock to a boil in a medium pot. Add the lemongrass, galangal, kaffir lime leaves, bruised chilies, and halved shallots. Drop the heat to a steady simmer and let it go for 5-7 minutes. The broth should smell sharp, herbal, almost medicinal. That's the aromatic trinity at work: takhrai, kha, bai makrut. These three show up in every tom yam, every tom kha, and they're doing the same job a kreung tam does in a curry, delivering concentrated herbal flavor into the liquid. The difference is method, not principle.

    If you have access to fresh pla chon (snakehead), simmer the bones and head for 10 minutes before adding the aromatics. That bone broth gives the soup a body and sweetness that water alone can't match. Strain out the bones, then proceed.
  3. 3

    Add mushrooms and tomatoes

    Add the mushrooms and tomato wedges to the simmering broth. Cook for 2 minutes. The mushrooms absorb the herbal broth and become little flavor sponges. The tomatoes soften at the edges and release their own gentle acidity into the liquid, a supporting sourness that works alongside the lime. If using toasted dried chilies, add them here for a deeper, smokier heat layer beneath the fresh chili burn.

  4. 4

    Cook the fish gently

    Slide the fish pieces into the broth. Don't stir. Don't poke. Let them sit in the simmering liquid for 3-4 minutes, depending on thickness. The fish is done when the flesh turns opaque through the center and flakes when pressed gently with a spoon. If it resists, give it another minute. If it's falling apart, you waited too long. Fish doesn't forgive overcooking. The flesh should hold its shape but yield easily. That's the window.

    Cut your fish into even-sized pieces so they cook at the same rate. Uneven chunks mean some pieces are perfect while others are mush. Consistency matters.
  5. 5

    Season off the heat

    Remove the pot from the heat. This is critical. The pot is off the fire before the seasoning goes in. Add the fish sauce and palm sugar first, stir gently. Then the lime juice. All of it, in one pour. Stir once. Taste. The balance should hit you in this order: sour first, bright and sharp. Salty second, from the nam pla. Heat building underneath from the chilies. Sweet barely registers, just enough to keep the sour from being harsh. If it needs more sour, add lime. More depth, add nam pla. But go carefully. You can always add. You can never take away. Ladle into bowls with the herbs still in the broth. Scatter cilantro over the top. Serve immediately with steamed jasmine rice.

    Ajarn always said: "Lime last. Lime off the fire." The moment you boil lime juice, the volatile aromatic compounds evaporate and the citric acid loses its brightness. You're left with a flat, cooked sourness. That's not tom yam. That's a mistake with herbs in it.

Chef Tips

  • Snakehead (pla chon) is the traditional fish for this soup. Its flesh is firm, sweet, and holds up in hot broth without disintegrating. If you can't find it, barramundi or sea bass are solid substitutes. Tilapia works in a pinch, but it's softer, so handle it gently and cut the pieces larger. What you're looking for is a firm, white, mild-flavored fish. Strong-flavored fish like mackerel will fight the aromatics instead of letting them lead.
  • This is tom yam nam sai, the clear broth version. No nam prik pao (roasted chili jam), no coconut milk, no evaporated milk. The broth should be translucent with a faint golden color from the aromatics. If your tom yam pla is red or creamy, you're making a different soup. The clarity is the point. You taste every element: the lemongrass, the galangal, the lime, the fish. Nothing hides.
  • The aromatics in the bowl are not meant to be eaten. Lemongrass is fibrous and woody. Galangal is hard enough to chip a tooth. Kaffir lime leaves are leathery. They're in the bowl for continued infusion and aroma. Eat around them. Every Thai person knows this instinctively. If your guests are fishing out galangal slices and chewing on them, tell them to stop.
  • Don't use chicken stock. Fish stock or water. Chicken stock brings a richness that muddies the clean, sharp character of this soup. Tom yam pla should taste like the river: clean, bright, herbal. If you can make a quick stock from the fish bones and head for ten minutes before building the soup, even better.

Advance Preparation

  • Aromatics (lemongrass, galangal, kaffir lime leaves) can be prepped and bruised up to a few hours ahead. Keep covered at room temperature.
  • Fish should be cut into portions and refrigerated until the broth is ready. Bring it to room temperature for 10 minutes before cooking so it doesn't drop the broth temperature dramatically.
  • Do not make this soup ahead. The lime juice loses its brightness within minutes of being added, and the fish continues cooking in the hot broth. Tom yam pla is a cook-and-serve dish. No leftovers. No reheating. Make it, eat it.

Frequently Asked Questions

Nutrition Information

1 serving (about 400g)

Calories
145 calories
Total Fat
2 g
Saturated Fat
1 g
Trans Fat
0 g
Unsaturated Fat
1 g
Cholesterol
50 mg
Sodium
1100 mg
Total Carbohydrates
9 g
Dietary Fiber
2 g
Sugars
3 g
Protein
22 g

Note: Chef personas and recipes are created with AI assistance. Cook with care: follow safe food-handling practices, check doneness with a thermometer when needed, and adapt for allergies and your kitchen.

Where cooking meets culture.

Culinary guides, cultural storytelling, and the editorial depth that makes cooking meaningful.

Discover Culinary Explorer

More from Central Thai Soups

Browse the full collection