Pakistani Fish Curry: A Practical Step-by-Step Recipe

Updated November 4, 2026

Total time
53 min
prep 20 min · cook 33 min
Serves
4
portions as written
Safe temperature (USDA)
145°F / 63°C
check the thickest piece

Jump to recipe

Pakistani Fish Curry: A Practical Step-by-Step Recipe

Pakistani fish curry is firm fish simmered in a warmly spiced onion, tomato, and yogurt sauce, usually served hot with rice or roti. Home-style versions vary by region and household: some are tomato-forward and thin, while others use more yogurt or a thicker masala. This recipe makes a medium-spiced curry with a spoonable sauce and tender fish, without a long marinating step.

What You’ll Need

  • 1½ lb (680 g) firm white fish, such as cod, haddock, snapper, tilapia, or kingfish, cut into 1½-inch (4 cm) pieces. Skinless or skin-on is fine; remove any pin bones.
  • 3 tbsp (45 ml) neutral oil, such as canola or sunflower oil.
  • 2 cups (300 g) finely chopped yellow onion, about 1 large onion.
  • 1 tbsp (15 g) finely grated fresh ginger and 1 tbsp (15 g) minced garlic.
  • 1 green chili, about 5 g, finely sliced. Use half for a milder curry or remove the seeds.
  • 1½ cups (270 g) chopped ripe tomatoes, about 2 medium tomatoes, or canned chopped tomatoes drained of excess juice.
  • ½ cup (120 g) plain full-fat yogurt, stirred smooth and brought close to room temperature.
  • 1 cup (240 ml) water, plus up to ½ cup (120 ml) more if needed to loosen the sauce.
  • 1 tsp (2 g) cumin seeds; 2 tsp (4 g) ground coriander; ½ tsp (1.5 g) ground turmeric; 1 tsp (2 g) Kashmiri chili powder or mild paprika; ½ tsp (1 g) garam masala; and 1 tsp (6 g) fine salt, or to taste.
  • ½ cup (15 g) loosely packed chopped fresh cilantro, plus 1 tbsp (15 ml) lemon juice to finish.

Use a wide, heavy skillet or shallow saucepan with a lid, a cutting board, a sharp knife, and a spoon or spatula. A thin, delicate fish can break apart during stirring; choose a firm fillet or steaks if possible. Kashmiri chili powder gives color and gentle heat. If you cannot find it, mild paprika is a useful substitute, though it will taste less earthy. If garam masala is unavailable, omit it rather than adding a large amount of another spice; the curry will still be flavorful, but less aromatic.

Step-by-Step

  1. Prepare the fish and aromatics, 20 minutes. Keep the fish refrigerated until you are ready to handle it. Pat it dry with paper towels, check for pin bones, then cut it into evenly sized pieces. Do not rinse raw fish, because splashes can spread raw juices around the sink. Wash your hands, knife, and board after handling it. Chop the onion and tomatoes, grate the ginger, mince the garlic, slice the chili, and measure the spices. Keep the fish separate from the vegetables and seasonings until it goes into the pan.
  2. Build the onion base, 8 minutes. Heat the oil in the skillet over medium heat. Add the cumin seeds; cook for about 20 seconds, just until they smell fragrant and begin to sizzle. Add the onion and cook for about 7 minutes, stirring regularly, until soft and golden at the edges. Do not rush to deep brown or burn it: dark, scorched onion can make the sauce bitter. If the onion starts sticking before it softens, lower the heat and add 1 tbsp (15 ml) water.
  3. Add the ginger, garlic, chili, and dry spices, 1½ minutes. Stir in the ginger, garlic, and green chili; cook for 45 seconds, moving the mixture around so the garlic does not catch. Add ground coriander, turmeric, chili powder, and salt. Stir for another 30 seconds. The spices should smell toasted, not smoky. If they begin sticking, add a splash of water before they scorch.
  4. Cook the tomatoes into a masala, 8 minutes. Add the chopped tomatoes and stir, scraping the bottom of the pan. Cook uncovered for about 8 minutes, stirring every minute or two, until the tomatoes collapse and the mixture thickens. Look for a cohesive sauce with little visible watery liquid; small beads of oil may appear at the edges. If using especially juicy tomatoes, allow another minute or two rather than adding the yogurt to a watery base.
  5. Stir in the yogurt without curdling, 2 minutes. Turn the heat to low. Add the room-temperature yogurt a spoonful at a time, stirring continuously until each addition disappears into the masala. Keep the heat low and do not let the sauce boil hard. Once smooth, pour in 1 cup (240 ml) water and stir. Bring the sauce to a gentle simmer, then cook it for 5 minutes so the flavors come together. It should be loose enough to surround the fish but not so thin that it looks like soup.
  6. Simmer the fish gently, about 8 minutes. Lay the fish pieces in the sauce in a single layer, spoon a little sauce over the top, and cover the pan. Keep the sauce at a gentle simmer; avoid vigorous bubbling and repeated stirring. Cook for about 5 to 8 minutes, depending on the thickness of the pieces. Check the thickest piece with a food thermometer: USDA FSIS guidance sets the safe minimum internal temperature for fish at 145°F (63°C). The flesh should also look opaque and separate easily into flakes. If it has not reached temperature, cover and cook for another minute before checking again.
  7. Finish and serve, 30 seconds. Turn off the heat. Sprinkle in the garam masala and cilantro, then add the lemon juice. Taste the sauce and adjust the salt or lemon in small amounts. Let the curry sit for 2 minutes so the fish settles into the sauce, then serve carefully with steamed basmati rice, plain rice, roti, or naan. Lift the fish with a broad spoon to keep the pieces intact.

