Quick Recipe Version (TL;DR)
Quick Ingredients
- 1.5 lb flaky white fish (cod, haddock, or halibut), cut into 1.5-inch chunks
- 2 tbsp unsalted butter + 1 tbsp olive oil
- 1 large yellow onion, finely diced
- 2 ribs celery, thinly sliced
- 2 cloves garlic, minced
- 1.5 lb Yukon Gold potatoes, peeled and 1/2-inch diced
- 4 cups seafood stock (or low-sodium chicken stock)
- 1 cup bottled clam juice (or more stock)
- 1/4 cup dry white wine (optional)
- 1 bay leaf + 1 tsp fresh thyme leaves (or 1/2 tsp dried)
- 1 tsp Old Bay seasoning
- 1 cup half-and-half + 1/2 cup whole milk
- 1 tsp lemon zest + 2 tbsp lemon juice
- 2 tbsp chopped fresh parsley + 1 tbsp chopped fresh dill
- 1 1/2 tsp kosher salt + 1/2 tsp black pepper (to taste)
Do This
- 1. Heat butter and oil in a 5–6 qt pot over medium heat. Sauté onion and celery 5 minutes until translucent; add garlic 30 seconds.
- 2. Deglaze with wine (optional) 30 seconds. Add stock, clam juice, potatoes, bay leaf, thyme, Old Bay, salt, and pepper.
- 3. Bring to a gentle simmer and cook 12–15 minutes, until potatoes are just tender.
- 4. Add fish in an even layer. Maintain a light simmer (about 190°F); cook 4–6 minutes until opaque and flaky (140–145°F internal).
- 5. Reduce heat to low. Stir in half-and-half and milk; warm 2 minutes without boiling.
- 6. Off heat, stir in lemon zest and juice, parsley, and dill. Cover 5 minutes, taste and adjust seasoning, then serve.
Why You’ll Love This Recipe
- Lightly creamy, herb-forward broth that lets the sweet fish and potatoes shine.
- Weeknight-easy: one pot, under an hour, minimal fuss.
- Coastal flavors with simple pantry staples and fresh herbs.
- Flexible base that welcomes swaps and add-ins without losing its charm.
Grocery List
- Produce: 1 large yellow onion, 2 ribs celery, 1.5 lb Yukon Gold potatoes, 2 cloves garlic, 1 lemon, fresh parsley, fresh dill.
- Dairy: Half-and-half, whole milk, unsalted butter.
- Pantry: 1.5 lb flaky white fish (cod/haddock/halibut), seafood stock or low-sodium chicken stock, bottled clam juice, dry white wine (optional), olive oil, bay leaf, thyme, Old Bay seasoning, kosher salt, black pepper, crusty bread (for serving, optional).
Full Ingredients
Seafood
- 1.5 lb flaky white fish (cod, haddock, or halibut), skin removed, cut into 1.5-inch chunks
Vegetables & Aromatics
- 1 large yellow onion, finely diced
- 2 ribs celery, thinly sliced
- 1.5 lb Yukon Gold potatoes, peeled and cut into 1/2-inch cubes
- 2 cloves garlic, minced
Liquids
- 4 cups seafood stock (or low-sodium chicken stock)
- 1 cup bottled clam juice (or additional stock)
- 1/4 cup dry white wine (optional, for deglazing)
- 1 cup half-and-half
- 1/2 cup whole milk
Herbs & Seasonings
- 1 bay leaf
- 1 tsp fresh thyme leaves (or 1/2 tsp dried thyme)
- 1 tsp Old Bay seasoning
- 1 1/2 tsp kosher salt, plus more to taste
- 1/2 tsp freshly ground black pepper, plus more to taste
- 1 tsp finely grated lemon zest
- 2 tbsp fresh lemon juice
- 2 tbsp chopped fresh parsley
- 1 tbsp chopped fresh dill
Fats
- 2 tbsp unsalted butter
- 1 tbsp olive oil
To Serve (Optional)
- Warm crusty bread and extra chopped herbs

