Press tofu for 15-30 minutes. Cut into 1/2-inch-thick rectangles. Pan fry in vegan butter (or a neutral oil) for 3-4 minutes per side, until lightly browned on both sides. I recommend pan frying the tofu at the end of step 4.
If using the cashew cream, process the ingredients in a small processor until smooth and creamy. This adds a lovely richness.
Add 1.5 tbsp avocado oil to a saucepan over medium-high heat. When hot, add the chopped onions. Cook and stir frequently for 6-7 minutes. The longer the better! Most recipes tell you to cook onions until they turn translucent, but in my experience, cooking them for a few minutes longer is even better.
Add the grated ginger and green chiles. Stir for 1-2 minutes before adding coriander and turmeric. Try your best to make sure the spices do not stick to the pan. If they do, add a small splash of water. After 30 seconds or so, add the tomato paste.
Cook for a few minutes before covering. Let it cook while covered for 8-10 minutes. During this time, uncover once to stir. Now is a good time to pan fry the tofu.
Uncover and let it continue to cook until the tomato juices have evaporated and it looks like a curry that is ready to eat (just go off your intuition).
If the curry is currently really thick, add 1/2-3/4 cup water (optional; depends on the consistency of your tomato paste) and stir until it comes together. Add salt to taste. (For reference, I added ~ 1 tsp.)
Add garam masala and kashmiri lal. Add the kashmiri lal 1 tsp at a time and taste in between to make sure it’s at a spice level you’re happy with. If using, stir in the cashew cream.
Add the tofu and taste again for salt. Garnish with cilantro and serve with roti, paratha, naan, or rice!