The addition of coconut milk to fish curry is common across South Indian, Sri Lankan and other coastal cuisines. It brings richness and a creamy texture that pairs well with fish, but it’s not always necessary. This tomato-based fish curry skips coconut milk while still delivering bold, layered flavours.
I love coconut in many forms, but some weeknights call for something lighter. This spicy, tangy tomato curry is a great alternative: vibrant, relatively quick to make and full of aromatic spices. It does use a handful of spices, but the technique is straightforward.
Serve this curry with steamed basmati rice for a complete meal. The recipe takes under an hour from start to finish, and much of that time is passive while the sauce simmers and the flavours meld.

How to Make Fish Curry Without Coconut Milk
This recipe follows a classic Indian-inspired approach: start by toasting whole spices to release their aromatics. Toasting brings an extra depth that underpins the rest of the sauce.
Add mustard seeds, coriander seeds, cumin seeds and a pinch of fennel seeds to a large skillet set over medium heat. After about two minutes, you’ll notice the seeds begin to pop and move—this signals they’re ready for the next step.

Once the seeds are fragrant, add neutral oil and sliced red onion. Season the onion with salt and cook, stirring occasionally, until it softens and begins to brown at the edges—about 8–10 minutes. Browning the onion adds sweetness and complexity to the sauce.

Stir in minced garlic, grated ginger, chopped green chili and the finely chopped cilantro stems, plus a spoonful of tomato paste. Cook for a couple of minutes until fragrant and the tomato paste darkens slightly.
Next, add curry powder (I like hot madras for heat), ground cumin, ground coriander, ground cardamom, turmeric and a little cayenne pepper. Cook the spices briefly—about 30 seconds—to bloom their flavours in the warm oil.

Pour in a can of whole peeled tomatoes that you’ve crushed by hand, add vegetable stock (or chicken stock or water), tamarind puree, a spoonful of dark brown sugar and salt. Stir, bring to a gentle simmer and allow the sauce to cook for 15–20 minutes until it thickens and the flavours have melded.

Choose a firm, mild white fish so the sauce remains the star—cod, haddock, tilapia or similar work well. Cut the fish into bite-sized pieces (about 2-inch pieces) and season lightly with salt and pepper.
Gently nestle the fish into the simmering sauce, ensuring pieces are submerged. Simmer until the fish is opaque and flakes easily with a fork—typically 5–10 minutes depending on thickness. Avoid overcooking to keep the fish tender.
Finish by scattering fresh cilantro leaves over the curry and serve immediately with steamed basmati rice. The result is a filling, spicy and tangy fish curry that’s lighter than a coconut-milk version but equally satisfying.


Fish Curry without Coconut Milk
Ingredients
- ½ tsp black mustard seeds
- ½ tsp whole cumin seeds
- ½ tsp whole coriander seeds
- ¼ tsp whole fennel seeds
- ½ red onion thinly sliced
- 15 g (2 tbsp) ginger finely chopped
- 6 cloves garlic minced
- 1-2 green chilis finely chopped, de-seeded if desired
- 10 g (3 tbsp) cilantro stems finely chopped & leaves picked
- 1 tbsp tomato paste
- 1 tbsp hot madras curry powder
- ½ tsp ground cardamom
- ½ tsp ground coriander seed
- ½ tsp ground cumin
- ½ tsp ground turmeric
- ¼ tsp cayenne pepper
- 1 (400g/14oz) can whole peeled tomatoes crushed with hands
- 250 ml (1 cup) vegetable stock
- 1 tbsp tamarind paste
- 1 tsp dark brown sugar
- 500 g (1 lb) firm white fish such as cod, haddock or tilapia, cut into 5cm (2in) pieces
Instructions
-
Add the mustard seeds, cumin seeds, coriander seeds and fennel seeds to a large skillet and set over medium heat. Toast until very fragrant and the seeds begin to pop—about 2 minutes.
-
Add 2 tbsp neutral oil. Once shimmering, add the sliced onion and a generous pinch of salt. Cook, stirring occasionally, until the onion softens and begins to brown—8–10 minutes.
-
Stir in ginger, garlic, green chili, cilantro stems and tomato paste. Cook until fragrant and the tomato paste darkens—about 2 minutes. Add curry powder, cardamom, ground coriander, ground cumin, turmeric and cayenne. Stir and cook for 30 seconds to bloom the spices.
-
Pour in crushed tomatoes, then add vegetable stock, tamarind paste, brown sugar and ¼ tsp salt. Bring to a gentle simmer and cook, stirring occasionally, for 15 minutes until the sauce thickens.
-
Season fish with salt and pepper. Gently place into the simmering sauce so pieces are submerged. Simmer until fish flakes easily—5–10 minutes depending on thickness. Serve topped with cilantro leaves.
Video
Nutrition
This easy fish curry doesn’t use coconut milk. It’s a one-pan dinner that’s hearty, flavourful and perfect for weeknight meals.
Looking for a great fish curry? Have questions or tips? Leave a comment below.
