Vegan Moqueca Recipe: A Creamy Brazilian Stew With Tofu

Vegan Moqueca Recipe: A Creamy Brazilian Stew With Tofu

A good vegan moqueca recipe gives you the same coconut-rich comfort as the traditional fish stew, minus the seafood. You still get everything that makes moqueca recognizable — a coconut milk base, jammy tomatoes, bell peppers, lime, and cilantro — just built around tofu instead.

The biggest challenge with any plant-based moqueca is texture. Tofu stirred straight into a simmering sauce can turn soft and a little sad; tofu that’s pressed, marinated, and browned first holds its own against the rich broth. This recipe walks through the second approach.

What Is Moqueca?

Moqueca is a Brazilian stew traditionally built on firm white fish (or shrimp), simmered in a coconut milk and tomato base with onion, garlic, bell peppers, and cilantro. It’s most closely associated with Bahia, where it’s often made with dendê (palm) oil for a distinctive orange color and earthy aroma — this version is called Moqueca Baiana. A lighter, more tomato-forward version from Espírito Santo, called Moqueca Capixaba, usually skips the coconut milk entirely.

The vegan take on this dish swaps the fish for tofu, keeping the coconut-tomato-lime structure that makes moqueca taste like moqueca in the first place.

Equipment You'll Need

  • A large pot or Dutch oven
  • A baking sheet, for roasting the squash
  • A skillet, for browning the tofu
  • Something to press the tofu with (a clean towel plus a heavy pan or a few cans works fine — no special tool needed)
Recipe

Vegan Moqueca Recipe

Recipe by Camila SantosCourse: MAIN DISHES, MOQUECA RECIPESCuisine: Brazilian
Servings

5

servings
Prep time

15

minutes
Cooking time

30

minutes

Ingredients

  • 1 medium butternut squash (about 2.2 lb / 1 kg), peeled and cubed

  • 2 tbsp olive oil, divided

  • 1 large onion, finely chopped

  • 1½ tbsp coconut oil (or more olive oil)

  • 4 garlic cloves, minced

  • 1 (2-inch) piece fresh ginger, grated

  • 1 red chili, finely chopped (or to taste)

  • 4 tomatoes, chopped

  • 1 can (14 oz) full-fat coconut milk

  • 1 cup vegetable stock

  • Juice of 1 lime, plus extra for serving

  • 2 red bell peppers, thinly sliced

  • 1 cup green beans, trimmed

  • 1½ cups spinach (fresh or frozen)

  • 12 oz firm tofu, pressed and cubed

  • Fresh cilantro, chopped, for finishing

  • Salt and pepper, to taste

  • Optional tofu marinade: toss the pressed, cubed tofu with 1 tbsp lime juice, 1 minced garlic clove, and a pinch of salt. Cover and refrigerate for at least 1 hour (overnight is even better) before browning — plain tofu doesn't have much flavor of its own, so giving it a head start makes a real difference.

Instructions

  • Press the tofu. Wrap the tofu block in a clean towel, weigh it down with a heavy pan or a few cans, and let it sit for 10-15 minutes. This single step matters more for the final texture than any seasoning choice later. If you have time, marinate it as described above.

  •  Roast the squash. Preheat the oven to 400°F (200°C). Toss the squash with 1 tbsp olive oil and a pinch of salt, spread on a baking sheet, and roast 25-30 minutes until tender and lightly browned at the edges. This step is optional but adds a rounder, deeper flavor than adding raw squash straight to the pot.

  • Build the base. In a large pot, warm the coconut oil over low heat. Add the onion and cook about 10 minutes, until soft and translucent — don't rush this, since a properly sweated onion is the foundation the rest of the flavor builds on. Add the garlic, ginger, and chili, and cook 1 minute more, until fragrant.

  • Cook down the tomatoes. Add the chopped tomatoes and cook 8-10 minutes, until they collapse into a thick, jammy consistency rather than staying loose and watery.

  • Build the broth. Stir in the coconut milk, vegetable stock, lime juice, salt, and pepper. Bring to a gentle simmer.

  • Layer in the vegetables. Add the bell peppers and green beans, and simmer 7-8 minutes until just tender. Add the spinach and simmer 2 minutes more — it needs far less time than the other vegetables, so adding it last keeps it from turning mushy and dull.

  • Brown the tofu separately. In a skillet, heat the remaining 1 tbsp olive oil over medium-high heat. Fry the tofu cubes until golden on a few sides, about 5-7 minutes. This step gives the tofu a texture that holds up against the broth instead of dissolving into it.

  • Combine and finish. Stir the browned tofu and roasted squash into the stew. Add the cilantro, taste, and adjust with more salt, lime, or chili as needed.

