Kerala-Style Fish Curry with Coconut Milk
This Kerala-style fish curry is a weeknight dinner that feels anything but rushed. Tender fish fillets simmer in a lightly spiced coconut sauce that is tangy from tamarind and warm with ginger.

It comes together in about 30 minutes and leans on pantry spices, so you can put a deeply flavored pot of curry on the table without much effort.
What Makes This Curry So Good
The sauce is the real star here. Full-fat coconut milk keeps it creamy without being heavy, and the tamarind cuts through with a sharp, fruity tang. It is the kind of curry you will want to mop up with every last grain of rice.
I reach for this when I want something that tastes slow-cooked but moves fast. The fish stays incredibly tender because it poaches gently rather than boiling, which means no dry spots or broken pieces.
Ingredients

- 1 tbsp coconut oil or neutral oil: coconut oil adds extra fragrance, but any neutral oil works.
- 1 tsp mustard seeds: they pop and add a nutty depth. Skip if you do not have them.
- 1 small onion, thinly sliced: a yellow or red onion both work.
- 3 garlic cloves, minced: use fresh for the best punch.
- 1 tbsp grated fresh ginger: peel it first, then use a microplane or the small holes on a box grater.
- 1 to 2 green chilies, slit lengthwise: adjust to your heat preference or leave them out.
- 1 tsp ground turmeric: brings that warm golden color.
- 1 tsp Kashmiri chili powder: mild and bright. Paprika is a good substitute.
- 1 tsp ground coriander
- ½ tsp ground cumin
- 1 cup (240 ml) full-fat coconut milk: do not shake the can. Scoop the thick cream and the thinner milk together.
- 1 cup (240 ml) water
- 1 tbsp tamarind paste: use the bottled kind, not concentrate. Lemon juice can stand in if needed.
- Salt: start with ½ tsp and adjust after simmering.
- 1 lb (450g) firm white fish fillets: cod, tilapia, snapper, or halibut all hold up well. Cut into large 2-inch chunks.
- 8 to 10 fresh curry leaves: optional, but they add a wonderful earthy note.
- Small handful fresh cilantro, for serving
Variations / Substitutions
- Swap the protein: shrimp or firm tofu cubes work beautifully. Shrimp needs only 2 to 3 minutes. Tofu can simmer for the full 7 minutes without breaking.
- Change the sour element: for a slightly different tang, use kokum petals (soaked in warm water first) or about 1 tbsp lemon juice stirred in at the end.
- Add vegetables: a handful of spinach wilts into the sauce just before serving. Sliced okra can go in with the fish.
- Keep it dairy-free: the recipe is already dairy-free, just use coconut oil.
For a tomato-heavy version, you might like my Goan Fish Curry next.
How to Make Kerala-Style Fish Curry with Coconut Milk
Step 1: Bloom the Aromatics and Spices

Set a wide, deep pan over medium heat and add the 1 tbsp oil. Once it shimmers, toss in the 1 tsp mustard seeds and, if you have them, a few fresh curry leaves. As soon as the seeds start to pop, stir in the sliced onion, slit green chilies, minced garlic, and grated ginger. Cook for about 5 minutes, until the onion softens and turns translucent.
The pan will smell sweet and a little peppery. The mustard seeds should crackle but not burn, so keep the heat medium.
Step 2: Stir in the Ground Spices

Sprinkle the 1 tsp turmeric, 1 tsp chili powder, 1 tsp coriander, and ½ tsp cumin directly over the onion mixture. Stir everything together and let it toast for about 30 seconds. The spices will darken slightly and become very fragrant.
Move quickly here. If the pan is too dry, add a splash of water to prevent the spices from catching and turning bitter.
Step 3: Build the Coconut Sauce

Pour in the 1 cup coconut milk and 1 cup water, then add the 1 tbsp tamarind paste and ½ tsp salt. Scrape up any bits stuck to the bottom of the pan. Bring the sauce to a gentle simmer, then reduce the heat so it bubbles softly. Let it cook uncovered for about 10 minutes, stirring now and then, until the sauce thickens just enough to coat the back of a spoon.
The color will settle into a warm yellow-orange. Taste a spoonful now and decide if you want more salt or an extra dab of tamarind. This is your moment to tweak the balance of salty and sour before the fish goes in.
Step 4: Poach the Fish in the Sauce

