There is a particular hunger that hits around seven in the evening in a Pakistani home — the kind where you want something garam, something with gravy, something that tastes like it took hours even though you have thirty minutes. For years, my answer to that hunger was always fish curry. Then keto entered my life, and for a while I mourned it: no rice to soak up the gravy, no roti to scoop it with.
This recipe is how I got my fish curry back. Tender chunks of surmai simmered in a creamy, golden coconut-milk gravy with curry leaves, mustard seeds and green chilies — rich enough that you will not miss the rice, and fast enough for a weeknight. Bilkul restaurant-wali feel, ghar ke masalon ke saath.
Why This Fish Curry Is Genuinely Keto
Many “keto” desi recipes cheat — a spoon of besan here, a sugary tamarind-heavy gravy there. This one does not. The body comes from full-fat coconut milk and a little ground coconut, not flour or cashew paste. Onion is kept to half a cup for the whole pot. No sugar, no potato, no starch thickeners. The result is roughly 4–5 grams of net carbs per serving, with the kind of fats that keep you full for hours — a proper keto dinner, not a “keto-ish” compromise.
Ingredients (Serves 4)
For the Fish
- 750 g firm white fish, cut into 2-inch chunks — surmai (king fish), rohu, or basa
- 1 teaspoon salt
- ½ teaspoon turmeric powder (haldi)
- 1 tablespoon lemon juice
For the Curry
- 3 tablespoons coconut oil
- 1 teaspoon mustard seeds (rai)
- 10–12 fresh curry leaves (kari patta)
- ½ cup onion (about 1 medium), very finely chopped
- 1 tablespoon ginger-garlic paste
- 2–3 green chilies, slit lengthwise
- 1 teaspoon red chili powder — adjust to taste
- ½ teaspoon turmeric powder
- 1 teaspoon coriander powder (dhania)
- ½ teaspoon cumin powder (zeera)
- 400 ml full-fat coconut milk (one standard can), well shaken
- 2 tablespoons desiccated coconut, ground fine
- ¾ cup water (180 ml)
- Salt to taste — start with 1 teaspoon
- 2 tablespoons fresh coriander leaves, chopped, for garnish
- 1 tablespoon lemon juice, to finish
Step-by-Step Instructions
Step 1: Marinate the Fish
Pat the fish chunks completely dry with a paper towel — wet fish steams instead of searing and waters down the gravy. Rub with salt, turmeric and lemon juice, and set aside for 15 minutes. Do not go beyond 30 minutes; the lemon will start “cooking” the fish.
Step 2: Temper the Spices
Heat the coconut oil in a wide, heavy karahi over medium-high heat. When it shimmers, add the mustard seeds and wait 20–30 seconds for them to pop. Add the curry leaves (stand back, they splutter) and green chilies, and sizzle 15 seconds.
Step 3: Brown the Onion
Add the onion and cook 6–8 minutes, stirring often, until the edges turn deep golden. Do not rush this — browned onion is where the curry’s sweetness comes from, and we are using half the onion of a normal curry. Stir in the ginger-garlic paste and cook 2 more minutes until the raw smell is gone.
Step 4: Bloom the Ground Spices
Lower the heat to medium. Add the red chili powder, turmeric, coriander and cumin. Stir constantly for 45 seconds until the spices darken slightly and smell roasted. Splash in a tablespoon of water if the pan looks dry. This blooming step is what separates a flat curry from a dhaba-style one.
Step 5: Make the Coconut Gravy
Pour in the coconut milk and desiccated coconut, then the water. Stir well, scraping up the browned bits from the bottom — that is pure flavor. Bring to a gentle simmer (never a rolling boil, or the coconut milk splits), taste, and adjust the salt. Simmer 5 minutes so the flavors marry.
Step 6: Add the Fish — Gently
Slide the fish chunks into the simmering gravy one by one and spoon gravy over each piece. Cover, reduce to low heat, and cook 8–10 minutes. Do not stir with a spoon — shake the pan gently instead. The fish is done when it flakes at the thickest part but still holds its shape. Check at 8 minutes; overcooked fish turns rubbery fast.
Step 7: Finish and Rest
Turn off the heat. Stir in the lemon juice and half the coriander. Cover and rest 5 minutes — this lets the fish absorb the gravy and firm up. Garnish with the remaining coriander and serve hot.

