Brazilian Fish Soup with Coconut Milk and Lime Recipe

Updated November 3, 2026

Total time
53 min
prep 25 min · cook 28 min
Serves
4
portions as written
Safe temperature (USDA)
145°F / 63°C
check the thickest piece

Jump to recipe

Brazilian Fish Soup with Coconut Milk and Lime Recipe

Brazilian fish soup with coconut milk is a coastal-inspired, moqueca-style dish of firm white fish simmered with tomatoes, peppers, coconut milk, lime, and cilantro. The broth is fragrant and gently rich, and regional and family versions vary; this soup is especially good served hot with rice to soak up every spoonful.

Ingredients

  • 1½ pounds firm white fish fillets, such as cod, snapper, halibut, or mahi-mahi (680 g), pin bones removed and cut into 1½-inch (4 cm) pieces
  • 1 teaspoon fine salt (5 g), plus more to taste
  • ¼ teaspoon freshly ground black pepper (0.5 g)
  • 2 tablespoons fresh lime juice (30 ml), divided
  • 1 tablespoon olive oil (15 ml)
  • 1 tablespoon red palm oil, also called dendê (15 ml; optional, or use another tablespoon of olive oil)
  • 1 medium yellow onion, thinly sliced (about 1½ cups or 200 g)
  • 1 medium red bell pepper, thinly sliced (about 1½ cups or 180 g)
  • 1 medium green bell pepper, thinly sliced (about 1½ cups or 180 g)
  • 3 garlic cloves, finely chopped (about 1 tablespoon or 9 g)
  • 1 can diced tomatoes with their juices (14.5 ounces or 411 g)
  • 1 teaspoon sweet paprika (2 g)
  • ½ teaspoon ground cumin (1 g)
  • 1 can full-fat coconut milk, well shaken (13.5 ounces or 400 ml)
  • 1 cup low-sodium fish stock or chicken stock (240 ml), or water
  • ½ cup chopped fresh cilantro leaves and tender stems (15 g), plus extra for serving
  • 1 small lime, cut into wedges for serving
  • Cooked white rice, to serve (optional)

Instructions

  1. Prepare and season the fish. Pat the fish dry, check for any remaining pin bones, and cut it into evenly sized pieces so it cooks at a similar rate. Sprinkle with the salt and pepper, then toss gently with 1 tablespoon (15 ml) of the lime juice. Set it aside while you prepare the vegetables; this brief seasoning is not a substitute for cooking the fish.
  2. Soften the vegetables. Heat the olive oil and red palm oil, if using, in a wide, heavy pot or Dutch oven over medium heat. Add the onion and both peppers. Cook for about 8 minutes, stirring occasionally, until the vegetables soften and the onion turns translucent. Keep the heat moderate; browning is not necessary, and a scorched pepper can make the broth taste bitter.
  3. Add the garlic and spices. Stir in the garlic, paprika, and cumin and cook for 1 minute, stirring constantly, until fragrant. Add the tomatoes and their juices. Cook for 5 minutes, stirring now and then, until the tomato juices begin to mingle with the softened vegetables and the mixture looks saucy rather than watery.
  4. Make the coconut broth. Pour in the coconut milk and stock, then stir gently to combine. Bring the soup just to a gentle simmer over medium heat, which should take a few minutes, then lower the heat and simmer for 8 minutes. Avoid a hard boil: steady, small bubbles help the broth stay smooth and prevent the coconut milk from separating. Taste the broth and add a little salt if needed.
  5. Poach the fish. Nestle the fish pieces into the broth in a single layer as much as possible. Simmer gently for 6 minutes, turning the pieces once with a broad spoon if needed. Check the thickest piece with a food thermometer; USDA FSIS lists 145°F (63°C) as the safe minimum internal temperature for fish. If a piece has not reached that temperature, continue cooking and check again after a minute or two. Fish should be opaque and separate easily into flakes, but take care not to stir vigorously or it may break apart.
  6. Finish and serve. Turn off the heat and stir in the remaining 1 tablespoon (15 ml) lime juice and the chopped cilantro. Taste the broth and adjust with more salt, pepper, or lime as you like. Ladle into warm bowls, making sure each serving gets fish, vegetables, and plenty of broth. Serve straight away with lime wedges and rice if desired.

Tips

  • Choose fish that holds together. Cod, snapper, mahi-mahi, halibut, and other firm white fillets work well. Thin, delicate fillets can still be used, but cut them into larger pieces and handle them gently. If using frozen fish, thaw it safely in the refrigerator and pat it dry before seasoning so excess water does not dilute the soup.
  • Look for dendê if you want a deeper regional note. Red palm oil, known as dendê in Brazil, is associated with some Bahian moqueca preparations and gives the soup a distinctive color and earthy, slightly nutty flavor. It can be difficult to find; olive oil works perfectly well, though the broth will taste milder and less characteristic of that style.
  • Keep the simmer gentle. A rolling boil can make coconut milk look split and can cause fish to fall into flakes before it is served. Once the liquid is hot, lower the heat and cook the fish with only small bubbles around the edge of the pot.
  • Adjust the broth at the end. Coconut milk softens sharp flavors, so taste after cooking and add lime gradually rather than putting in extra at the start. If the soup tastes too rich, a little more lime or a splash of stock can brighten and loosen it. If it is too thin, simmer the broth briefly before adding the fish, not afterward.

