Easy Fish Chowder
This Easy Fish Chowder recipe tastes better the longer it sits! Make a big pot over the weekend and enjoy for lunch or dinner all week!
*Originally published Sept 2016. Updated Dec 2024*
Hi Friends!
Have you ever spent time looking for the best of all fish chowder recipes? This is it. I’ve been eating it since I was a little girl and now make it often for my own family.
My Maine Fish Chowder Recipe
Every summer while I was growing up, my mom, sister and I would head out to Maine to spend a couple of weeks with my aunt. Aside from fresh Maine lobster and hot dogs, both of which don’t involve a whole lot of cooking, the one thing we ate every year on this trip was this simple fish chowder.
One of my biggest contributions as a kid was always standing over the sink peeling the potatoes…but aside from that and chopping up potatoes, onion and bacon, that’s really all there is to it!
Quick and Easy Fish Chowder Recipe
This simple fish chowder recipe is beginner-friendly and requires minimal ingredients. It’s also easy to customize. If you want to throw in some extra veggies, feel free! Want to add more seafood? You could definitely add shrimp, clams etc.
Easy Fish Chowder Ingredients
Here’s the basic list of ingredients for this recipe:
- Bacon – just a few slices adds a lot of flavor
- Onion – I often sub sliced leeks for onions so feel free to do that!
- Potatoes- You can use peeled white potatoes, or feel free to sub yellow or red potatoes with the skin on if you prefer
- Broth – chicken or vegetable broth both work
- Fish – You want a mild white fish. Haddock is my favorite but can be hard to find so I often use cod
- Old Bay – A crucial ingredient for the chowder flavor!
Simple Fish Chowder with Step by Step Directions
To make the chowder just follow a few simple steps:
- Saute the bacon, onions and potatoes.
- Add broth, spices and fish.
- Stir in milk or cream and serve!
What should I serve with fish chowder?
This is a hearty soup that makes a great meal all on it’s own. Don’t forget to top with oyster crackers or serve with some crusty bread for dipping.
You could easily pair with a side salad for a nice balanced meal!
What is chowder? What makes chowder different than soup?
Traditionally, chowder is thicker, richer and creamier than most soups. Chowder broth is often thickened with flour and cream, although this recipe does not use any flour.
What are the different types of chowder?
- Manhattan clam chowder is easily recognizable because it uses a tomato-based broth.
- New England clam chowder is more popular. It is made with a thick and creamy white broth and usually contains a mix of clams, potatoes, bacon and celery.
- Long Island clam chowder is made with a creamy tomato-based broth.
- Rhode Island clam chowder is similar to New England versions but with a much thinner broth that isn’t creamy.
- Seafood chowder or fish chowder typically contain fish or a mix of shrimp ,fish and other seafood instead of just clams.
Can I use seafood instead of fish? What are the easy seafood chowder ingredients?
Yes! If you’re making this chowder, consider this a base recipe. Use the same ingredient list but feel free to add in some clams, mussels, shrimp etc if you prefer those!
Easy Fish Chowder Recipe
Here’s how you make this super easy fish chowder:
Easy Fish Chowder Recipe
This Easy Fish Chowder tastes better than longer it sits! Make a big pot over the weekend and enjoy for lunch or dinner all week!
- Prep Time: 5 minutes
- Cook Time: 20 minutes
- Total Time: 25 minutes
- Yield: Serves 4-6
Ingredients
- 1 Tbsp oil
- 3 slices bacon, diced
- 2/3 cup diced onion
- 2 medium white potatoes, peeled and diced
- 2 c chicken or vegetable broth
- 1.5 – 2 pounds Haddock (or cod) fillets, skin removed
- 1–2 tsp Old Bay
- salt and pepper, to taste
- 3 cups 2% milk, whole milk or half & half
Instructions
- Heat oil in a large pot or dutch oven over medium heat. Saute bacon, onion and potatoes for 10 minutes, stirring frequently.
- Add broth and lay fish on top of potatoes in pot. (Don’t worry about cutting it up. It will flake apart when cooked)
- Add the Old Bay, salt and pepper. Bring the mixture to a boil, reduce heat to medium, cover and cook until fish and potatoes are cooked through, about 10 minutes. Use a spatula to break the fish into chunks.
- Reduce the heat and add the milk or half and half. Heat through but don’t boil.
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.theleangreenbean.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:””,”postId”:23005};
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.smoothScroll = {
init() {
document.addEventListener( ‘click’, ( e ) => {
let anchor = e.target;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}
if ( ! anchor || ! anchor.classList.contains( ‘tasty-recipes-scrollto’ ) ) {
return;
}
const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}
e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const element = document.querySelector( selector );
if ( ! element ) {
return;
}
element.scrollIntoView( { behavior: ‘smooth’ } );
}
};
document.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}
const cookModes = document.querySelectorAll(this.cookModeSelector);
if (cookModes.length > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘input[type=”checkbox”]’).addEventListener(“change”, event => {
this.checkboxChange(event.target);
}, false);
} else {
cookMode.style.display = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = document.querySelectorAll(this.cookModeSelector + ‘ input[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
try {
this.wakeLock = await this.wakeLockApi.request(“screen”);
this.wakeLock.addEventListener(“release”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.release();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
document.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.staticTooltip = {
element: null,
tooltipElement: null,
deleting: false,
init( element ) {
if ( this.deleting ) {
return;
}
this.element = element;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}
this.deleting = true;
this.tooltipElement.classList.remove( ‘opened’ );
setTimeout( () => {
this.tooltipElement.remove();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = document.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );
const currentTooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
document.body.replaceChild( tooltipElement, currentTooltipElement );
} else {
document.body.appendChild( tooltipElement );
}
this.tooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
},
show() {
if ( ! this.tooltipElement ) {
return;
}
const tooltipTop = this.element.getBoundingClientRect().top
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().height;
const tooltipLeft = this.element.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.element.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );
this.tooltipElement.setAttribute( ‘style’, ‘top:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );
},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.remove( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};
window.TastyRecipes.ajax = {
sendPostRequest( url, data, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.send( this.preparePostData( data ) );
xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.status === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}
failure( xhr );
};
xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( data ) {
const formData = new FormData();
for ( const key in data ) {
formData.append( key, data[key] );
}
return formData;
},
};
window.TastyRecipes.ratings = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;
this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const ratings = document.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( ratings.length {
event.preventDefault();
this.defaultRating = event.target.closest( ‘.checked’ ).dataset.rating;
this.setCheckedStar( event.target );
this.maybeSendRating( this.defaultRating, event.target );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click’, e => {
// Bailout (don’t remove the tooltip) when the clicked element is a rating star, or it’s the tooltip itself.
if ( e.target.closest( ‘.tasty-recipes-rating’ ) || e.target.classList.contains( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}
window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( rating ) {
const ratingInput = document.querySelector( ‘#respond .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = document.querySelectorAll( ‘input.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click’, currentEvent => {
const selectedRating = currentEvent.target.getAttribute( ‘value’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( rating ) {
if ( rating < this.minRating ) {
document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );
return;
}
document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( rating ) {
const commentTextarea = document.getElementById( 'comment' );
if ( ! commentTextarea ) {
return;
}
if ( rating {
window.TastyRecipes.staticTooltip.changeMessage( response.data.message );
window.TastyRecipes.staticTooltip.show();
this.updateAverageText( response.data, recipeCardElement );
this.maybeFillCommentForm( response.data );
// Hide the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.data, rating );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( data, recipeCardElement ) {
if ( ! data.average ) {
return;
}
this.setRatingPercent( data );
if ( ! data.count ) {
return;
}
const quickLink = document.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, data );
this.setPartialStar( quickLink );
}
const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = data.average;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), data );
},
setTextInContainer( container, data ) {
if ( ! container ) {
return;
}
if ( data.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = data.label;
}
return;
}
const averageElement = container.querySelector( ‘.average’ );
if ( averageElement ) {
averageElement.textContent = data.average;
}
const countElement = container.querySelector( ‘.count’ );
if ( countElement ) {
countElement.textContent = data.count;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( data ) {
this.defaultRating = data.average.toFixed( 1 );
const parts = data.average.toFixed( 2 ).toString().split( ‘.’ );
this.currentRatingPercentage = parts[1] ? parts[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( target ) {
const cardRatingContainer = target.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}
const thisStar = target.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( data ) {
if ( ! data.comment || ! data.comment.content ) {
return;
}
const commentForm = document.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}
const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.value ) {
return;
}
// Add comment details for editing.
commentBox.innerHTML = data.comment.content;
if ( data.comment.name ) {
commentForm.querySelector( ‘[name=author]’ ).value = data.comment.name;
commentForm.querySelector( ‘[name=email]’ ).value = data.comment.email;
}
},
maybeResetTooltip( recipeCardElement, data, rating ) {
if ( this.savingRating === rating ) {
this.resetTooltip( recipeCardElement, data );
}
},
resetTooltip( recipeCardElement, data ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;
// Reset the default rating.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;
this.resetSelectedStar( cardRatingContainer, data );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}
const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = document.querySelector( ‘#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.display.includes( ‘flex’ ) ) {
ratingsButtons.style.direction = ‘rtl’;
}
if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Select the rating that was previously selected in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}
const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click’, event => {
if ( ratingSpan === event.target ) {
return;
}
ratingSpan.previousElementSibling.click();
} );
}
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );
});
Fish Chowder FAQs
What fish is good for chowder? Can I make this fish chowder with cod?
We always used haddock when we made it growing up but it turns out that can be hard to find here in Ohio so I typically use cod and it works great. Really any thick, meaty white fish should work great!
Should I use fish stock?
This recipe does not use fish stock. You could substitute some or all of the chicken broth for fish stock if you want to but it isn’t necessary.
Can I freeze fish chowder?
While this isn’t my absolute favorite dish to freeze, it can be frozen. Make sure it is cooled completely and be aware that the texture might change slightly when it’s reheated. To minimize this, reheat very slowly at a low temperature.
Is this a healthy fish chowder? Is it better to use heavy cream or milk?
Yes, this soup is overall fairly healthy. Whether to finish with heavy cream or milk is a personal preference. I most often ate it with heavy cream growing up and I most often make it with 2% milk now as an adult. The heavy cream or whole milk will give it a much richer taste and make the broth more white and creamy.
I use 2% milk and the broth is not quite as thick but ends up being the perfect richness for me.
What is Old Bay Seasoning?
Old Bay is a pre-mixed seasoning blend that’s made with a mix of celery salt, peppers, paprika and other spices. It’s a very distinct flavor and when a recipe calls for it, I tend to use it without substitute to achieve the desired flavor.
Do I have to make fish chowder with bacon?
The bacon is optional but I personally think it adds a ton of flavor to the soup. With so few ingredients, the bacon flavor can really shine through and pairs well with hearty white fish and potatoes.
Is this easy fish chowder gluten-free?
Yes. This recipe is gluten-free as written as long as you get gluten-free oyster crackers if needed.
How can I turn this into a simple fish soup? What about dairy-free fish chowder?
To make this a fish soup recipe, leave out the cream/milk at the end and add some extra veggies! This would essentially make it a dairy-free fish chowder. Or you could try subbing almond milk or coconut milk for the milk/heavy cream for a dairy-free version.
Also, note I garnished mine with extra bacon and some parsley for photos but that’s definitely not required. Turns out soup made with white fish, white potatoes and milk/cream really isn’t that visually appealing…but luckily it doesn’t impact the taste!
Looking for other fish-based soups?
Enjoy!
–Lindsay–