Stuffed shells are one of those magical dishes that are both comforting and elegant. Whether you’re hosting a dinner party or looking for a family-friendly weeknight meal, this recipe has you covered. With cheesy goodness tucked inside tender pasta and baked in marinara sauce, stuffed shells deliver a satisfying bite every time. Let’s dive into how you can make these Italian-inspired delights!
What Are Stuffed Shells?
Stuffed shells are jumbo pasta shells filled with a creamy ricotta mixture and baked in a flavorful tomato sauce. This dish is not only delicious but also visually appealing, making it perfect for any occasion.
Why You’ll Love This Recipe
- Simple Ingredients: Uses kitchen staples like ricotta, spinach, and marinara sauce.
- Versatile: Customize the filling with different cheeses, meats, or veggies.
- Make-Ahead Friendly: Prep it in advance and bake when ready.
Ingredients for Stuffed Shells
Here’s what you’ll need to create this comforting classic:
The Shells
- Jumbo Pasta Shells: These hold the filling perfectly.
Tomato Sauce
- Marinara Sauce: Use a high-quality store-bought brand like Rao’s or make your own.
Ricotta Filling
- Ricotta Cheese: Creamy and essential for the filling.
- Fresh Spinach: Steamed and chopped.
- Garlic: Adds aromatic depth.
- Lemon Zest: Brightens the flavors.
- Pecorino Cheese: Adds a sharp, nutty taste.
- Oregano: Classic Italian herb.
- Red Pepper Flakes: For a hint of spice.
How to Make Stuffed Shells
Step 1: Prepare the Spinach
- Steam the spinach until it’s tender and bright green.
- Drain it in a strainer and squeeze out the moisture.
- Roughly chop the spinach and mix it with ricotta, pecorino, garlic, lemon zest, oregano, and red pepper flakes.
Step 2: Cook the Pasta
- Cook the jumbo pasta shells in boiling salted water.
- Drain them when they’re just shy of al dente since they’ll continue cooking in the oven.
Step 3: Fill the Shells
- Use a small spoon to stuff each shell with the ricotta mixture. You should have enough filling for about 18–20 shells.
Step 4: Assemble the Dish
- Preheat your oven to 425°F.
- Spread 2 cups of marinara sauce across the bottom of a 9×13-inch baking dish.
- Nestle the stuffed shells into the sauce.
Step 5: Bake
- Cover the dish with foil and bake for 20 minutes.
- Remove the foil and bake for an additional 5 minutes to lightly brown the tops.
Tips for the Best Stuffed Shells
- Don’t Overcook the Pasta: Slightly undercook the shells, as they’ll finish cooking in the oven.
- Use Fresh Ingredients: Fresh spinach, garlic, and quality marinara sauce elevate the dish.
- Prep Ahead: Assemble the dish up to 4 hours in advance and store it in the fridge.
Customizing Your Stuffed Shells
Cheese Variations
- Swap ricotta for cottage cheese or mascarpone.
- Add shredded mozzarella or fontina for extra creaminess.
Protein Additions
- Include cooked ground beef, Italian sausage, or shredded chicken in the filling.
Vegetable Boost
- Add finely diced zucchini, mushrooms, or roasted red peppers to the filling.
Nutrition Information
Nutrient | Amount (Per Serving) |
---|---|
Calories | 320 |
Protein | 12g |
Carbohydrates | 25g |
Fat | 18g |
Fiber | 4g |
FAQ: All About Stuffed Shells
1. Can I make stuffed shells ahead of time?
Yes! Assemble the dish, cover it with foil, and refrigerate for up to 4 hours before baking.
2. Can I freeze stuffed shells?
Absolutely. Assemble the dish, cover tightly with plastic wrap and aluminum foil, and freeze for up to 2 months.
3. What’s the best way to reheat leftovers?
Reheat in a 350°F oven, covered with foil, until warmed through.
4. Can I make stuffed shells gluten-free?
Yes, use gluten-free jumbo pasta shells and ensure the marinara sauce is gluten-free.
5. How do I prevent shells from sticking together?
Stir the pasta occasionally while cooking, and drizzle with a bit of olive oil after draining.
6. Can I use frozen spinach instead of fresh?
Yes, just thaw and squeeze out excess moisture before using.
Spinach and Ricotta Stuffed Shells
Total Time: 40 minutes
Yield: Serves 4
Description
Indulge in the ultimate comfort food with these cheesy, flavorful stuffed shells! Tender pasta shells are filled with a creamy ricotta-spinach mixture, nestled in rich marinara sauce, and baked to perfection. This dish is perfect for family dinners or entertaining guests, delivering classic Italian flavors with every bite.
Ingredients
- For the Shells:
- 18–20 jumbo pasta shells (uncooked)
- For the Tomato Sauce:
- 2 cups marinara sauce (store-bought or homemade)
- For the Ricotta Filling:
- 1 cup ricotta cheese
- 1 ½ cups steamed, chopped spinach
- 1 clove garlic, grated
- 1 teaspoon dried oregano
- 1 teaspoon lemon zest
- ¼ teaspoon red pepper flakes (optional)
- ⅓ cup grated pecorino cheese
- Salt and black pepper, to taste
- For Garnish (Optional):
- Fresh basil leaves
- Additional grated pecorino cheese
Instructions
- Prepare the Spinach:
- Steam the spinach until tender and vibrant green. Transfer to a strainer and squeeze out all excess moisture. Roughly chop.
- Mix the Filling:
- In a large mixing bowl, combine the ricotta cheese, steamed spinach, grated garlic, oregano, lemon zest, red pepper flakes, and pecorino cheese. Season with salt and pepper. Stir until well blended.
- Cook the Pasta Shells:
- Boil the jumbo pasta shells in salted water until just shy of al dente. Drain and rinse with cold water to stop the cooking process.
- Stuff the Shells:
- Use a small spoon to fill each pasta shell with the ricotta mixture.
- Assemble the Dish:
- Preheat your oven to 425°F (220°C). Spread 2 cups of marinara sauce evenly across the bottom of a 9×13-inch baking dish. Nestle the stuffed shells into the sauce in a single layer.
- Bake:
- Cover the baking dish with aluminum foil and bake for 20 minutes. Remove the foil and bake for an additional 5 minutes, allowing the tops of the shells to lightly brown.
- Serve:
- Remove from the oven and garnish with fresh basil leaves and extra pecorino cheese if desired. Serve hot and enjoy!
Notes
This stuffed shells recipe is simple, satisfying, and sure to become a family favorite. Whether served with a crisp salad or crusty garlic bread, it’s the perfect dish for any occasion!
- Prep Time: 15 minutes
- Cook Time: 25 minutes
- Category: Main Course
- Method: Baking
- Cuisine: Italian
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/forurenergy.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:””,”postId”:1029};
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()
);
(function(){
document.querySelectorAll(‘[data-tr-ingredient-checkbox]’).forEach(function(el) {
var input = el.querySelector(‘.tr-ingredient-checkbox-container input[type=”checkbox”]’);
if ( ! input ) {
return;
}
if (input.checked) {
el.dataset.trIngredientCheckbox = ‘checked’;
}
el.addEventListener(‘click’, function(event) {
if ( ‘A’ === event.target.nodeName
|| ‘INPUT’ === event.target.nodeName
|| ‘LABEL’ === event.target.nodeName ) {
return;
}
input.click();
});
input.addEventListener(‘change’, function() {
el.dataset.trIngredientCheckbox = input.checked ? ‘checked’ : ”;
});
});
}());
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 );
});
The post Spinach and Ricotta Stuffed Shells appeared first on FOR UR ENERGY RECIPES.