
By Kathryn Scott
Charred, smoky cubes of extra-firm tofu are bathed in a bright, spiced tomato-onion masala enriched with coconut yogurt–based tandoori flavors and finished with tender baby spinach and fresh cilantro. The dish balances the crisp, caramelized texture of tofu with a silky, aromatic sauce—comforting and vibrant, but completely dairy-free.
Press and cube the tofu (why: removing excess water lets the tofu soak up more marinade and sear crispier). Press for at least 20–30 minutes under a heavy pan or in a tofu press, then cut into uniform 2–3 cm cubes so they cook evenly.
Make the tandoori-style marinade (why: the marinade provides both flavor and tenderizing acid). In a bowl combine 120 g unsweetened coconut yogurt, 2 tbsp grated ginger, 2 tbsp minced garlic, 2 tsp smoked paprika, 2 tsp Kashmiri/sweet chili powder, 1 tsp ground cumin, 2 tbsp lemon juice and 1 tsp salt. Taste and adjust salt or heat.
Marinate the tofu (why: the yogurt and acid will flavor and slightly firm the surface). Toss the drained tofu cubes gently with 8 tbsp (120 ml) of the marinade so each piece is coated. Cover and chill at least 30 minutes; for best depth of flavor marinate 2–6 hours or overnight. If short on time, 15–20 minutes still helps.
Preheat for char (why: a very hot pan or oven gives a good Maillard crust that mimics tandoor char). Set your oven broiler to high if broiling, or heat a heavy cast-iron skillet over medium-high until very hot. If using a broiler, line a tray with foil and oil lightly.
Sear or broil the tofu to develop color and a smoky crust (why: grilling or high-heat searing locks flavors and creates texture contrast with the sauce). Add 1–2 tbsp oil to the hot skillet, arrange marinated tofu in a single layer without crowding, and sear 2–3 minutes per side until deeply browned and slightly crisp. Alternatively, broil 4–6 minutes per side, watching closely so the marinade doesn't burn. Work in batches and set seared tofu aside.
Start the masala: sweat onions (why: slowly browning the onion builds the sweet, savory backbone of the sauce). In the same skillet (add oil if needed — total oil used across sear and sauce should equal about 4 tbsp), reduce heat to medium, add 1 tbsp oil and the 200 g finely chopped onion. Cook 6–8 minutes until soft and lightly golden, stirring to prevent burning.
Bloom the spices (why: brief toasting in oil releases essential oils and deepens flavor). Add 3 cloves minced garlic and 1 tbsp grated ginger; cook 30–45 seconds until fragrant. Stir in 1 tsp ground coriander, 1/2 tsp turmeric and 1.5 tsp garam masala and cook 20–30 seconds to bloom—this step makes the spices taste brighter and less raw.
Add the tomato base and simmer (why: simmering reduces excess water, concentrates flavor, and integrates the spice profile). Pour in 560 g crushed tomatoes, 1 tsp sugar (optional) and salt to taste. Bring to a gentle simmer and cook uncovered 10–12 minutes, stirring occasionally, until the sauce thickens slightly.
Finish the sauce with fenugreek and spinach (why: fenugreek adds the characteristic tikka-masala note; spinach brings freshness and body). Stir in 1 tsp crushed dried fenugreek (or 1 tsp ground), then add the 240 g baby spinach 1 large handful at a time, letting it wilt into the sauce. If the sauce is too thick, loosen with 1–2 tbsp water. Adjust salt and a squeeze of lemon to brighten.
Combine tofu with sauce and finish (why: a brief simmer lets the tofu absorb sauce flavors without falling apart). Gently fold the browned tofu into the simmering sauce and cook 3–5 minutes so the exterior soaks up the masala but remains firm. Taste and adjust seasoning: more lemon for brightness, salt for depth, or a pinch of sugar if too acidic.
Garnish and serve (why: cilantro provides fresh herbal lift and lemon cuts richness). Turn off the heat, sprinkle 4 tbsp chopped cilantro and another small squeeze of lemon if desired. Serve hot with basmati rice, naan (vegan if desired), or a grain of your choice.
489
Calories
33g
Protein
20g
Carbs
34g
Fat
6g
Fiber
How did this recipe turn out? Let others know!
to rate this recipe
By Kathryn Scott