Storage

  • Refrigerate in an airtight container for up to 4 days. Freeze for up to 2 months, though the texture of the squash and tofu softens somewhat after thawing — it's still good, just slightly less distinct texturally. Reheat gently on the stovetop, adding a splash of water or stock if it's thickened up too much.

Common Mistakes and How to Avoid Them

  • Adding all the vegetables at once: green beans and peppers need real cooking time; spinach barely needs any. Staggering them keeps everything from turning either underdone or mushy.
  • Skipping the tomato reduction: undercooked tomatoes leave the broth tasting watery and separated instead of cohesive.
  • Using soft or silken tofu: it breaks apart in a simmering stew. Stick to firm or extra-firm.
  • Adding chili too early and too heavy-handed: it’s easy to oversalt heat. Start light — you can always add more, but you can’t take it back out.
  • Skipping the tofu press: unpressed tofu holds excess water, which keeps it from browning properly and leaves it spongy in the final dish.

Baiana vs. Capixaba: Two Directions for a Vegan Version

If you want a rich, comforting bowl, lean into the Baiana style — coconut milk as the backbone, with tofu that holds up well against a bold, creamy sauce. If you’d rather have something lighter for a weeknight, go Capixaba-inspired: skip the coconut milk, lean more heavily on tomatoes, herbs, and stock, and brown the tofu a bit more assertively since the broth won’t be as rich to lean on.

Variations Worth Trying

  • A subtle “coastal” note: simmer a small strip of nori or a pinch of dulse in the broth, then remove it before serving. It adds a faint umami depth without turning the dish into something else — a trick most vegan versions skip entirely.
  • With hearts of palm: stir in sliced hearts of palm along with the vegetables for extra texture and a nod to another common Brazilian ingredient.
  • With mushrooms: shiitake or oyster mushrooms, added alongside the tofu, add a meatier bite for those who miss more texture from the original seafood.
  • Vegetarian version: finish individual bowls with a small spoon of Greek yogurt or crème fraîche at the table for extra tang — not traditional, but an easy option if you’re cooking for a mixed crowd.
  •  

What to Serve With It

White rice is the classic pairing — it soaks up the coconut broth beautifully. Fried plantains or farofa (toasted cassava flour) both make good additions if you want the full spread.

Frequently Asked Questions

A coconut milk and tomato-based stew, traditionally built on firm white fish or shrimp, with onion, garlic, bell peppers, and cilantro. Bahian versions often include dendê (palm) oil.

It can be, depending on the chili used, but it’s not inherently a spicy dish. This version lets you control the heat by adding chili gradually and finishing with lime for brightness instead of relying on more spice.

Olive oil is the simplest substitute. A mix of olive oil and virgin coconut oil gets a bit closer to the tropical richness dendê provides, though the flavor will lean more “adapted” than fully traditional.

Yes — mushrooms (shiitake or oyster) work well for a meatier bite, and hearts of palm add texture if you want to skip soy entirely.

Baiana is richer, built on coconut milk and often dendê oil. Capixaba is lighter and more tomato-forward, typically without coconut milk at all. For a vegan version, Baiana is generally the easier, more forgiving style to nail.

Almost always skipped or insufficient pressing. Press for a full 10-15 minutes, and use firm or extra-firm tofu rather than soft or silken.

Conclusion

A good vegan moqueca recipe isn’t about disguising tofu as fish — it’s about building the same bright, coconut-rich structure that makes moqueca what it is, then giving the tofu the prep it needs to hold its own in that broth. Press it, marinate it if you have the time, and brown it before it goes anywhere near the pot. Do that, and the dish stands on its own, no seafood required.

Share this post: