Tofu and Vegetables in Coconut Milk

This tofu and vegetables in coconut milk is a creamy curry made with green beans, carrots, green cabbage, and fried tofu in a chile-infused coconut milk broth.

An octagonal bowl filled with tofu and vegetables in coconut milk on a colorful cloth with a large bowl in the background.

This lovely dish of deep-fried tofu, carrots, green beans, and cabbage in a pale yellow coconut-milk broth is a Malaysian family favorite. Macadamias in the flavoring paste lends the broth its body and richness. Deep-frying tofu gives it a pillowy, sponge-like texture that helps it absorb flavors more readily. You can omit the dried shrimp paste for a vegetarian version.–James Oseland

Tofu and Vegetables in Coconut Milk

An octagonal bowl filled with tofu and vegetables in coconut milk on a colorful cloth with a large bowl in the background.
This light curry is filled with plenty of vegetables and a chile-infused coconut milk broth. Deep frying the tofu gives it a different texture that also helps it to absorb loads of flavor from the superb curry paste mixture.

Prep 1 hour
Cook 45 minutes
Resting Time 15 minutes
Total 2 hours
4 servings
343 kcal
5 from 1 vote
Print RecipeBuy the Cradle of Flavor cookbook

Want it? Click it.


For the flavoring paste

  • 1 1/2 tablespoons dried shrimp paste (optional)
  • 6 (1-ounce) shallots coarsely chopped
  • 2 cloves garlic coarsely chopped
  • 6 small dried red chiles such as árbol, stemmed and coarsely chopped
  • 1 (2-inch) piece fresh or thawed turmeric peeled and coarsely chopped (about 2 teaspoons), or 2 teaspoons ground turmeric
  • 7 whole candlenuts or unsalted macadamia nuts

For the curry

  • 4 tablespoons peanut oil plus more for frying
  • 1 (2-inch) piece fresh or thawed galangal peeled and bruised with a heavy, blunt object, such as the bottom of a glass measuring cup, until juicy (optional)
  • 1 cup unsweetened coconut milk
  • 3 cups water
  • 5 ounces green beans stemmed and sliced on the diagonal into 1 1/2-inch (4-cm) lengths (about 30 beans)
  • 5 ounces medium-sized carrots peeled and cut into thick matchsticks, 1 1/2 inches (4 cm) long by 1/3 inch (8 mm) wide (about 2 carrots)
  • 1 tablespoon granulated sugar
  • 3/4 teaspoon kosher salt
  • 2 (4-inch) squares firm fresh tofu (8 oz | 227 g) each square halved on the diagonal into triangles 1/2 inch (12-mm) thick
  • 1/4 small head green cabbage cored and cut into 1-inch squares (about 2 cups)


Make the flavoring paste

  • If using the shrimp paste, place it in the center of a 5-inch (13-cm) square of aluminum foil. Fold the edges of the foil over to form a small parcel and press down with the heel of your hand to flatten the shrimp paste into a disk 1/4 inch (6 mm) thick. Heat a gas burner to medium-low or an electric burner to medium-high. Using a pair of tongs or 2 forks, place the sealed parcel directly on the heat source. Toast until the paste begins to smoke and release a burning, shrimpy smell, about 1 1/2 minutes.
  • With the tongs or forks, turn the parcel over and toast the other side for another 1 1/2 minutes, then turn off the burner. Again using the tongs or forks, remove the parcel and let cool for 30 seconds to 1 minute.
  • Carefully unwrap the foil; the edges of the disk should be black-brown and toasty and the center should be golden with some black-brown patches. Using a spoon, scrape the toasted shrimp paste into a small bowl and allow it to cool for another 30 seconds. Discard the foil.
  • Place the toasted shrimp paste, shallots, garlic, chiles, turmeric, and candlenuts in a small food processor. Pulse until you have a smooth paste the consistency of creamy mashed potatoes. If the paste won't purée properly and repeatedly creeps up the side of the processor instead of grinding, add up to 2 tablespoons water, 1 tablespoon at a time, occasionally turning the processor off and scraping the unground portions down toward the blade as needed.

Make the curry

  • Heat the 4 tablespoons oil in a 4-quart (3.8-liter) saucepan, Dutch oven, or large pot over medium-low heat. Test to see if the oil is the right temperature by adding a pinch of the ground paste. The paste should sizzle slightly around the edges. You don’t want it to either fry aggressively or sit motionless and not even sputter.
  • When the oil is ready, add all the paste and the galangal and saute, stirring as needed to prevent scorching, until the shallots and garlic no longer smell raw and the paste begins to separate slightly from the oil, 5 to 7 minutes. Be careful not to let the flavoring paste cook for too long. It should be limp and silken. Not golden and crusty.
  • Add 1/2 cup of the coconut milk and all the water, increase the heat to medium, and bring the liquid to a steady simmer, stirring constantly. Add the green beans, carrots, sugar, and salt and stir to combine. Reduce the heat to medium-low and let the vegetables simmer gently, uncovered, stirring occasionally, until they are fork-tender and only slightly crunchy, about 15 minutes. (Don’t let the liquid boil, or the coconut milk may curdle. You may need to adjust the heat periodically if the simmer becomes too vigorous or too slow.)
  • Meanwhile, deep-fry the tofu. Dry the tofu triangles thoroughly with paper towels. Pour enough oil to reach a depth of 1 inch (25 mm) into a 1 1/2- to 2-quart (1.4- to 1.9-liter) saucepan and place over medium to medium-high heat until hot but not smoking. To test if the oil is the right temperature (it should be about 365°F [185°C]), spear a piece of tofu onto a fork and slip a corner of the piece into the oil. If the oil is ready, it will immediately bubble vigorously around the tofu.
  • Using 2 forks or a pair of tongs, add the tofu pieces in small batches (crowding will cool the oil down and make the tofu greasy). Fry the tofu pieces, turning them often with a slotted spoon, until they're uniformly golden and crispy 3 to 5 minutes. Be sure not to fry the tofu beyond the point at which it is just golden or its texture will be tough and its taste bitter. Using the slotted spoon, transfer the tofu pieces to paper towels to drain.
  • Add the fried tofu and cabbage to the simmering coconut milk broth and continue to cook uncovered, stirring occasionally, until the cabbage is wilted and beginning to turn translucent, about 10 minutes. Do not let the cabbage overcook and become mushy.
  • Add the remaining 1/2 cup coconut milk and let it heat through, about 2 minutes. Taste and, if desired, add a pinch more if needed. Remove and discard the galangal.
  • Transfer the tofu, vegetables, and broth to a shallow serving bowl and allow the dish to rest for at least 15 minutes before eating. It tastes best when allowed to cool slightly. Exert that patience we know you have.
