Where I grew up in Pakistan, fish curry was Friday food — my mother would buy fresh fish from the market in the morning and have the whole house smelling incredible by noon. I grew up watching her make it, and for years I assumed it was complicated. It isn't. This recipe uses an onion-yogurt base that comes together in a single pan, and the spice list is short enough that you probably have most of it already.
What makes this version mine is the yogurt in the base. A lot of fish curry recipes go straight to tomato or tamarind, but the yogurt gives the gravy a subtle tang and a creamy body without being heavy. The other thing that matters here is cooking the masala long enough — and I mean long enough. I rushed it the first few times and ended up with a curry that tasted vaguely of raw onion and I couldn't figure out why. Now I let it go the full hour, and the difference is obvious.
I use red snapper for this because it's what I can find at my local store and it holds together well in the gravy. My husband eats it with rice, every single time. Saad will eat it with naan if I make it fresh, which I try to do on weekends. If you want another South Asian recipe to pair with a dinner spread, my Shami Kebab recipe works really well alongside this as a starter.
One thing to set your expectations on: this is not a quick weeknight recipe. The masala needs close to an hour and a half of cooking time before the fish even goes in. Plan for it on a weekend, or start it early. The actual hands-on time is maybe 30 minutes — the rest is just the stove doing its thing while you do yours.

Why You'll Love This Recipe
- The masala base is forgiving: This onion-yogurt gravy is one of those bases that works even if you're slightly off on measurements. I've made it with two onions, I've made it with four — it adjusts. The yogurt smooths out any sharpness, and the fenugreek seeds add a background flavor that makes the whole thing taste like it took more effort than it did.
- You can use whatever firm fish you have: Red snapper is my go-to, but mahi mahi, cod, basa, tilapia, and mackerel all work here. The rule is firm flesh — fish that can sit in hot gravy for 10 minutes without completely falling apart. I avoid delicate fish like sole or flounder for this reason.
- It's genuinely flexible on heat level: The base recipe is moderate — present but not aggressive. If you want more heat, add another green chili to the blender. If you're cooking for kids or people who run from spice, reduce the red chili powder by half. I usually make a medium version and put a small bowl of green chutney on the table for whoever wants more heat.
- It serves well with almost anything: Rice is the obvious pairing — white basmati is traditional and it soaks up the gravy beautifully. But roti, paratha, and naan all work. On nights when I have neither, I've served it with plain flatbread from the store and it was still good. If you want a completely different direction, try it alongside a simple green salad dressed with vinegar and it somehow works.
- The ingredient list is short: Twelve ingredients including the fish. No obscure spice blends, no specialty items you'll buy once and never use again. Fenugreek seeds (methi dana) are the one thing you might not already have — you can find them in the international aisle at many grocery stores, or online. A small bag lasts a very long time since you only use a pinch per batch.
A Note on Buying Fresh Fish
If you don't buy fish often, here's what I look for at the counter. The eyes should be clear and bright — cloudy eyes mean the fish has been sitting too long. The skin should look moist and slightly shiny, not dull or dried out. Press the flesh gently with your finger; it should spring back. If it stays dented, it's not fresh. And the inside should be pink and moist, not grey.
Ask your fish counter to cut it into thick slices — roughly 1 to 1½ inch pieces. Thin pieces will fall apart in the curry. Most fish counters at Walmart, Costco, or any grocery store will do this for you at no extra charge if you ask.
Ingredients

- About 1 lb (500g) red snapper, cut into thick pieces (mahi mahi, cod, basa, or tilapia also work)
- 2–3 medium yellow onions, roughly chopped
- 3 garlic cloves
- 2–3 green chilies (serrano or Thai green chilies work)
- ¾ teaspoon white cumin seeds (zeera)
- 4–5 whole black peppercorns
- ½ cup + 1¼ cups water, divided
- ¼ cup neutral oil (vegetable or canola)
- ¼ teaspoon fenugreek seeds (methi dana — find these in the international aisle or online)
- ¼ teaspoon turmeric powder
- ¾ teaspoon red chili powder (use Kashmiri for less heat, regular for more)
- 1 teaspoon salt, or to taste
- ⅔ cup (150g) plain whole milk yogurt, whisked smooth
Directions


