
A masterwork of Swahili Coast cooking — firm white fish fillets simmered in a coconut milk broth that is at once deeply aromatic and bracingly fresh, built on layers of fried onion, garlic, freshly ground spices, and the tart, fruity complexity of tamarind that keeps the richness of the coconut milk perfectly in check. The turmeric gives the broth a golden, sun-drenched colour while the whole spices — cinnamon, clove, cardamom — perfume every mouthful with the legacy of centuries of spice trade. Served over wali wa nazi with the ocean's breeze or in your imagination of it, this is the dish that defines Zanzibari coastal hospitality.
900 g firm white fish fillets (snapper, kingfish, or grouper)
skinless, cut into 6-7cm portions — patted completely dry
700 ml full-fat coconut milk
divided — 150ml thick cream from top of can for frying, 550ml for the broth
3 whole ripe tomatoes
finely diced
2 whole yellow onion
finely diced
6 cloves garlic cloves
minced to a paste
25 g fresh ginger root
peeled and grated
8 g ground turmeric
6 g ground cumin
8 g ground coriander
1 stick cinnamon stick
5 pods green cardamom pods
cracked
3 whole whole cloves
35 g tamarind paste (concentrated)
dissolved in 80ml warm water and strained through a fine sieve
2 whole fresh green chili
split lengthways
45 ml coconut oil
18 g salt
divided — 8g for marinating fish, 10g for curry
25 g fresh coriander
stems chopped for curry, leaves for garnish
400 g basmati rice
washed until clear and soaked 20 minutes
400 ml full-fat coconut milk for rice
280 ml water for rice
2 whole lime
one squeezed for curry finish, one cut into wedges for serving
12 leaves fresh curry leaves(optional)
Marinate the Fish(15m)
Season the fish portions with 8g salt, half the ground turmeric (4g), and a squeeze of lime juice. Toss gently to coat without breaking the fillets. Set aside to marinate for 15 minutes. The turmeric provides an anti-microbial function as well as colour — do not skip this step. The acid from lime will begin to firm the protein slightly, which prevents the fish from falling apart during cooking.
Prepare the Spice Blend(5m)
Combine the remaining ground turmeric, ground cumin, and ground coriander in a small bowl. Toast the cinnamon stick, cracked cardamom pods, and whole cloves in a dry pan for 60 seconds until fragrant. Reserve the toasted whole spices separately.
Prepare the Coconut Cream for Frying(3m)
Carefully open the chilled coconut milk cans without shaking and scoop the thick cream from the top into a small bowl — approximately 150ml. Reserve the remaining thinner milk for the curry broth. This separation is essential for the Zanzibari technique of beginning the curry by frying the aromatics in rendered coconut cream rather than added oil alone.
Fry the Base Aromatics(19m)
Heat coconut oil in a wide, shallow pan with a lid over medium-high heat. Add the thick coconut cream and stir continuously for 4-5 minutes until the cream separates and the oil renders free, becoming slightly golden. Add the toasted whole spices and fresh curry leaves if using — they will crackle immediately. Add the diced onions and fry in the spiced coconut oil for 12 minutes, stirring regularly, until deep golden. Add garlic paste, grated ginger, and chopped coriander stems. Stir for 2 minutes until fragrant.
Build the Curry Sauce(25m)
Add the ground spice blend to the fried onion base and stir constantly for 90 seconds to bloom in the hot fat. Add the diced tomatoes and split green chilies. Cook over medium-high heat for 8-10 minutes, crushing the tomatoes and stirring frequently, until a thick paste forms and the oil separates visibly around the edges. Pour in the reserved thin coconut milk and the strained tamarind water. Season with 10g salt. Stir together and bring to a gentle simmer. Cook the sauce uncovered for 8 minutes until it reduces slightly and the flavours consolidate — taste and adjust salt, tamarind, and chili at this point.
Poach the Fish(12m)
Gently lower the marinated fish portions into the simmering curry sauce. Do not stir after adding the fish — instead, gently spoon the sauce over the top of each fillet using a ladle. Reduce heat to a very gentle simmer. Cover and cook for 8-12 minutes depending on thickness — 2.5cm fillets will need 8 minutes, thicker cuts 11-12 minutes. The fish is ready when it flakes in large, clean flakes when pressed with a fork and is opaque throughout. Do not overcook; overcooked fish disintegrates into the sauce and loses its texture. Squeeze over the juice of one lime at the end of cooking.
Cook the Wali wa Nazi(30m)
In a medium saucepan, combine the drained soaked rice with 400ml coconut milk and 280ml water plus a generous pinch of salt. Bring to a boil uncovered over high heat. Immediately reduce to the lowest heat, cover tightly, and cook for 15 minutes without lifting the lid. Remove from heat and steam covered for a further 10 minutes. The rice should be fluffy, separate, and carry a distinct, sweet coconut aroma.
Plate and Garnish(2m)
Mould the wali wa nazi into a dome at one side of a wide, shallow bowl using a wetted cup or small bowl as a mould. Carefully transfer the fish portions alongside the rice using a wide flat spatula — handle gently to keep the fillets intact. Ladle the golden coconut curry sauce over and around both the fish and the rice generously. Remove and discard the cinnamon stick, cardamom pods, and cloves if visible. Scatter fresh coriander leaves over the entire plate. Place a lime wedge at the side. Serve immediately.