Equipment
Ingredients
Tofu and Marinade
- 450 g extra firm tofu, pressed for 30 minutes, then cut into 2.5cm cubes
- 80 g unsweetened plant-based yogurt, plain soy or coconut yogurt, cold
- 10 ml lemon juice, freshly squeezed, for marinade
- 10 g fresh ginger, peeled and finely grated
- 10 g garlic cloves, peeled and minced
- 4 g garam masala, ground, for marinade
- 3 g kashmiri chili powder, ground, for marinade
- 2 g ground cumin, ground, for marinade
- 2 g fine sea salt, for marinade
Cashew Cream
- 100 g raw cashews, unsalted, soaked in hot water for 30 minutes then drained
- 200 ml water, cool fresh water for blending cashews
Curry Sauce
- 200 g yellow onion, peeled and finely chopped into 5mm dice
- 15 g garlic cloves, peeled and minced
- 15 g fresh ginger, peeled and grated on a microplane
- 400 g crushed tomatoes, canned, plain, no salt added if possible
- 30 ml neutral cooking oil, such as grapeseed, sunflower, or avocado oil
- 5 g ground coriander, ground
- 4 g ground cumin, ground, for sauce
- 6 g garam masala, ground, for sauce
- 3 g kashmiri chili powder, ground, for sauce
- 2 g ground turmeric, ground
- 8 g fine sea salt, for sauce, plus additional to taste at the end
- 5 g coconut sugar, ground or finely grated
- 4 g kasoori methi, dried fenugreek leaves
- 50 g vegan butter, softened, for finishing the sauce
- 15 ml lemon juice, freshly squeezed, stirred in off the heat
- 100 ml water, warm, for adjusting sauce consistency as needed
Basmati Rice
- 300 g basmati rice, dry, rinsed until water runs clear, soaked 20 minutes and drained
- 600 ml water, fresh, for cooking the rice
- 4 g fine sea salt, for the rice cooking water
- 1 bay leaf, dried
- 3 green cardamom pods, lightly crushed with the side of a knife
Garnish
- 15 g fresh cilantro leaves, roughly chopped, leaves and tender stems
- 10 g vegan butter, melted, for drizzling at service
Nutrition (per serving)
Nutrition is estimated per serving. Nutrients without complete source data are omitted.
Full nutrition
- Calories
- 748 kcal
- Protein
- 24 g
- Carbohydrates
- 87 g
- Fat
- 37 g
- Fiber
- 7 g
- Sodium
- 1139 mg
- Saturated Fat
- 12 g
- Calcium
- 395 mg
- Vitamin C
- 19 mg
- Water
- 316 g
Sources: Aggregated Public Data, USDA FoodData Central
Method
Press the tofu to remove excess moisture. Wrap the 450g block in two clean kitchen towels, place on a rimmed plate, and weight with a heavy object such as a cast-iron skillet or a stack of cookbooks. Press for at least 30 minutes while you prepare the other components.
Place the raw cashews in a small heatproof bowl and cover with hot water by about 2cm. Let them soak for at least 30 minutes while you continue with the other steps. The cashews should feel soft and yield easily when squeezed.
Place the basmati rice in a fine mesh strainer and rinse under cool running water until the water runs almost clear, about 1 minute. Transfer the rinsed rice to a bowl, cover with cool water, and let soak for 20 minutes. Drain well before cooking.
Peel the onion and chop it into an even 5mm dice. Aim for uniform pieces so they soften at the same rate during cooking.
Peel and finely mince the 15g of garlic reserved for the sauce. The mince should be nearly paste-like so it dissolves into the sauce rather than leaving visible chunks.
Peel the 15g of ginger reserved for the sauce by scraping with the edge of a spoon. Grate it finely on a microplane into a soft paste. Reserve it separately from the marinade ginger.
In a wide mixing bowl, whisk together the plant yogurt, 10ml lemon juice, 10g grated ginger, 10g minced garlic, 4g garam masala, 3g kashmiri chili powder, 2g ground cumin, and 2g salt until smooth and evenly speckled with spice.
Cut the pressed tofu into even 2.5cm cubes. Add the cubes to the marinade and toss gently with a silicone spatula until every surface is coated. Let the tofu marinate at room temperature for 25 minutes, or refrigerate for up to 4 hours for a deeper flavor.
Preheat the oven to 200°C (400°F). Line a rimmed baking sheet with parchment paper. Arrange the marinated tofu cubes in a single layer with at least 2cm between each piece to allow airflow. Bake for 25 minutes total, flipping once at the halfway point with a thin spatula, until the edges are deeply golden and the surfaces feel dry and lightly crusted. The tofu should be crisp on the outside and tender within.
Combine the drained rice, 600ml water, 4g salt, the bay leaf, and the crushed cardamom pods in a small saucepan. Bring to a brisk boil over high heat, then immediately reduce to the lowest possible flame. Cover tightly with a lid and cook undisturbed for 15 minutes. Remove from the heat and let the rice rest, covered, for 10 minutes. Uncover, discard the bay leaf and cardamom pods, and fluff gently with a fork.
Heat the 30ml of neutral oil in a large heavy-bottomed saucepan over medium heat until it shimmers. Add the chopped onion and a small pinch of the 8g of salt. Cook, stirring every minute or so, for 8 to 10 minutes until the onion is deeply golden, soft, and reduced by about a third. Lower the heat if the onion begins to brown too quickly at the edges.
Add the 15g minced garlic and 15g grated ginger to the softened onion. Stir constantly for 1 to 2 minutes until the mixture is intensely fragrant and the raw garlic bite has mellowed. Lower the heat if either begins to color, as burnt garlic will make the entire sauce bitter.
Add the 5g ground coriander, 4g ground cumin, 6g garam masala, 3g kashmiri chili powder, and 2g ground turmeric to the pan. Stir constantly for 45 to 60 seconds - the spices should smell aromatic and deepen in color but not darken to brown. If anything begins to scorch, lift the pan off the heat for a few seconds.
Pour the 400g of crushed tomatoes into the pan and stir well, scraping up every browned bit from the bottom. Add the 8g salt and 5g coconut sugar. Bring the mixture to a gentle bubble, then reduce the heat and simmer uncovered for 12 to 15 minutes, stirring every few minutes, until the sauce has thickened enough to hold a line when you drag a spoon across the bottom of the pan and has darkened to a deep brick-red.
Drain the soaked cashews and transfer them to a high-speed blender. Add the 200ml of fresh water. Blend on high for 2 to 3 minutes, stopping to scrape the sides once if needed, until the cream is completely smooth, milky, and pourable like heavy cream. No grit should remain when a small spoonful is rubbed between your fingertips.
Pour the cashew cream into the reduced tomato base and stir until fully combined. Add warm water a tablespoon at a time (up to 100ml) until the sauce reaches the consistency of warm heavy cream - thick enough to coat the tofu but still loose enough to flow. Simmer gently for 5 to 8 minutes to meld the flavors and allow the sauce to thicken slightly. Taste and adjust with additional salt or a small pinch of coconut sugar if the sauce tastes sharp.
Add the baked tofu cubes to the sauce along with the 50g of softened vegan butter and the 4g of kasoori methi, which you should crush between your palms just before adding to release the aromatic oils. Fold gently with a silicone spatula so the tofu is evenly coated, then simmer for 2 to 3 minutes to warm the tofu through. Remove the pan from the heat and stir in the 15ml of lemon juice. The acid will brighten the entire dish without making it sour.
Divide the basmati rice among four shallow bowls, shaping it into a small mound on one side. Spoon the tofu makhani alongside or gently over the rice. Drizzle each portion with a little of the 10g melted vegan butter if using, and scatter the chopped cilantro leaves over the top. Serve immediately while the sauce is silky and the rice is steamy.
Chef's Notes
- Pressing the tofu thoroughly is the single most important step for this recipe - excess moisture prevents the marinade from clinging and steams the cubes during baking, leaving them soft instead of golden. If you do not own a tofu press, weighted books on a towel-wrapped block work just as well.
- Blooming the ground spices in oil before adding any liquid is the technique that distinguishes a layered curry from a flat one. Keep the heat moderate and stir constantly so the spices toast rather than scorch; 45 to 60 seconds is usually enough.
- Cashew cream provides the closest match to traditional makhani's silken mouthfeel. Coconut milk will work in a pinch, but its distinct flavor competes with the spice profile, so treat it as a backup rather than a true substitute.
- Kasoori methi should always be crushed between your palms just before it is added to the hot sauce. This friction releases the volatile oils that give the dish its signature bittersweet aroma; skipping this small step is the most common reason a homemade curry tastes almost right but not quite.
- The pinch of coconut sugar is not sweetness for its own sake. It neutralizes the tomato's natural acidity and balances the chili heat, mirroring the way a small amount of jaggery or honey functions in many traditional Indian gravies.
- If the sauce breaks or looks grainy after adding the cashew cream, a brief whisk over low heat will bring it back to a velvety finish without altering the flavor.
Storage
Refrigerator: 4 days — Store curry and rice separately in airtight containers. Curry reheats more evenly when isolated from the rice.
Freezer: 2 months — Freeze the curry only (without rice) in portioned containers. Thaw overnight in the refrigerator before reheating.
Reheating: Rewarm curry gently in a covered saucepan over low heat with a 30ml splash of water, stirring occasionally until heated through to 74°C (165°F). Reheat rice by steaming or microwaving covered with a few drops of water.
Troubleshooting
Tofu turns out pale and rubbery instead of golden and crisp
Cause: Tofu was not pressed long enough, the cubes were crowded on the baking sheet, or the oven temperature was inaccurate
Fix: Cannot be reversed once baked; serve with extra sauce and a generous herb garnish to draw attention away from the texture
Prevention: Press the tofu for a full 30 minutes, arrange cubes at least 2cm apart on the parchment, and verify your oven with a separate thermometer if browning is consistently weak
Sauce tastes sharp, tart, or acidic
Cause: The tomatoes were not reduced long enough, or the balance of salt and sugar is off
Fix: Stir in an additional 3 to 5g of coconut sugar and a pinch more salt, then simmer 2 to 3 minutes to meld; a small splash of cashew cream will also round out the acidity
Prevention: Reduce the tomatoes for the full 15 minutes until thick and darkened, then taste before finishing
Sauce is too thin and pools around the rice instead of coating the tofu
Cause: The cashew cream was added before the tomato base had reduced enough, or too much water was added during adjustment
Fix: Simmer the finished curry uncovered for 5 to 10 minutes to evaporate excess liquid, or stir in 1 tablespoon of cashew butter to thicken quickly
Prevention: Wait until the tomato mixture visibly coats the spoon before adding cashew cream, and add water only a tablespoon at a time
Curry is overwhelmingly spicy or hot
Cause: Too much kashmiri chili powder, or the household is sensitive to background heat
Fix: Stir in an additional 50ml of cashew cream and 1 teaspoon of coconut sugar, then add more baked tofu or cooked chickpeas to dilute the heat
Prevention: Start with half the chili powder in both the marinade and the sauce, taste the reduced tomato base, and adjust upward if desired
Cultural Context
Makhani-style cooking originates in the Punjab region of northern India, where tomato-based gravies are enriched with butter or cream and finished with kasoori methi, a hallmark of dishes like butter chicken and paneer makhani. This plant-based interpretation honors the same culinary logic: a long-simmered tomato base, dairy-rich mouthfeel from cashew cream, and the signature finishing of butter and dried fenugreek. The technique of marinating and roasting tofu before it meets the sauce is a contemporary twist that gives plant proteins the layered flavor traditional dishes achieve through long cooking of meat, while keeping the dish firmly within the spice logic of the original.