Charred, smoky cubes of extra-firm tofu are bathed in a bright, spiced tomato-onion masala enriched with coconut yogurt–based tandoori flavors and finished with tender baby spinach and fresh cilantro. The dish balances the crisp, caramelized texture of tofu with a silky, aromatic sauce—comforting and vibrant, but completely dairy-free.
Press and cube the tofu (why: removing excess water lets the tofu soak up more marinade and sear crispier). Press for at least 20–30 minutes under a heavy pan or in a tofu press, then cut into uniform 2–3 cm cubes so they cook evenly.
Make the tandoori-style marinade (why: the marinade provides both flavor and tenderizing acid). In a bowl combine 120 g unsweetened coconut yogurt, 2 tbsp grated ginger, 2 tbsp minced garlic, 2 tsp smoked paprika, 2 tsp Kashmiri/sweet chili powder, 1 tsp ground cumin, 2 tbsp lemon juice and 1 tsp salt. Taste and adjust salt or heat.
Marinate the tofu (why: the yogurt and acid will flavor and slightly firm the surface). Toss the drained tofu cubes gently with 8 tbsp (120 ml) of the marinade so each piece is coated. Cover and chill at least 30 minutes; for best depth of flavor marinate 2–6 hours or overnight. If short on time, 15–20 minutes still helps.
Preheat for char (why: a very hot pan or oven gives a good Maillard crust that mimics tandoor char). Set your oven broiler to high if broiling, or heat a heavy cast-iron skillet over medium-high until very hot. If using a broiler, line a tray with foil and oil lightly.
Sear or broil the tofu to develop color and a smoky crust (why: grilling or high-heat searing locks flavors and creates texture contrast with the sauce). Add 1–2 tbsp oil to the hot skillet, arrange marinated tofu in a single layer without crowding, and sear 2–3 minutes per side until deeply browned and slightly crisp. Alternatively, broil 4–6 minutes per side, watching closely so the marinade doesn't burn. Work in batches and set seared tofu aside.
Start the masala: sweat onions (why: slowly browning the onion builds the sweet, savory backbone of the sauce). In the same skillet (add oil if needed — total oil used across sear and sauce should equal about 4 tbsp), reduce heat to medium, add 1 tbsp oil and the 200 g finely chopped onion. Cook 6–8 minutes until soft and lightly golden, stirring to prevent burning.
Bloom the spices (why: brief toasting in oil releases essential oils and deepens flavor). Add 3 cloves minced garlic and 1 tbsp grated ginger; cook 30–45 seconds until fragrant. Stir in 1 tsp ground coriander, 1/2 tsp turmeric and 1.5 tsp garam masala and cook 20–30 seconds to bloom—this step makes the spices taste brighter and less raw.
Add the tomato base and simmer (why: simmering reduces excess water, concentrates flavor, and integrates the spice profile). Pour in 560 g crushed tomatoes, 1 tsp sugar (optional) and salt to taste. Bring to a gentle simmer and cook uncovered 10–12 minutes, stirring occasionally, until the sauce thickens slightly.
Finish the sauce with fenugreek and spinach (why: fenugreek adds the characteristic tikka-masala note; spinach brings freshness and body). Stir in 1 tsp crushed dried fenugreek (or 1 tsp ground), then add the 240 g baby spinach 1 large handful at a time, letting it wilt into the sauce. If the sauce is too thick, loosen with 1–2 tbsp water. Adjust salt and a squeeze of lemon to brighten.
Combine tofu with sauce and finish (why: a brief simmer lets the tofu absorb sauce flavors without falling apart). Gently fold the browned tofu into the simmering sauce and cook 3–5 minutes so the exterior soaks up the masala but remains firm. Taste and adjust seasoning: more lemon for brightness, salt for depth, or a pinch of sugar if too acidic.
Garnish and serve (why: cilantro provides fresh herbal lift and lemon cuts richness). Turn off the heat, sprinkle 4 tbsp chopped cilantro and another small squeeze of lemon if desired. Serve hot with basmati rice, naan (vegan if desired), or a grain of your choice.
489
Calories
33g
Protein
20g
Carbs
34g
Fat
6g
Fiber
Your Rating: