A signature Malaysian rice dish from the Penang Nasi Kandar tradition: long-grain basmati rice steamed with chicken that has been simmered in a richly spiced coconut-tomato curry gravy, then layered with fried shallots and herbs. The defining feature is the lavish pour of dark, fiery curry over the rice so every grain glistens with sauce.
Nutrition Facts
Per serving (estimated)
- 720 kcalCalories
- 32 gFat
- 14 gSaturated Fat
- 65 gCarbs
- 5 gFiber
- 8 gSugar
- 38 gProtein
- 980 mgSodium
- 720 mgPotassium
- 130 mgCalcium
- 4.5 mgIron
- 18 mgVitamin C
- 85 mcgVitamin A
Ingredients
For the chicken and marinade
- 1 kg bone-in chicken thighs and drumsticks, skin on, cut into pieces
- 1 cup plain yogurt
- 2 tbsp ginger-garlic paste
- 1 tbsp Kashmiri red chili powder
- 1 tsp ground turmeric
- 1 1/2 tsp fine sea salt
- 2 tbsp fresh lime juice
- 3 tbsp vegetable oil
Bone-in chicken thighs and drumsticks
Plain yogurt
Ginger-garlic paste
Kashmiri red chili powder
Ground turmeric
Fine sea salt
Fresh lime juice
Vegetable oilFor the basmati rice
- 3 cups aged basmati rice, rinsed and soaked 20 minutes
- 2 tbsp ghee
- 4 green cardamom pods
- 2 cinnamon sticks, broken
- 4 whole cloves
- 2 star anise
- 2 bay leaves
- 1 tsp salt
Aged basmati rice
Ghee
Green cardamom pods
Cinnamon sticks
Star anise
Bay leaves
Salt
Vegetable oilFor the coconut curry gravy
- 3 tbsp vegetable oil
- 2 large onions, thinly sliced
- 3 tbsp biryani masala paste
- 2 tbsp sambal chili paste
- 2 ripe tomatoes, chopped
- 2 medium potatoes, cubed
- 4 cups thin coconut milk
- 2 tbsp tomato sauce
- 1 tbsp palm sugar
- Salt to taste
Large onions
Biryani masala paste
Sambal chili paste
Ripe tomatoes
Medium potatoes
Thin coconut milk
Tomato sauce
Palm sugar
Salt
Fried shallotsFor layering and garnish
- 1/2 cup fried shallots (bawang goreng)
- 1/4 cup fried cashews
- 2 tbsp golden raisins, fried
- 1/2 cup fresh mint and cilantro leaves
- Cucumber slices and lime wedges, to serve
- 2 hard-boiled eggs, halved (optional)
Fried cashews
Golden raisins
Mint and cilantro
Cucumber and lime
Hard-boiled eggsDirections
Combine chicken pieces with yogurt, ginger-garlic paste, chili powder, turmeric, salt, lime juice and 1 tablespoon of the oil. Cover and marinate in the refrigerator for at least 30 minutes, ideally 2 hours.
Drain the soaked rice. In a heavy pot, melt the ghee with the remaining oil and bloom the whole spices (cardamom, cinnamon, cloves, star anise, bay leaves) for 30 seconds. Add the drained rice and gently toast for 2 minutes, then pour in 5 1/2 cups water and the salt. Bring to a boil, cover, reduce heat to low, and steam 10 minutes until rice is about 80 percent cooked. Remove from heat and set aside, still covered.
While the rice cooks, prepare the gravy. Heat 3 tablespoons oil in a wide pan and fry the sliced onions until deep golden brown, about 8 minutes. Add the biryani masala paste and sambal chili paste and stir for 1 minute until fragrant, then add the chopped tomatoes and cook until the oil begins to separate at the edges.
Add the marinated chicken (with its marinade) and brown on all sides for 5 minutes. Stir in the potatoes, thin coconut milk, tomato sauce, palm sugar and salt. Cover and simmer gently for 25 minutes, until the chicken is fork-tender and the gravy has thickened to a rich, pourable consistency.
Assemble the biryani in a heavy Dutch oven: scatter a third of the partially cooked rice on the bottom, top with half of the chicken and gravy, then a third of the rice, the remaining chicken and gravy, and finish with the final layer of rice. Tuck mint and cilantro between the layers and sprinkle with half the fried shallots, cashews and raisins.
Seal the pot tightly with a sheet of aluminum foil pressed against the rim, then clamp on the lid. Cook on the lowest possible heat for 30 minutes (dum) to finish steaming the rice and meld the flavors. Remove from heat and let it rest, sealed, for 10 more minutes.
Before serving, loosen the biryani gently with a fork, lifting from the bottom so the grains stay long and intact. Mound onto warm plates and ladle a generous amount of the dark coconut-tomato curry gravy over each portion — the rice should be visibly wet with sauce, as is traditional at Nasi Kandar stalls.
Garnish each plate with the remaining fried shallots, cashews and raisins, and serve immediately with cucumber slices, lime wedges, boiled egg halves and extra curry gravy on the side.
Cook’s Notes
- Authentic Nasi Kandar style means the rice should be drenched in gravy — do not be shy with the curry ladle; the wet, glistening rice is the signature visual.
- Marinate the chicken overnight for the deepest flavor and most tender meat, and use bone-in cuts so the gravy develops a richer body.
- Fry the onions until they reach a deep mahogany color (not just golden) — this dark caramelization is what gives the curry its characteristic smoky, savory depth.
- For an authentic Penang touch, stir 1 teaspoon of dark soy sauce or a pinch of burnt coconut (karamelized coconut) into the gravy to deepen the color.
- If the rice looks dry at the end of the dum stage, simply pour a little warm coconut milk mixed with saffron over the top before sealing for the final steam.
More Malaysia Recipes You’ll Love
Craving more flavors from Malaysia? Try these traditional recipes:









