Sri Lankan Fish Curry with Coconut Milk (Malu Kirata)
Firm fish simmered in a fragrant coconut milk gravy with roasted curry powder, goraka, curry leaves, and fenugreek — the creamy coastal curry Sri Lanka is built on.
Prep
20 min
Cook
25 min
Total
45 min
Serves
4
Ingredients
Fish
- 600g firm fish fillets or steaks — kingfish (seer), tuna, mackerel, or swordfish — cut into large pieces about 5cm across
- 1/2 tsp turmeric
- 1/2 tsp salt
- 1 tbsp lime juice
Curry base
- 2 tbsp coconut oil (or vegetable oil)
- 1 medium red onion, finely sliced
- 3 cloves garlic, finely sliced
- 2cm piece ginger, finely sliced into matchsticks
- 2 sprigs fresh curry leaves (about 20 leaves)
- 2 green chillies, slit lengthwise
- 1 small piece pandan leaf, about 5cm (optional but traditional)
- 5cm piece cinnamon stick
- 1/4 tsp fenugreek seeds
- 1/4 tsp mustard seeds
Spices
- 2 tbsp Sri Lankan roasted curry powder
- 1 tsp chilli powder (adjust to taste)
- 1/2 tsp turmeric
- 1/2 tsp black pepper, freshly ground
Liquid
- 400ml coconut milk (one full tin — do not use light)
- 100ml thin coconut milk or water
- 1 piece goraka (garcinia cambogia), soaked in warm water for 10 minutes — or 1 tbsp tamarind paste
- 1 medium tomato, quartered
- Salt to taste
Method
- 1
Rub the fish pieces with turmeric, salt, and lime juice. Set aside for 10 minutes while you prepare the base. This firms up the flesh and removes any raw smell.
- 2
Heat coconut oil in a wide, shallow clay pot or heavy-bottomed pan over medium heat. Add the mustard seeds and fenugreek seeds — let them crackle for 10 seconds.
- 3
Add the cinnamon stick, curry leaves, and pandan leaf (if using). They will spit and pop. Stir for 15 seconds until fragrant.
- 4
Add the sliced onion and cook for 4–5 minutes until softened and translucent. Add the garlic and ginger, cook for another minute.
- 5
Lower the heat. Add the roasted curry powder, chilli powder, turmeric, and black pepper. Stir into the onions for 1 minute — the spices should darken slightly and the kitchen should smell intensely aromatic. Add a splash of water if the spices catch on the bottom.
- 6
Add the tomato quarters, the soaked goraka (or tamarind paste), and the thin coconut milk or water. Stir well, bring to a gentle simmer, and cook for 3–4 minutes until the tomato starts to soften.
- 7
Pour in the full-fat coconut milk. Stir gently to combine. Bring to a bare simmer — do not let it boil hard or the coconut milk will split.
- 8
Carefully place the fish pieces into the curry in a single layer. Spoon some of the sauce over the top of each piece. Add the slit green chillies.
- 9
Cover and cook on low heat for 10–12 minutes. Do not stir — the fish will break apart. Gently shake the pan side to side once or twice to keep things moving. The fish is done when it flakes easily at the thickest point and the sauce has thickened slightly.
- 10
Taste the sauce and adjust salt and sourness. If it needs more tang, squeeze in a little extra lime juice. Remove from heat, let it sit covered for 5 minutes — the curry improves as it rests and the flavours marry.
- 11
Serve in the cooking pot with steamed white rice, a spoonful of pol sambol, and a simple dhal on the side.
The Coastal Curry
Sri Lanka is an island, and fish curry is its foundation. Walk into any home kitchen in Colombo, Galle, or Jaffna at lunchtime and you’ll find some version of this — fish simmered in a coconut milk gravy scented with curry leaves and roasted spices, served over a mound of rice with three or four other curries alongside.
There are two broad styles of Sri Lankan fish curry. Malu mirisata is the fiery, brothy version — heavy on chilli, no coconut milk, the gravy sharp and red. Malu kirata is this recipe — the word kirata refers to the milky coconut base. It’s gentler, richer, and more aromatic, with the heat tempered by coconut fat. Both are staples. This one is the version that travels best outside Sri Lanka because the coconut milk makes it approachable without sacrificing authenticity.
If you’ve tried our kottu roti, you’ve already tasted the thin coconut curry sauce served alongside — this fish curry uses the same principle of building flavour in coconut milk, but goes deeper with roasted spices and goraka.
Why Roasted Curry Powder Matters
Sri Lankan curry powder is not interchangeable with Indian garam masala or Pakistani curry powder. The defining difference is the roasting — whole spices are dry-roasted in a pan until they turn very dark, almost to the edge of burning, before grinding. This gives Sri Lankan food its distinctive smoky, earthy depth that tastes nothing like the brighter, more floral spice mixes used across the Palk Strait.
For this curry, you want the roasted version specifically. Unroasted (raw) curry powder is used for lighter dishes like white curries and dhal. Roasted curry powder is used for fish and meat — it stands up to the richness of coconut milk and the intensity of goraka.
If you don’t have it, make a quick version: dry-roast 2 tbsp coriander seeds, 1 tbsp cumin seeds, 1/2 tsp fennel seeds, 5cm cinnamon stick, 4 cloves, and 3 cardamom pods over medium heat, shaking constantly, until they’re noticeably dark and smoking. Cool completely. Grind fine and add 1/4 tsp fenugreek powder. This yields enough for one batch.
Goraka vs Tamarind
Goraka — dried garcinia cambogia fruit — is the traditional souring agent in Sri Lankan fish curries. It looks like shrivelled black petals and has a sour, slightly smoky flavour that tamarind doesn’t replicate. If you can find it at a Sri Lankan grocery, use it — soak a piece in warm water for 10 minutes, then drop it into the curry whole. You fish it out before serving, like a bay leaf.
Tamarind paste works as a substitute and is far more widely available. Use about a tablespoon. The result is slightly different — brighter and sharper — but still delicious. Some cooks use a squeeze of lime juice instead, adding it at the end. Each souring agent shifts the curry in a subtly different direction.
Choosing the Fish
The fish matters more here than the spices. You need a firm-fleshed variety that holds its shape during simmering — fish that falls apart turns the curry into a murky mess.
Best choices: kingfish (seer), tuna steaks, swordfish, Spanish mackerel, or any firm white fish with good flavour. In Sri Lanka, they use kelawalla (yellowfin tuna), thora (Spanish mackerel), or paraw (trevally).
Avoid: delicate fish like sole, tilapia, or basa. They disintegrate in the sauce. If you’ve made shorshe ilish, you know that hilsa holds its shape in a Bengali mustard curry — the same principle applies here. Choose fish with structural integrity.
Cut the fish into large pieces — about 5cm across. Smaller pieces overcook and break apart. You want each piece to hold its shape in the sauce so you can serve it looking like it belongs.
The Coconut Milk Rule
Full-fat coconut milk only. The tinned kind, shaken well before opening. Light coconut milk produces a thin, watery curry that lacks the body this dish needs. The fat in the coconut milk is doing work — it carries the roasted spice flavours, rounds out the sourness from the goraka, and coats the fish in a silky sauce.
The one thing you must not do is boil the coconut milk aggressively. Bring it to a bare simmer and keep it there. Hard boiling causes coconut milk to split — the fat separates from the liquid, and the sauce turns oily and grainy instead of smooth. A gentle bubble at the edges is all you want. Sri Lankan cooks often add the coconut milk in two stages — thin coconut milk first to build the sauce, thick coconut milk at the end for richness — but using a single tin and managing the heat achieves the same result.
Serving
The classic pairing is steamed white rice, and nothing else is strictly necessary. But if you want to build a proper Sri Lankan rice and curry spread, serve this alongside:
- Pol sambol — the rough coconut relish with chilli, lime, and red onion
- Parippu — a thin dhal curry with turmeric and coconut milk
- A green vegetable — stir-fried snake gourd, wing beans, or a simple cabbage mallum
A torn piece of godamba roti dragged through the coconut sauce is also excellent — the mild, flaky bread soaks up the curry without competing with it.
Variations
- Malu mirisata (spicy version): Drop the coconut milk entirely. Use more chilli powder, a paste of ground chillies and garlic, and a splash of water. The result is thinner, hotter, and more intense.
- Sardine or mackerel curry: Use tinned sardines or mackerel for a quick weeknight version. Add them to the sauce in the last 5 minutes — they’re already cooked and just need warming through.
- With vegetables: Add okra, drumstick (moringa), or small brinjal (aubergine) pieces to the curry base before adding the fish. They cook in the coconut milk and stretch the dish further.