French fish soup is a fragrant coastal-style broth of white fish, tomatoes, fennel, potatoes, and herbs, served hot with toasted bread and garlicky rouille. This version takes inspiration from bouillabaisse, the fish soup associated with Provence, while using easy-to-find fish and a straightforward home-cook method. Regional and family versions vary, but a well-seasoned broth and gently cooked fish make this one satisfying.
Ingredients
- 2 lb (900 g) firm white fish fillets, such as cod, haddock, hake, or pollock, skin removed and pin bones checked
- 6 cups (1.4 L) fish stock or seafood stock, preferably lower-sodium
- ¾ cup (180 ml) dry white wine
- 2 tbsp (30 ml) olive oil
- 1 large yellow onion, about 7 oz (200 g), finely chopped
- 1 medium fennel bulb, about 9 oz (250 g), trimmed and thinly sliced; reserve a little frond for garnish if available
- 3 garlic cloves (about 9 g), finely chopped, plus 1 small clove (about 3 g) for the rouille
- 1 can (14½ oz / 411 g) crushed tomatoes
- 12 oz (340 g) waxy potatoes, such as Yukon Gold, peeled if desired and cut into ½-inch (1.3 cm) cubes
- ¼ tsp (about 0.1 g) saffron threads
- 1 bay leaf
- 1 tsp (1 g) fresh thyme leaves, or ½ tsp (0.5 g) dried thyme
- 1 tsp (5 g) kosher salt, plus more to taste
- ½ tsp (1 g) freshly ground black pepper
- ½ cup (120 g) mayonnaise, for the quick rouille
- 1 tsp (5 ml) fresh lemon juice
- ¼ tsp (0.5 g) sweet paprika
- 1 small pinch cayenne pepper, about 0.1 g
- 8 oz (225 g) baguette, sliced into ½-inch (1.3 cm) pieces
- 2 tbsp (8 g) chopped fresh parsley, for serving
Instructions
- Prepare the fish and vegetables. Cut the fish into roughly 2-inch (5 cm) pieces and keep it refrigerated while you prepare the soup. Pat it dry before adding it later; dry surfaces make it easier to handle and help prevent excess water from thinning the broth. Chop the onion and garlic, slice the fennel, and cut the potatoes into even pieces so they cook at about the same rate. Keep the fish separate from the ready-to-eat bread and garnish, and wash hands and utensils after handling raw seafood.
- Soften the aromatics. Warm the olive oil in a large, heavy pot or Dutch oven over medium heat. Add the onion and fennel with a small pinch of the measured salt. Cook for 7 to 8 minutes, stirring now and then, until they soften and the onion looks translucent. Do not rush this stage or brown the garlic: the aim is a sweet, mellow base rather than a toasted flavor. Stir in the three chopped garlic cloves and cook for about 30 seconds, just until fragrant.
- Build the broth. Add the white wine and simmer for 2 to 3 minutes, scraping up anything stuck to the bottom of the pot. Pour in the stock and crushed tomatoes, then add the potatoes, saffron, bay leaf, thyme, remaining salt, and black pepper. Stir and bring the liquid to a gentle boil. Reduce the heat so the soup simmers steadily but does not bubble hard; a vigorous boil can break up the potatoes and make the broth less clear.
- Cook the potatoes and toast the bread. Simmer the soup uncovered for about 20 minutes, or until the potato cubes are just tender when pierced with a knife. Meanwhile, heat the oven to 400°F (200°C). Arrange the baguette slices on a baking sheet and toast for 6 to 8 minutes, turning once, until dry and lightly golden at the edges. If you do not want to use the oven, toast the slices in a dry skillet over medium heat. Keep the bread crisp and serve it separately so it does not turn soggy in the pot.
- Make the quick rouille. While the soup simmers, mash the small garlic clove to a paste with a pinch of salt, or grate it finely. Stir it into the mayonnaise with the lemon juice, paprika, and cayenne. Taste and adjust the lemon or cayenne to suit your preference. Traditional rouille recipes can include bread, oil, and sometimes saffron; this mayonnaise-based shortcut is easy to mix and gives the soup a creamy, garlicky contrast, though it is less traditional.
- Poach the fish gently. Check that the potatoes are tender, then lower the fish pieces into the simmering soup in a single layer as much as the pot allows. Keep the heat low and cook for about 5 to 8 minutes, depending on the thickness of the pieces; avoid stirring vigorously, which can break them apart. Check the thickest piece with a food thermometer: USDA FSIS guidance sets 145°F (63°C) as the safe minimum internal temperature for fish. The fish should look opaque and separate into flakes, but use the thermometer rather than appearance alone to confirm safety. Remove the bay leaf and taste the broth for salt and pepper.
- Serve while hot. Ladle broth, potatoes, and fish into warm bowls. Sprinkle with parsley and a little chopped fennel frond if you have one. Put the toast and rouille on the table, letting each person spread rouille on bread or stir a small spoonful into the broth. Handle the fish carefully when ladling so the pieces stay in generous flakes.
Tips
- Choose fish that holds together. Cod, haddock, hake, and pollock are widely available and work well. A mix of two firm white fish is fine, but avoid very delicate fillets that are likely to disintegrate during poaching. If using frozen fish, thaw it safely in the refrigerator and pat it dry before cutting.
- Make the broth your own without overcomplicating it. Fish stock gives the clearest seafood flavor. If it is difficult to find, use seafood stock or a mild vegetable stock; the latter makes a less distinctly maritime soup, so taste and adjust the salt and lemon at the end. Low-sodium stock gives you more control because prepared stocks vary in saltiness.
- Use saffron carefully. A small pinch provides the soup’s floral aroma and golden color. If you do not have it, omit it rather than adding a large amount of another spice. A pinch of turmeric can imitate some of the color, but it does not taste like saffron and can shift the broth’s flavor.
- Keep the simmer gentle. Add the fish only after the potatoes are tender, and do not let the soup boil hard afterward. This reduces the chance of dry fish and broken pieces. Add salt gradually if your stock is already seasoned, then taste again just before serving.
Serving Suggestions
Serve the soup as a main course in wide, warmed bowls, making sure each portion gets both fish and potatoes. Offer the toasted baguette and rouille at the table, along with extra lemon wedges for anyone who likes a brighter broth. The contrast is part of the appeal: the soup is savory and aromatic, while the crisp bread and creamy garlic spread add texture and richness. A simple green salad with a sharp vinaigrette is a useful side if you want to round out the meal without competing with the seafood.
For a more traditional-feeling presentation, place the toast on a plate and serve the rouille in a small bowl so diners can spread it themselves. Avoid putting all the bread into the soup before serving, since it will absorb broth quickly. If you are serving guests, ladle the liquid and vegetables first, then place the fish pieces on top; that makes it easier to distribute them evenly and keeps them intact.
Variations
Add shellfish: Replace part of the fish with 12 oz (340 g) cleaned mussels or peeled, deveined shrimp. Mussels need to be added earlier than the fish and cooked until their shells open; discard any that remain closed. Shrimp cook quickly, so add them near the end and check that they are fully cooked. If you add shellfish, keep raw seafood separate from cooked garnishes and use clean utensils.
Make it without wine: Replace the ¾ cup (180 ml) wine with an equal amount of stock and add 1 to 2 tsp (5 to 10 ml) lemon juice at the end if the broth needs brightness. The soup will have a rounder, less wine-accented flavor, but it will still be aromatic and balanced.
Use a different fish mix: Salmon can replace up to half of the white fish for a richer, more pronounced flavor, though it makes the soup less like the classic Mediterranean-style version. Halibut is another firm option, while inexpensive fish trimmings can be used to flavor homemade stock; strain them out before adding the potatoes and serving fish.
Make a more traditional rouille: For a less convenient but more classic-style condiment, blend garlic with a small piece of soaked, squeezed bread, paprika, cayenne, and olive oil until thick, adding the oil gradually. Rouille recipes differ, and some include saffron or egg yolk. The mayonnaise version in this recipe is a practical shortcut and is easier to prepare consistently.
Storage and Reheating
Cool leftovers promptly and refrigerate them within 2 hours of cooking, in a covered shallow container. For the best quality, store the soup and toasted bread separately; keep the rouille covered in its own container. Cooked fish soup keeps for 3 to 4 days in the refrigerator. The fish may become more fragile as it sits, so ladle gently when portioning leftovers.
Reheat only the amount you plan to eat in a saucepan over medium-low heat, stirring carefully, until the leftovers reach 165°F (74°C). Check the temperature with a food thermometer and avoid a prolonged boil, which can make the fish tough. The bread is best refreshed in a toaster oven or oven rather than reheated in the broth. Rouille should stay refrigerated and be served cold; discard it if it has been left at room temperature for more than 2 hours.
Freezing is possible, but cooked potatoes can turn grainy and the fish may break apart after thawing. For better texture, freeze the broth with its vegetables before adding the fish, then thaw it overnight in the refrigerator, bring it to a simmer, and poach fresh fish in it. If freezing a fully assembled soup, use a freezer-safe container and plan to use it within about 2 to 3 months for best quality; thaw in the refrigerator and reheat to 165°F (74°C).
Frequently Asked Questions
What fish is best for French fish soup?
Choose firm, mild white fish such as cod, haddock, hake, or pollock. These are easy to portion and stay in recognizable pieces when gently poached. A combination works well, too. The recipe does not depend on one specific species, and using what is fresh and available is a practical choice.
Is this the same as bouillabaisse?
This is a home-style French fish soup inspired by bouillabaisse, not a claim to reproduce every regional version. Bouillabaisse is associated with Provence and has many local and household variations, often involving a broader selection of Mediterranean seafood and particular serving customs. This simplified version uses accessible fish, potatoes, and a quick rouille.
Can I make the soup ahead?
Yes. You can prepare the broth and cook the potatoes up to 1 day ahead, cool and refrigerate them promptly, then reheat the broth and add the fish just before serving. This gives you fresher, more tender fish than cooking it in advance and reheating the complete soup. Make the rouille ahead as well and keep it covered in the refrigerator.
Can I use water instead of fish stock?
You can, but the soup will taste noticeably less full and seafood-forward. If water is your only option, season carefully and consider using a mild vegetable stock instead. Avoid adding strong chicken stock, which can cover the delicate fish and fennel flavors. Taste the finished broth before adding extra salt, especially if you use prepared stock.
How do I stop the fish from falling apart?
Cut the fillets into generous pieces, add them only after the potatoes are tender, and maintain a gentle simmer rather than a rolling boil. Do not stir repeatedly once the fish is in the pot. Lift portions out with a broad spoon or ladle, and check the thickest piece for the safe temperature without repeatedly moving the rest of the fish.
Related
- Cajun Bean Soup with Andouille Sausage
- Cajun Bean Soup Mix for a Flavorful, Hearty Pot
- Cajun Beef Stew With Roux for a Rich, Spicy Supper
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).