Common Mistakes

Cooking the fish too long: Fish continues to firm up in hot sauce after the burner is off. Start checking thinner pieces at about 5 minutes, and use the thermometer rather than assuming every fillet needs the same time. Cut pieces to a similar size so they finish together.

Boiling the yogurt: A hard boil can make yogurt separate into grainy bits. Bring it closer to room temperature, lower the heat, and stir it in gradually. Full-fat plain yogurt is generally more forgiving than low-fat yogurt, which may separate more readily.

Adding fish before the masala is ready: The fish can overcook while raw tomatoes and onions finish softening. Cook the tomato mixture until thick first, then add water and simmer the sauce before laying in the fish.

Stirring aggressively: Fish pieces can flake apart or crumble, especially once cooked. Use a wide pan, arrange the pieces in one layer, and spoon sauce over them instead of stirring the pan repeatedly.

Using too much water: A thin sauce may taste diluted and fail to cling to the fish. Begin with the measured cup, then add extra water only if the sauce becomes too thick. Reduce a watery sauce briefly before adding the fish, not after the fish is already cooked.

Tips

Choose fish that is fresh-smelling and firm, and ask the fish counter to remove bones if you are buying steaks. Cod, snapper, haddock, tilapia, and kingfish work well, but cooking time varies with thickness. Bone-in fish steaks can add flavor and are used in some home-style versions; handle them gently and take care of the bones when serving.

Adjust the heat with the chili rather than changing every spice. For mild curry, use half a small green chili and mild paprika in place of hotter chili powder. For more heat, add another sliced chili or increase the chili powder by ¼ tsp (about 0.5 g), then taste before adding more. The amount of salt in the fish itself is usually minimal, so season the sauce in stages.

If your tomatoes are out of season and taste bland, add an extra teaspoon (5 ml) of lemon juice at the end, not more chili. If you want a thicker, more concentrated sauce, let the tomato masala cook an extra few minutes before adding water. For a looser curry suited to rice, stir in warm water 1 tbsp (15 ml) at a time after the fish is cooked, lifting rather than stirring the pieces.

Serve the curry as soon as it is ready, alongside rice or roti and a simple cucumber salad or sliced onion. If serving guests, keep the fish pieces fairly large; they are easier to lift from the sauce than small cubes. Put any extra chili or lemon on the table so diners can adjust their own portions.

Troubleshooting

The sauce split after adding yogurt: Take the pan off the heat and whisk or stir the sauce gently until it comes together as much as possible. If it remains grainy, add 1 tbsp (15 ml) warm water and stir over very low heat. Avoid boiling it again. It may not become perfectly smooth, but it will still be usable.

The curry tastes raw or sharply acidic: If the fish is not yet in the pan, simmer the tomato masala for a few more minutes to soften the tomatoes and mellow their sharpness. If the fish is already cooked, do not simmer it for a long time; balance the sauce with a small pinch of salt or a spoonful of yogurt stirred in off the heat.

The sauce is too spicy: Stir in a little plain yogurt or warm water, then taste again. Serve with extra rice or roti to balance the heat. Do not add lemon as the only fix; acidity can make the chili taste brighter rather than milder.

The fish is still translucent at the center: Cover the pan and continue cooking at a gentle simmer for 1 minute, then check the thickest piece again with a thermometer. If some pieces are thinner, remove those that have reached 145°F (63°C) and keep them warm while the thicker pieces finish.

The fish fell apart: The curry is still fine to eat if it has been cooked safely. Serve it as a more rustic, flaked curry with a spoon rather than trying to lift the pieces. Next time, use firmer fish, larger pieces, and less stirring, and add the fish only after the sauce is fully simmering.

Frequently Asked Questions

Can I use frozen fish? Yes. Thaw it in the refrigerator, then pat it thoroughly dry before cutting and adding it. Excess water on the fish can thin the sauce and make the curry harder to brown or simmer evenly. Do not thaw fish on the counter.

Can I make this curry without yogurt? Yes. Leave it out and use the full cup of water, adding more only if needed. The sauce will be more tomato-forward and less creamy. You can also stir in a few tablespoons of coconut milk, but that gives the curry a different flavor from this Pakistani-style version.

Can I prepare the curry ahead? You can make the onion-tomato sauce up to a day ahead, refrigerate it promptly, and reheat it to a simmer before adding the fish. Cooking the fish just before serving gives it the best texture. Do not leave the finished curry at room temperature for more than 2 hours.

How should I store and reheat leftovers? Refrigerate leftovers within 2 hours in a covered, shallow container. Cooked fish curry keeps for 3 to 4 days in the refrigerator. Reheat gently until the center reaches 165°F (74°C), checking with a food thermometer; avoid repeated reheating because the fish can become dry and break apart.

Can I use salmon or another oily fish? Yes. Salmon, mackerel, or another oily fish can be used, though the flavor will be richer and more pronounced than with mild white fish. Cut it into even pieces and check for doneness with a thermometer; the same 145°F (63°C) safe minimum applies. Because oily fish may release more fat, skim excess oil from the sauce if you prefer.

Related

More recipes to cook

Safety notes: safe minimum internal temperatures from USDA FSIS; raw and undercooked fish guidance from the U.S. FDA. Food safety notes

Spotted an error? Tell us and we will correct it (corrections policy).