Pro Tips for Perfect Keto Fish Curry
Full-fat coconut milk only. Light coconut milk is mostly water and often has added starches. Shake the can hard; if the cream has separated, scoop it all in and whisk.
Pick a firm fish. Surmai holds its shape beautifully; rohu and basa are excellent everyday options. Avoid delicate fish like sole, which falls apart in gravy. Thaw frozen fish completely and pat very dry.
Never boil coconut milk hard. A rolling boil splits the emulsion into an oily, grainy gravy. Gentle simmer, always — if it splits slightly, whisk vigorously off the heat to bring it back.
Taste before the fish goes in. Once the fish is added you cannot fix the salt without overcooking it. The gravy should taste slightly over-salted on its own; the fish mellows it out.
Honest Nutrition (Per Serving, Approximate)
One serving (about ¼ of the recipe with gravy) gives roughly 380–420 calories, 28–30 g protein, 26–28 g fat, and 4–5 g net carbs. These are honest estimates from standard ingredient values, not lab-tested numbers — coconut milk brands vary, so check your can’s label. If you have diabetes or any medical condition, talk to your doctor or dietitian before making big dietary changes.
Variations to Try
Goan-Style: Add 1 teaspoon tamarind paste with the coconut milk and swap the coriander powder for 1 teaspoon garam masala. Tamarind adds about 1–2 g carbs per serving — still keto-friendly, just count it.
Shrimp Version: Replace the fish with 600 g cleaned jumbo shrimp (jheenga). They need only 4–5 minutes — add at the very end and pull the pan off the heat as soon as they turn pink.
Paneer for Vegetarians: Swap the fish for 400 g paneer cubes, lightly pan-fried first, and simmer just 5 minutes. Pair it with our keto palak paneer for a full low-carb desi spread.
Extra Spicy: Double the red chili powder and add ½ teaspoon coarsely crushed black pepper with the ground spices. Cool the fire with cucumber raita on the side.
How to Serve on Keto
This curry deserves cauliflower rice: grate a head of cauliflower, sauté 5 minutes in a teaspoon of coconut oil with salt, and you have a gravy-soaking base for barely 3 g net carbs per cup. A simple kachumber salad adds crunch. For family members not doing keto, plain zeera rice is the classic pairing. For more low-carb desi mains, try our keto butter chicken and keto beef keema.
FAQs
Which fish is best for this curry?
Surmai (king fish) is the gold standard — firm, meaty, never falls apart. Rohu is the everyday Pakistani favorite and works perfectly; basa is mild and budget-friendly. Cut it into chunky 2-inch pieces; small pieces disintegrate.
Is coconut milk actually keto?
Full-fat canned coconut milk is naturally low in carbs — about 2–3 g net carbs per 100 ml — and high in fats, which fits keto macros well. Read the label: some brands add sugars or starches. The ingredient list should basically read: coconut, water.
Can I meal-prep this curry?
Yes, with one trick: cook the gravy fully and refrigerate up to 3 days — but add the fish fresh when reheating. Reheated fish turns rubbery quickly. Portion the gravy into containers and cook fresh fish in it each evening; it takes 12 minutes.
Can I freeze it?
Freeze the gravy only, up to a month — cooked fish turns mushy on thawing. Thaw overnight in the fridge, bring to a gentle simmer, then add fresh fish.
Final Thoughts
Keto does not mean giving up the food you grew up with — it means cooking it smarter. This coconut fish curry is proof: same garam masalay, same ghar-wala taste, just a gravy built on coconut instead of shortcuts. Make it once and it earns a permanent spot in your weeknight rotation. Aur agar ghar walay aakhri piece ke liye larain, to samajh lo recipe kamyab ho gayi.