Step-by-Step Instructions
Step 1: Prep the fish and vegetables
Pat the fish dry and cut into 1.5-inch chunks. Keep it chilled until needed. Peel and cube the potatoes into 1/2-inch pieces. Finely dice the onion, slice the celery, and mince the garlic. Zest the lemon, then juice it.
Step 2: Sweat the aromatics
In a 5–6 quart Dutch oven or heavy pot, melt the butter with the olive oil over medium heat. Add the onion and celery and cook, stirring occasionally, until translucent and fragrant, about 5 minutes. Stir in the garlic and cook 30 seconds more.
Step 3: Build the broth and simmer the potatoes
Deglaze with the wine (if using) and let it reduce for 30 seconds. Add the seafood stock, clam juice, potatoes, bay leaf, thyme, Old Bay, 1 1/2 tsp kosher salt, and 1/2 tsp black pepper. Bring to a gentle simmer over medium heat. Adjust heat to maintain a low simmer (about 185–195°F) and cook until the potatoes are just tender, 12–15 minutes.
Step 4: Poach the fish gently
Lay the fish pieces into the simmering broth in an even layer. Keep the heat low so the liquid barely bubbles. Poach until the fish is opaque and flakes easily, 4–6 minutes. If you check with a thermometer, aim for 140–145°F in the thickest piece.
Step 5: Add dairy for a lightly creamy finish
Reduce the heat to low. Stir in the half-and-half and milk. Warm gently for 2 minutes; do not boil after adding dairy to keep the broth silky and prevent curdling.
Step 6: Brighten with lemon and herbs
Remove the pot from the heat. Stir in the lemon zest and juice, parsley, and dill. Taste and adjust salt and pepper as needed—broth and clam juice vary in salinity, so you may need a pinch more salt.
Step 7: Rest and serve
Cover and let the chowder rest for 5 minutes so the flavors meld. Remove the bay leaf. Ladle into warm bowls, garnish with a few extra dill fronds or parsley if you like, and serve with crusty bread.
Pro Tips
- Keep the fish cold and add it last so it stays tender and flakes beautifully.
- Maintain a gentle simmer—boiling can toughen fish and split dairy. Aim for small, lazy bubbles.
- Season in layers but taste before salting at the end; clam juice and stock can be naturally salty.
- Use Yukon Gold potatoes for creamy texture without a heavy roux; their starch subtly thickens the broth.
- Warm your bowls to help the chowder stay hot at the table.
Variations
- Smoky Bacon and Corn: Cook 4 oz diced bacon until crisp. Sauté the onion and celery in 1 tbsp bacon fat plus 1 tbsp butter. Add 1 cup corn kernels with the potatoes. Reduce added salt slightly.
- Extra-Creamy New England Style: Stir 1 tbsp flour into the sautéed onions and celery; cook 1 minute. Use 1 1/2 cups half-and-half (skip the milk) and simmer gently for a thicker chowder.
- Dairy-Free Coastal: Replace butter with 2 tbsp olive oil and use 1 cup unsweetened cashew cream or 3/4 cup full-fat coconut milk. Finish with extra lemon and dill for brightness.
Storage & Make-Ahead
Best texture is same day. Leftovers keep 1–2 days in the refrigerator. Reheat gently over low heat until steaming hot (about 165°F); avoid boiling to keep the fish tender and dairy smooth. For make-ahead, cook the broth with potatoes through Step 3, cool, and refrigerate up to 3 days. When ready to serve, bring to a simmer, add the fish and cook through, then add dairy, lemon, and herbs. Freezing is not recommended once dairy and fish are added. You can freeze the broth-with-potatoes base (no fish, no dairy) for up to 3 months.
Nutrition (per serving)
Approximate values for 1 of 6 servings: 320 calories; 24 g protein; 12 g fat; 30 g carbohydrates; 2 g fiber; 780 mg sodium; 60 mg cholesterol. Values will vary with fish type, stock, and salt level.