Serving Suggestions

Serve the soup in deep bowls while the fish is hot and tender. Plain steamed white rice is a particularly useful accompaniment: it absorbs the coconut-tomato broth without competing with its lime, cilantro, and pepper flavors. Spoon rice into each bowl or serve it alongside so diners can choose how much to mix in. A crusty loaf of bread is another practical option for catching broth, even though rice is the more familiar pairing in many Brazilian-style meals.

Put extra lime wedges and chopped cilantro on the table, along with a small dish of sliced fresh chile or a few dashes of hot sauce for anyone who wants more heat. A simple green salad with a lightly acidic dressing makes a fresh side; keep it uncomplicated so the soup remains the centerpiece. If serving guests, add the fish to the pot shortly before sitting down, since it is at its best when just cooked and still in distinct pieces.

Variations

Make it closer to a Bahian moqueca style. Use the optional dendê and finish with a little extra cilantro. Moqueca is made in different ways across Brazil, and this recipe is a soup-like, coconut-rich interpretation rather than a claim to represent every regional preparation. Some versions use different herbs, seafood, or amounts of palm oil.

Use mixed seafood. Replace up to half the fish with peeled raw shrimp or firm scallops. Add seafood according to its cooking time, and check fish with a thermometer as directed; shrimp should be opaque and firm. Avoid leaving seafood simmering in the pot longer than needed, because it can become tough.

Add a gentle chile warmth. Add one finely chopped jalapeño or a small mild fresh chile with the onion and peppers. For a hotter result, serve sliced chile at the table instead of putting a large amount into the shared pot. That keeps the base approachable for different preferences.

Use vegetables you have. A small zucchini, cut into half-moons, can be added with the peppers. It softens more quickly than the peppers, so expect a less crisp texture. For a less creamy broth, use light coconut milk, but the soup will be thinner and less rich; full-fat coconut milk gives the most satisfying body.

Storage and Reheating

Refrigerate leftovers within 2 hours of cooking, divided into shallow, covered containers so they cool promptly. Store for 3–4 days in the refrigerator. The fish will continue to soften as it sits in the broth, so for the best texture, keep any leftover rice separate and avoid repeatedly warming the whole pot.

Reheat only the portion you plan to eat in a saucepan over low to medium-low heat, stirring gently until the soup is steaming throughout and reaches 165°F (74°C), the USDA FSIS temperature for reheated leftovers. Do not let it boil hard. A microwave also works: cover loosely, heat in short intervals, and stir carefully between intervals so the fish warms evenly. Add a spoonful of stock or water if the chilled broth has thickened. Freeze leftovers in a freezer-safe container for up to 2 months for best quality; thaw overnight in the refrigerator and reheat to 165°F (74°C). Fish texture may be softer after freezing.

Frequently Asked Questions

What fish is best for Brazilian fish soup?

Choose a mild, firm fish that can be cut into chunks and hold its shape in simmering broth. Cod, snapper, mahi-mahi, and halibut are good choices. Availability varies, so ask for a firm white fish suitable for poaching. Very thin fillets can cook quickly and break up more easily, so keep their pieces larger and check them early.

Can I make this soup without coconut milk?

Yes, but it will no longer have the creamy coconut character that defines this version. Replace the coconut milk with an equal amount of additional stock for a lighter, more tomato-forward broth. You can also use light coconut milk for a less rich result, though it will have a thinner consistency. Taste and adjust the lime and salt after the substitution.

Can I prepare the soup ahead of time?

You can make the vegetable-and-coconut broth a day ahead, cool it promptly, and refrigerate it in a covered container. Reheat it to a gentle simmer, then add the fish and cook it just before serving, checking that it reaches 145°F (63°C). This approach preserves the fish’s texture better than cooking it in advance and reheating it with the soup.

Why did my coconut milk separate?

Coconut milk can separate when it is boiled vigorously or heated too hard for too long. The soup is still usable if that happens; lower the heat and stir gently to bring the broth back together as much as possible. For the smoothest result, bring the liquid to a gentle simmer, keep it there, and avoid prolonged boiling after adding the coconut milk.

How can I tell when the fish is cooked?

Check the thickest piece with a food thermometer and cook it to 145°F (63°C). The flesh should also look opaque and separate easily into flakes, but appearance alone is less reliable than checking the temperature. Fish pieces vary in thickness, so check more than one if the pieces are uneven, and return any under-temperature pieces to the broth for another minute or two.

Is this the same as moqueca?

It is inspired by moqueca, a Brazilian fish and seafood preparation with regional variations, but this recipe is written as a generous, spoonable soup. Coconut milk and dendê are associated with some Bahian-style versions, while other preparations differ in ingredients and method. Think of this as a coconut-rich Brazilian-style fish soup rather than a single definitive version of moqueca.

Related

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).