- Prep the fish: Rinse the fish pieces and rub them with a little lemon juice and a pinch of salt. Let them sit for 10 minutes, then rinse again with cold water. This step removes any strong fishy smell and I never skip it.
- Make the onion paste: Add the chopped onions, green chilies, garlic, whole peppercorns, cumin seeds, and ½ cup water to a blender. Blend until you have a smooth paste. It won't be perfectly smooth — some texture is fine.
- Bloom the fenugreek: Heat the oil in a large, heavy pan over medium heat. Add the fenugreek seeds and let them sizzle and pop for about 30–45 seconds until they darken slightly and release their aroma. Don't walk away here — fenugreek burns fast and turns bitter if you leave it.
- Cook the onion paste: Add the blended onion paste to the pan and sauté for about a minute, stirring constantly. Then add the turmeric, red chili powder, and salt, plus 1 cup of water. Stir to combine, cover the pan, and cook on medium-low for 1 full hour, stirring occasionally.
- Fry the masala: After an hour, the water should have mostly cooked off. Now uncover the pan and increase the heat to medium. Fry the paste, stirring frequently, until you can clearly see the oil separating from the masala on the sides of the pan. This takes 15–20 minutes and it's the step that makes or breaks the curry — if you skip it, the raw-onion smell stays in the dish.


- Add the yogurt: Reduce heat to low and stir in the whisked yogurt. Simmer for 10 minutes, stirring occasionally, until the oil separates again and the masala looks smooth and cohesive. Make sure your yogurt is at room temperature before adding it — cold yogurt can split in a hot pan.
- Cook the fish: Add the fish pieces to the masala. Cook on high heat for 1 minute without touching them, then gently flip each piece. Add ¼ cup water, reduce heat to low, cover, and cook for 10 minutes. Don't stir — you'll break the fish apart. Just let it do its thing.
- Check and serve: After 10 minutes the fish should be cooked through and tender. Turn off the heat. Taste for salt and serve immediately with basmati rice or warm roti.








Tips for Success
- Don't rush the masala: I know an hour sounds like a lot, but that long covered cook is what breaks down the onions completely and mellows the raw garlic. When I've tried cutting it to 40 minutes, the curry had an edge to it I couldn't fix. The 15–20 minute fry at the end matters too — keep going until you genuinely see oil pooling at the sides of the pan, not just a little sheen.
- Whisk the yogurt before it goes in: If you add lumpy yogurt to a hot pan, you'll get grainy curry. I whisk mine in a small bowl until it's completely smooth, and I let it sit on the counter for 10–15 minutes so it's not ice cold. Cold yogurt hitting a very hot pan can split. Room temperature yogurt behaves.
- Ask for thick cuts at the fish counter: Thin fish pieces — anything under an inch — will fall apart before they're fully cooked through. I always ask for pieces around 1 to 1½ inches thick. If you're cutting at home, err on the thicker side. You can always cook a thick piece longer, but you can't put a dissolved piece back together.
- Don't stir the fish once it's in: This is where I went wrong early on. I'd keep checking and nudging the pieces, and they'd break apart. Once the fish goes in, flip it once gently after the first minute, then leave it completely alone for the remaining 10 minutes on low heat. The lid does the work.
- Use a pan wide enough that the fish isn't stacked: If you're cooking more than about a pound of fish, use a wide skillet or do it in two batches. Stacked pieces steam unevenly and the ones on top end up undercooked while the bottom ones overcook. A regular 12-inch skillet handles about 1 lb easily. If you don't have a food processor for the paste, chopping the onions very finely by hand and crushing the garlic works — it takes an extra 5 minutes but the result is the same.
Variations
- Coconut milk version: Replace the water you add with the yogurt step with ½ cup of coconut milk instead. It makes the gravy noticeably creamier and adds a mild sweetness that softens the spice. I've made this version when I was out of yogurt and it's genuinely good — different, but good. If you go this route, serve it with rice rather than roti.
- Tamarind tang: Add 1–2 teaspoons of tamarind paste in the last 5 minutes of cooking, after the fish is done. This is common in many Indian coastal versions of fish curry and it adds a sour depth that yogurt alone doesn't give. Start with 1 teaspoon, taste, and add more if you want it sharper.
- Mustard oil base: If you can find mustard oil at an Indian or Pakistani grocery store, use it in place of neutral oil. It has an earthy, slightly pungent flavor that changes the whole character of the curry — more like what you'd get in a Bengali-style fish preparation. Heat the mustard oil until it just starts to smoke, then reduce the heat before adding the fenugreek.
- Dry masala version: If you prefer less gravy, just reduce the water in the final fish-cooking step from ¼ cup to 2 tablespoons. You'll end up with a thicker, drier coating on the fish rather than a pourable curry. This version is good served with paratha and a side of plain yogurt raita.
Serving and Storage
Serving
In Pakistan this is almost always served with plain white basmati rice — the rice soaks up the gravy and it works. My husband specifically requests rice every time. If you want something more filling, paratha or homemade roti are good alternatives. I'll also sometimes serve a small side of sliced raw onions, cucumber, and green chilies on the plate the way my mother used to — it adds freshness and cuts through the richness. If you're cooking a bigger meal and want another protein starter on the table, my Shami Kebab pairs well with this.
Storage
Store leftovers in an airtight container in the refrigerator for up to 2–3 days. The gravy actually thickens overnight and the flavors deepen, so day-two fish curry can be even better. Reheat gently on the stovetop over low heat, adding a splash of water to loosen the gravy. Avoid the microwave if you can — it tends to make the fish rubbery. You can also freeze this in an airtight container for up to 2 weeks; thaw in the fridge overnight before reheating.

