This Brazilian stew recipe is a Bahia-inspired moqueca: tender fish simmered with tomatoes, peppers, coconut milk, and fragrant dendê palm oil. It comes together in one pot, and its bright lime and cilantro balance the rich, gently spiced broth; Brazilian moqueca also has regional and family variations.
Ingredients
- 1½ lb (680 g) firm white fish fillets, such as snapper, cod, or haddock, cut into 1½-inch (4 cm) pieces
- 2 tbsp (30 ml) fresh lime juice, from about 1 lime
- 1 tsp (6 g) fine salt, divided
- ¼ tsp (0.5 g) freshly ground black pepper
- 1 medium yellow onion, about 1 cup (150 g) thinly sliced
- 1 medium red bell pepper, about 1 cup (150 g) thinly sliced
- 1 medium green bell pepper, about 1 cup (150 g) thinly sliced
- 3 medium ripe tomatoes, about 3 cups (450 g) chopped
- 3 garlic cloves, about 1 tbsp (9 g) finely chopped
- 1 tbsp (15 ml) dendê palm oil
- 1 can (13.5 oz/400 ml) unsweetened coconut milk, well shaken
- ½ tsp (1 g) sweet paprika
- ¼ tsp (0.5 g) ground cumin
- ½ cup (15 g) loosely packed fresh cilantro leaves and tender stems, roughly chopped, plus a little extra for serving
- 1 small lime, cut into wedges for serving
Instructions
- Season the fish. Pat the fish dry with paper towels and check for any pin bones. Put it in a bowl with the lime juice, half the salt (½ tsp/3 g), and the black pepper. Turn the pieces gently to coat, then set aside while you prepare the vegetables. This brief seasoning adds flavor; lime juice does not cook fish or make it safe to eat raw.
- Soften the onion and peppers. Set a wide, heavy pot or deep sauté pan over medium heat. Add the dendê oil, then the onion and both peppers. Cook for 7 minutes, stirring now and then, until the vegetables have softened but still hold their shape. If the pan starts to look dry, lower the heat rather than letting the edges scorch.
- Add the garlic and tomatoes. Stir in the garlic and cook for 1 minute, just until fragrant. Add the chopped tomatoes, paprika, cumin, and remaining ½ tsp (3 g) salt. Cook for 5 minutes, stirring occasionally, until the tomatoes begin to break down and release their juices. The vegetables should form a chunky, moist base rather than a smooth sauce.
- Build the coconut broth. Pour in the coconut milk and stir gently to combine it with the vegetables. Bring the liquid to a gentle simmer, then cook for 3 minutes. Avoid a hard boil, which can make the sauce splatter and the vegetables collapse. Taste a spoonful of broth and adjust the salt if needed before adding the fish.
- Cook the fish gently. Arrange the fish pieces in a single layer in the simmering broth, spooning some sauce over the top. Cover the pot and cook for 9 minutes without stirring. Check the thickest piece with a food thermometer: USDA FSIS guidance sets 145°F (63°C) as the safe minimum internal temperature for fish. If a piece has not reached that temperature, continue simmering and check again in short intervals. The fish should be opaque and separate into moist flakes when gently pressed.
- Finish and serve. Turn off the heat and fold in the chopped cilantro with a broad spoon, taking care not to break up the fish. Let the stew settle for a minute, then taste the broth and add more lime juice or salt if desired. Serve hot with lime wedges and extra cilantro.
Tips
- Choose pieces that cook evenly. Cut the fillets into similarly sized chunks and use a wide pan so they fit in one layer. Very thin pieces cook faster than thick ones, so check them early; relying on the thermometer is more dependable than judging by time alone.
- Know what dendê contributes. Dendê, or red palm oil, gives many Bahia-style moquecas their characteristic color and earthy, distinctive flavor. It is sold in some Latin American, Brazilian, and international grocery stores. If you cannot find it, use 1 tbsp (15 ml) olive oil with a pinch of paprika; the stew will still be flavorful but will lack dendê’s particular aroma.
- Keep the broth at a gentle simmer. A rolling boil can break delicate fish into small flakes and make coconut broth look separated. Once the fish goes in, keep the heat low enough for occasional bubbles around the edge of the pot.
- Use ripe tomatoes and unsweetened coconut milk. Ripe tomatoes give the broth freshness and a little acidity, while unsweetened canned coconut milk provides body. Do not substitute a sweetened coconut beverage, which is thinner and will make the stew taste noticeably sweet.
Serving Suggestions
Serve moqueca in shallow bowls with plenty of broth, fish, and vegetables in every portion. Plain steamed white rice is the classic partner: it absorbs the coconut-and-tomato sauce without competing with the fish. For a Brazilian-inspired spread, add farofa, toasted cassava flour often seasoned with butter, onion, or herbs, and pass extra lime wedges at the table.
If you want a more substantial meal, serve the stew with crusty bread for dipping or with boiled cassava. A simple green salad or sliced cucumber adds a crisp contrast to the warm, rich broth. Some Brazilian meals also include pirão, a soft savory accompaniment made by thickening broth with cassava flour; it is a useful option if you want to make the meal feel more traditional and filling. Keep side dishes simply seasoned so the moqueca remains the focus.
Variations
Moqueca varies by region and household. This recipe takes inspiration from Bahia, where coconut milk and dendê are familiar ingredients in many versions. Espírito Santo-style moqueca is generally made without coconut milk and often uses olive oil; it may include annatto for color. These are broad regional distinctions, not rules that every cook follows.
For an Espírito Santo-inspired direction, leave out the coconut milk and dendê, use 2 tbsp (30 ml) olive oil, and add ½ tsp (1 g) annatto or colorau with the tomatoes. The result is a lighter, more tomato-forward broth. If annatto is unavailable, omit it rather than trying to replace it with a large amount of another spice.
You can replace some or all of the fish with peeled raw shrimp, but add shrimp later because it cooks faster: simmer the fish first, then add the shrimp for the final few minutes, until opaque and cooked through. For a meat-free version, use firm tofu or thick slices of hearts of palm; add them to warm through rather than treating them like raw fish. You can also make the stew hotter by adding a finely chopped fresh chili with the garlic, or keep it mild and offer hot sauce separately.
Storage and Reheating
Refrigerate leftovers within 2 hours of cooking, transferring them to a shallow airtight container so they cool promptly. Cooked fish stew keeps for 3–4 days in the refrigerator, though the fish is usually at its best in texture within the first 1–2 days. For longer storage, freeze it in a freezer-safe container for up to 2–3 months for best quality. Thaw frozen stew overnight in the refrigerator; the coconut broth may look slightly separated after freezing, but gentle stirring as it warms can bring it back together.
Reheat only the portion you plan to eat in a covered saucepan over low to medium-low heat, stirring carefully so the fish stays in pieces. Add a splash of water if the broth has thickened. Heat leftovers to 165°F (74°C), checking the center with a food thermometer, as recommended by USDA FSIS. Avoid repeatedly cooling and reheating the whole pot, and do not leave the stew at room temperature for more than 2 hours.
Frequently Asked Questions
What fish works best in Brazilian moqueca?
Choose a firm, mild white fish that holds together in simmering broth, such as snapper, cod, haddock, or halibut. Fresh or previously frozen fish works; thaw frozen fillets in the refrigerator and pat them dry before seasoning. Avoid very thin fillets, which can overcook before the broth is ready.
Can I make this stew without dendê palm oil?
Yes. Use olive oil, optionally with a small pinch of paprika for color. That substitution changes the flavor: it will be less earthy and less distinctly Bahia-style, but the coconut, tomatoes, and fish will still make a satisfying stew.
Can I make moqueca ahead of time?
You can chop the onion, peppers, tomatoes, and garlic up to a day ahead and keep them covered in the refrigerator. For the best fish texture, cook the stew shortly before serving. If you make the full recipe in advance, cool and refrigerate it promptly, then reheat it gently to 165°F (74°C).
Why does my coconut broth look separated?
A little separation can happen if coconut milk gets too hot or if the stew is reheated vigorously. Keep the broth at a gentle simmer, use unsweetened canned coconut milk, and stir slowly as it warms. A slightly separated broth is usually still fine to eat if it has been stored safely.
Can I use frozen fish straight from the freezer?
Thaw it first in the refrigerator, then pat it dry and cut it into even pieces. Frozen fish added directly to the pot can cool the broth, release extra water, and cook unevenly. Do not thaw fish on the counter; if you need a quicker option, thaw it in a leakproof bag under cold water and cook it promptly.
Related
- Orange Thai Rice Noodles with Basil, Lime, and Peanuts
- Oven Baked Spanish Rice for Easy, Fluffy Weeknight Meals
- Nigerian Sauces for White Rice: Tomato-Pepper Stew
More recipes to cook
Safety notes: safe minimum internal temperatures from USDA FSIS; raw and undercooked fish guidance from the U.S. FDA. Food safety notes
Spotted an error? Tell us and we will correct it (corrections policy).