Slide the fish chunks into the simmering sauce gently, one piece at a time. Spoon a little sauce over the top so the fish is mostly submerged. Cover the pan with a lid and let it cook untouched for 5 to 7 minutes. The fish is ready when the thickest chunk flakes easily with a fork and the flesh looks opaque all the way through.
Do not stir aggressively once the fish is in. A gentle nudge with the spoon is fine, but too much movement can break the pieces.
Step 5: Ladle and Serve Over Rice

Ladle the curry into shallow bowls, making sure each portion gets a few generous pieces of fish and plenty of sauce. Scatter fresh cilantro over the top and drop a couple of raw curry leaves on if you saved a few. Serve right away, while the sauce is hot and the fish is at its most tender.
Tips for the Best Texture
- Choose the right fish: A firm, meaty white fish is the safest bet because it holds its shape. Flakier fish like flounder tends to dissolve in the sauce, which is not the end of the world but changes the dish.
- Do not overcook: The fish continues to cook from residual heat even after you take the pan off the stove. Pull it just as the center turns opaque, not after it has gone chalky.
- Tamarind strength varies: Start with 1 tbsp and taste the sauce before adding the fish. If you want more sour punch, stir in another teaspoon. Once the fish is in, you can still add a little lemon juice at the table.
- Curry leaves make a difference: They are not just garnish. A few leaves fried in oil at the start give the whole dish a subtle, almost smoky background note. They are worth seeking out in an Indian grocery store.
Poaching times by fish thickness:
| Fish thickness | Poaching time |
|---|---|
| Thin fillets (under 1 inch) | 4 to 5 mins |
| Thick fillets (1 to 1.5 inches) | 6 to 7 mins |
| Chunky steaks (over 1.5 inches) | 8 to 9 mins |
Storing Leftover Curry
- Refrigerate: The curry keeps well for up to 2 days in a sealed container. The sauce flavors deepen as it sits.
- Reheating: Warm it gently on the stove over low heat. Stir as little as possible to avoid breaking the fish apart. A microwave works in a pinch, but go in short bursts at medium power so the fish does not turn rubbery.
What to Serve with This Fish Curry
Steamed basmati rice is the obvious choice because it soaks up every bit of the sauce without competing. A small bowl of cucumber raita on the side cools the warmth of the green chilies and keeps the meal balanced. I also like a quick side of sautéed spinach or green beans with a little cumin, just to get something green on the plate.
Frequently Asked Questions
Can I use frozen fish?
Yes. Thaw it completely in the fridge overnight and pat the fillets very dry before cutting. Extra moisture will water down the sauce.
Can I make this with light coconut milk?
You can, but the sauce will be noticeably thinner. If you use light coconut milk, reduce the water to ½ cup so the curry does not end up too watery.
I do not have tamarind paste. What now?
Stir in 1 tbsp fresh lemon juice right at the end, after you take the pan off the heat. The flavor will be brighter and less fruity, but it still gives you that needed sourness.
How can I add more vegetables?
Toss in 2 cups of fresh spinach in the last minute of cooking, after the fish is done. The residual heat will wilt it down without overcooking. For okra, add it along with the fish so it has time to soften.

Kerala-Style Fish Curry with Coconut Milk Recipe
Ingredients
Method
- Heat oil in a wide pan over medium heat. Add mustard seeds and curry leaves if using. Once seeds pop, stir in onion, chilies, garlic, and ginger. Cook until onion softens, about 5 minutes.
- Sprinkle turmeric, chili powder, coriander, and cumin over the onion mixture. Stir and toast for 30 seconds until fragrant.
- Pour in coconut milk, water, tamarind paste, and salt. Bring to a gentle simmer, then reduce heat and cook uncovered for 10 minutes until the sauce thickens slightly.
- Gently add fish chunks to the simmering sauce. Spoon some sauce over the top, cover, and cook 5 to 7 minutes until fish flakes easily with a fork.
- Ladle curry into bowls, garnish with cilantro, and serve hot over rice.