Frequently Asked Questions
Which fish works best for this curry?
Any firm-fleshed fish is what you want. Red snapper is what I use most often because it holds together and has a mild flavor that doesn't fight the spices. Mahi mahi, cod, basa, tilapia, and mackerel all work well. Avoid delicate fish like sole or flounder — they'll fall apart in the gravy before they finish cooking.
Can I make the masala base ahead of time?
Yes, and honestly this is what I do when I want fish curry on a weeknight without the wait. Make the masala through the yogurt step, let it cool completely, and refrigerate it for up to 2 days. When you're ready to eat, reheat the masala in the pan over medium heat, then add the fresh fish pieces and finish cooking from that point. Takes about 15 minutes once the masala is hot.
What can I substitute for fenugreek seeds (methi dana)?
If you genuinely can't find fenugreek seeds, you can leave them out — the curry will still be good, just missing that specific slightly bitter background note. Some people use a tiny pinch of dried fenugreek leaves (kasuri methi) instead, which you can find in most Indian spice sections. Don't substitute more than a pinch or it gets bitter. If you have neither, just skip it and carry on.
Why does my fish curry taste like raw onion?
This was my exact problem the first few times I made this. The masala didn't cook long enough, and specifically the frying step after the long covered cook wasn't done properly. You need to see the oil physically separating and pooling at the sides of the pan — not just a little sheen on the surface. That's how you know the onion and garlic are fully cooked out. If in doubt, keep frying for another 5 minutes.
Can I use frozen fish?
You can, but thaw it completely in the fridge overnight first and pat it dry with paper towels before it goes into the curry. Frozen fish releases a lot of water as it thaws, and if that water goes into the pan it dilutes the masala and makes the gravy watery. Pat it as dry as you can and it'll behave much more like fresh fish.

Fish Curry Recipe Red Snapper (Heera) Fish Curry Masala
Equipment
- 1 Large pan
- Knife and chopping board:
- Measuring Spoons
- 1 Blender or grinder
Ingredients
- 500 grams Red snapper fish cut into thick pieces
- 2-3 Onions
- 3 Garlic cloves
- 2-3 Green chilies
- ¾ teaspoon White cumin or zeera
- 4-5 Black peppercorn whole
- 150 grams Yogurt whisk to remove any lumps
- ¼ cup Oil
- ¼ teaspoon Turmeric powder
- ¾ teaspoon Red chili powder
- 1 teaspoon Salt or to taste
- ¼ teaspoon Methi dana or fenugreek seeds
Instructions
- In a blender jar, add green chilies, onions, garlic, black peppercorn, cumin seeds or zeera, and ½ cup water. Blend these together.
- Next, in a pan add the oil and methi daana or fenugreek seeds. Let the seeds pop and fizz as the oil heats up.
- When the methi daana starts to release an aroma and changes color, add the prepared onion paste.
- Saute the onion paste for a minute and then add the spices: turmeric, salt, and red chili powder, along with a cup of water.
- Cover the pan and let it cook for one hour. Occasionally give it a stir.
- Approximately an hour later, the water should have reduced,and the oil should have started separating from the masala's sides. Now, it is time to saute the paste till you see the oil separating from the masala on the sides of the pan. This step will take about 15-20 minutes. This step is crucial to eliminate the odor of raw onion and garlic from the fish curry.
- Add yogurt and let it simmer for 10 more minutes until the oil has separated and the masala is smooth.
- Add the fish and cook on high flame for 1 minute. Then, flip it over and add ¼ cups of water. Let it cook on low flame for 10 minutes.
- After10 minutes, the fish will be tender. Your spicy Fish Curry is ready! Serve it with boiled rice or roti and enjoy!





Comments
No Comments