Print RecipeBuy the Cradle of Flavor cookbook

Want it? Click it.

Show Nutrition

Serving: 1portionCalories: 343kcal (17%)Carbohydrates: 16g (5%)Protein: 8g (16%)Fat: 30g (46%)Saturated Fat: 15g (94%)Polyunsaturated Fat: 5gMonounsaturated Fat: 7gCholesterol: 64mg (21%)Sodium: 688mg (30%)Potassium: 469mg (13%)Fiber: 5g (21%)Sugar: 10g (11%)Vitamin A: 6407IU (128%)Vitamin C: 25mg (30%)Calcium: 88mg (9%)Iron: 2mg (11%)

#leitesculinaria on Instagram If you make this recipe, snap a photo and hashtag it #LeitesCulinaria. We’d love to see your creations on Instagram, Facebook, and Twitter.

Recipe Testers’ Reviews

This is a light, fresh curry dish that works warm or even at room temperature and can be kept completely vegan if you wish.

I did not have shrimp paste available, but felt this worked fine without. The flavoring paste or curry comes together quickly, though working in a full size food processor it may take repeated pauses to scrape down the sides and add a bit of water. In the end, my paste still had a texture even after cooking, but not one you would mind. If you do not have shrimp paste but want some of that element, you may want to add a dash or two of fish sauce after tasting the cooked sauce.

Be aware that the mild appearance of your dry chiles may be deceiving. I thought since mine had been around a while they might be mellow, and I slightly overpunched the heat with 8 of them. It is fixable, though!

The timing works pretty well throughout the recipe. While the vegetables are cooking, you have time to fry the tofu—and in fact if you are comfortable with a wok you might be able to shallow fry in a smaller amount of oil. I fried in 3 batches so the pan was never crowded.

Once the tofu and cabbage had cooked, I tasted the dish before adding the final half cup of coconut milk, and felt it was perhaps missing the shrimp paste funk and umami, so I added the next best thing on hand, a bit of fish sauce (about 1/2 teaspoon).

This serves 4 (and since we are but two, we reheated and served it again the following day and I added an extra splash of coconut milk (about 1 to 2 tablespoons) to pull the sauce back together.

We served it with rice and offered fresh lime, Major Grey’s chutney, and lime pickle on the side. The fresh lime juice is very helpful if you made this a bit too hot (guilty). Greedily, we were impatient and tried it almost immediately the first day, but I was more careful to taste it after it sat for a few minutes and had cooled on the leftover lunch day, and it was just as good if not more spectacular. Who knew!?

This is a lovely mild curry featuring tofu and some simple vegetables.

I was using my homemade tofu, which I press into a cylindrical shape (using my old cheese press), so I had to cut the tofu differently than described, but it was basically in wedges. I fried my tofu as directed, but if you are averse to frying, I think this dish would still be delicious with firm tofu just simmered in with the rest of the curry.

I made my version vegan by omitting the shrimp paste and adding in a small amount (2 cubes) of fermented bean curd, which I find adds a similar funkiness to dishes that call for shrimp paste. You do not need to go through the process of baking the fermented tofu like you do with the shrimp paste.

I used chiles Japoneses, which are similar to arbol, but a bit thicker. I used 6, but would probably up to the full 10 in the future.

Originally published May 26, 2020


#leitesculinaria on Instagram If you make this recipe, snap a photo and hashtag it #LeitesCulinaria. We'd love to see your creations on Instagram, Facebook, and Twitter.


  1. Oh! We call this Sayur Lodeh here in Malaysia, and it’s one of my very favourites 🙂 Sometimes, people add mung bean noodles and jicama as well – there’s an Indonesian version too, which is a little different, but they’re both delicious. It’s usually served here with lontong (compressed rice cakes cooked in banana leaves) and a good dollop of sambal belacan.

    1. Shuku, thank you so incredibly much for enhancing this recipe with these details. So helpful and sounds terrific. (I am a big fan of sambal belacan, which I first experienced with some nasi lemak at a restaurant in NYC.)

Have something to say?

Then tell us. Have a picture you'd like to add to your comment? Attach it below. And as always, please take a gander at our comment policy before posting.

Rate this recipe!

Have you tried this recipe? Let us know what you think.

Upload a picture of your dish