Desserts
This classic fish pie recipe delivers all the comfort of a British pub dinner with its signature crispy potato topping and flaky pastry filling. The secret lies in parboiling the potatoes for a tender yet sturdy crust, while the fish remains perfectly flaky beneath a rich béchamel sauce.
I've perfected this technique over years of weekend baking, ensuring every layer works together for that iconic golden finish.
What sets this recipe apart is the balance between tradition and simplicity—no shortcuts that compromise texture. The fish, typically haddock or cod, cooks gently in the oven while the potato topping develops that signature crackling crust.
The béchamel, lightly seasoned with nutmeg and white wine, adds depth without overpowering the delicate fish flavor. This isn't just a dish; it's a nostalgic experience that transforms a weeknight into a special occasion.
The result is a pie with a crispy potato topping that shatters at the edges, a flaky pastry layer that melts in your mouth, and tender fish swimming in a velvety sauce. The aroma alone—warm, buttery, and slightly cheesy—will have everyone gathered at your table.
Served with a simple green salad or steamed vegetables, this pie becomes the centerpiece of any meal, delivering restaurant-quality comfort at home.
For those looking to elevate the classic, consider adding a layer of puff pastry beneath the potato topping or incorporating smoked fish for extra depth. The key is patience—allowing the potatoes to parboil thoroughly and the pie to bake until the edges are deeply golden.
This is the kind of recipe that improves with each bite, and once you master it, you'll never go back to store-bought versions.
Ingredients for classic fish pie
Pantry staples meet British pub magic—just 14 ingredients for golden perfection.
| Ingredient | Amount | Notes |
|---|---|---|
| Haddock Fillets 🐟 | 1 ½ lb | Skinless, boneless, cut into chunks |
| Cod Fillets 🐟 | 1 lb | Skinless, boneless, cut into chunks |
| Russet Potatoes 🥔 | 2 lb | Waxy potatoes preferred, peeled |
| Unsalted Butter 🧈 | ¾ cup | Cold, cubed for topping |
| All-Purpose Flour 🌾 | ¼ cup | For béchamel base |
| Whole Milk 🥛 | 1 ½ cups | Full-fat for creaminess |
| Dry White Wine 🍷 | ½ cup | Sauvignon Blanc preferred |
| Fresh Nutmeg 🌿 | ¼ tsp | Freshly grated, for depth |
| Salted Butter 🧈 | 2 tbsp | For pastry layer |
| All-Purpose Flour 🌾 | 1 ½ cups | Plus 1 tsp cold water |
| Large Egg 🥚 | 1 whole | For pastry binding |
| Fresh Parsley 🌿 | ¼ cup | Chopped, for garnish |
| Sea Salt 🧂 | 1 ½ tsp | Kosher or fine grain |
| Ground Black Pepper 🌶️ | ½ tsp | Freshly cracked |
The fish is the heart of this pie, so haddock and cod are your best bets—they stay flaky and absorb flavors beautifully. Whole Foods or Trader Joe's usually carry fresh fillets, but frozen works too if you thaw them overnight in the fridge. Look for fillets with vibrant color and minimal fishy smell. If you can't find haddock, pollock or tilapia hold up well too, but cod is non-negotiable for that classic texture. For the potatoes, Russets are key—they hold shape when parboiled but still mash up nicely for the topping. Skip the waxy varieties like Yukon Golds, or you'll end up with a gluey mess.
No white wine? Fish or chicken stock with a splash of lemon juice works in a pinch, but the acidity helps balance the richness. The nutmeg is crucial—pre-grated loses potency fast, so buy a whole nutmeg and grate what you need. For the pastry, cold butter is everything. Cut it into tiny cubes and keep it chilled until mixing. Short on butter? Lard or coconut oil can substitute, but the flavor won't be the same. The parsley is just for garnish, but fresh herbs make all the difference—dried won't give that bright pop of color. And don't skip the egg in the pastry; it's what makes it truly flaky.
This pie tastes even better the next day, so make it ahead if you can. Store covered at room temp for up to 2 days, or freeze the whole pie (unbaked) for 3 months. The potatoes start to dry out if left exposed, so always cover tightly. For serving, a quick broil for 2-3 minutes before eating brings back that crispy edge. Leftovers reheat beautifully in the oven at 350°F until bubbly—just add a splash of milk to keep the sauce from drying out.
Why You'll Love This Recipe
- One-Pan Magic: The potatoes boil right in the same dish—no extra pots to wash. Just peel, slice, and layer while the fish cooks in its buttery sauce. (Yes, even on a Tuesday night.)
- Creamy-Crisp Perfection: That golden crust from the flour-butter mix? It’s the best part—crispy enough to hold your fork, creamy enough to make you sigh. The haddock and cod melt into flakes, so tender they disappear.
- Leftover Hero: This pie actually improves the second day. The flavors meld overnight, and reheating it is just microwaving with a splash of milk. (My kids beg for it cold too—no judgment.)
- Budget-Friendly Feast: A single bag of potatoes and a couple of fillets stretch for a family of four. No fancy ingredients, just honest, satisfying comfort. Honestly, it’s my go-to when I’m broke but still want to feel fancy.
Step-by-step instructions for classic fish pie
Here's how to build a proper fish pie with a golden crust and silky filling.
Prepare the Fish Filling
Preheat your oven to 375°F. In a large oven-safe dish, combine the 1.5 lb haddock fillets and 1 lb cod fillets cut into chunks. Season generously with 1 tsp sea salt and 0.25 tsp ground black pepper. The fish should be evenly coated but not packed down.
Pour in the 0.5 cup dry white wine and let it sit for 10 minutes while you prepare the béchamel. This marinade adds depth of flavor and keeps the fish tender. Don't skip this step—it makes all the difference in a classic fish pie.
Make the Creamy Béchamel Sauce
In a medium saucepan, melt the 0.75 cup unsalted butter over medium heat until foaming. Whisk in the 0.25 cup all-purpose flour and cook for 1-2 minutes until the mixture turns golden and smells nutty. This is your roux—the flavor foundation for the sauce.
Gradually whisk in the 1.5 cups whole milk until smooth. Add the 0.25 tsp fresh nutmeg and remaining 0.5 tsp sea salt. Simmer for 5-7 minutes until the sauce thickens enough to coat the back of a spoon. It should be silky but not gluey—this is the perfect consistency for a rich, velvety filling.
Assemble the Fish Layer
Pour the béchamel sauce over the marinated fish in the dish. Stir gently to combine, making sure every piece of fish is coated. The sauce should just cover the fish—you want a thick layer that will set properly when baked. Sprinkle the 0.25 cup chopped fresh parsley over the top for freshness and color.
Here's the thing—don't overmix. A few gentle stirs are all you need. Overworking the fish will make it tough. Cover the dish loosely with foil and bake for 20 minutes to let the filling set and flavors meld.
Prepare the Crispy Potato Topping
While the fish bakes, peel and thinly slice the 2 lb russet potatoes into ⅛-inch thick rounds. You'll need about 4 cups of slices. Soak them in cold water for 5 minutes to remove excess starch, then drain and pat dry thoroughly with paper towels. Wet potatoes steam instead of crisping.
In a large skillet, melt the 2 tbsp salted butter over medium heat. Arrange the potato slices in a single layer, slightly overlapping. Cook for 3-4 minutes per side until golden brown and crispy. They should be tender when pierced with a fork but still hold their shape. Transfer to a paper towel-lined plate to drain excess fat.
Build the Flaky Pastry Layer
In a large bowl, combine the 1.5 cups all-purpose flour, 0.5 tsp sea salt, and 0.25 tsp ground black pepper. Cut in the 2 tbsp salted butter until the mixture resembles coarse crumbs. Add the 1 whole large egg and 1 tsp cold water, then mix with a fork until the dough just comes together.
Turn the dough onto a lightly floured surface and roll it out to about ⅛-inch thickness. Cut into strips about 2 inches wide and lay them diagonally over the potato topping. This creates that classic lattice pattern that lets steam escape while keeping everything crispy. Brush the pastry lightly with milk for extra browning.
Bake to Golden Perfection
Return the assembled pie to the oven and bake for 25-30 minutes until the pastry is deep golden brown and the filling is bubbling. The edges should be crisp, and the top should look like it's about to crack—this is what you're aiming for. If the pastry browns too quickly, tent it loosely with foil.
Let the pie rest for 10 minutes before serving. This resting time lets the filling set properly and makes it easier to slice. Serve with a simple green salad and crusty bread to soak up every last bit of that creamy, flavorful sauce.
Pro Tips For Making Classic Fish Pie
- PRE-COOK THE FISH: Haddock and cod fall apart when baked raw—poach them first in lightly salted water (or milk, for extra tenderness) for 3-4 minutes until just opaque. I learned this the hard way after serving rubbery fish in my first attempt. Drain well and pat dry before assembling, or your pie will turn soggy.
- GRATE POTATOES HOT: Use a mandoline or box grater on fresh, unpeeled russets straight from the oven (after microwaving 5-6 minutes to soften). The residual heat keeps them from oxidizing, and the skin adds texture. Skip the soak—just squeeze out excess moisture with a clean towel before mixing with butter.
- DON’T SKIP THE BUTTER MELT: Melt 2 tablespoons of unsalted butter into the flour for the roux before adding milk—this prevents lumps and gives the sauce a velvety finish. I used to rush this step and ended up with a gluey mess. Low and slow (2-3 minutes) is the only way.
- BAKE COVERED THEN UNCOVERED: Cover the pie with foil for the first 20 minutes to steam the potatoes, then uncover to let the sauce thicken and crust lightly. This two-step method guarantees a fluffy potato layer and a golden top without burning. Resist the urge to peek—trust the process.
Troubleshooting great classic fish pie
Sauce Too Thin
If your béchamel sauce is too thin after simmering, it’s likely because the milk didn’t reduce enough. The fix? Return the sauce to medium-low heat and simmer uncovered for an additional 5-7 minutes, stirring constantly.
For extra thickening power, whisk in 1 tsp cornstarch mixed with 1 tbsp cold milk until smooth. This slurry will thicken instantly without altering the flavor. 💡
Potatoes Not Crispy
Crispy potato topping is non-negotiable for a classic fish pie, so if yours turns out soggy, start with thinner slices (⅛-inch thick) and ensure they’re completely dry before cooking.
Cook them in batches over medium-high heat until golden brown and crisp, then drain on a wire rack—not paper towels—to maintain crispness. If they’re still undercooked, broil for 1-2 minutes at the end.
Pastry Too Tough
A tough pastry layer ruins the whole dish. Overworking the dough or using warm butter are the usual culprits. Keep everything cold—chill the dough for 15 minutes before rolling, and use cold butter.
If the dough feels dry, add 1 tsp cold water at a time until it just holds together. For extra flakiness, fold the dough in half once before rolling it out. 🌟
Fish Overcooked
Fish cooks quickly and becomes rubbery if overdone. The key is timing—remove the pie from the oven when the internal temperature of the fish reaches 145°F (about 20 minutes after the initial bake).
If it’s still undercooked, cover loosely with foil and return to the oven for 5-10 minutes to finish gently. Never skip the marinade or the initial 20-minute bake before adding the potato topping.
Filling Too Watery
A watery filling usually means the fish released too much liquid or the sauce didn’t set properly. Drain any excess liquid from the fish before adding the béchamel, and ensure the sauce is thick enough to coat the back of a spoon before assembling.
If the filling still looks watery after baking, sprinkle ½ tsp cornstarch over the top before adding the potato layer—it’ll absorb the moisture during baking.
Pie Not Browning
If your pie isn’t browning, it’s likely because the pastry isn’t hot enough or the oven isn’t calibrated. Preheat your oven to 375°F for at least 15 minutes before baking. Brush the pastry with a milk wash (equal parts milk and water) before baking for extra color.
If it’s still pale, broil for 1-2 minutes at the end, watching closely to avoid burning.
Nutrition facts
Frequently asked questions
What's the best fish for a classic fish pie?
Haddock and cod are the traditional choices—they stay flaky and absorb flavors beautifully. For a richer taste, try smoked haddock or add a mix of pollock and tilapia. Avoid fish with strong flavors like tuna or mackerel, as they can overpower the delicate béchamel sauce.
Can I make this pie ahead of time?
This pie actually tastes better the next day. Assemble it completely (including the pastry topping) and refrigerate for up to 24 hours before baking. For longer storage, freeze the unbaked pie for 3 months. Just add 10-15 minutes to the baking time if using frozen.
How do I get the perfect crispy potato topping?
Thin, even slices (⅛-inch thick) are key, and they must be completely dry before cooking. Use russet potatoes—they hold shape better than waxy varieties. Cook them in batches over medium-high heat until golden, then drain on a wire rack (not paper towels) to maintain crispness.
What can I substitute if I don't have white wine?
Use fish or chicken stock with a splash of lemon juice or apple cider vinegar for acidity. For a non-alcoholic option, try dry vermouth or even grape juice. The important thing is a little acidity to balance the richness of the béchamel.
Can I make this pie without pastry?
Yes! For a simpler version, skip the pastry and bake the potato topping directly on the fish filling. Press the crispy potato slices tightly together (like a potato "roof") and bake until golden. This still gives that satisfying texture contrast, just without the flaky pastry layer.