This apple cranberry crisp combines tart recent berries and candy apples with a golden, buttery oat topping. It’s the proper simple dessert for a crowd!
As an enormous fan of apple crisp, I’ve discovered a dessert I would love even a little bit bit extra: apple cranberry crisp! The tartness of recent berries melds with candy, cozy crisp apples in a cinnamon-spiced fruit layer.
The berries add a zingy taste and a shiny purple shade to the fruit layer that’s topped with golden buttery crisp crumbles. This apple cranberry crisp has turn out to be a staple in my fall and winter baking rotation. It feels festive sufficient for a Thanksgiving or Christmas unfold, however is easy sufficient for a comfortable evening in.
Why This Recipe Works
Including cranberries to your apple crisp or apple crumble enhances the flavour, form of like in a strawberry rhubarb pie. Right here is why this model has earned a everlasting spot in my recipe field:
- Zingy candy tart taste: Apples are candy, however baking them with cranberries creates a sweet-tart complexity.
- Excellent crumble texture: The fruit filling cooks down right into a jammy compote that contrasts the crunch of the rolled oats and butter topping.
- Versatility: It really works brilliantly with recent or frozen cranberries, making it a year-round choice
Ingredient Highlight: What You Want
This apple cranberry crisp is a spin on the basic apple dessert with a handful of recent cranberries thrown within the combine. Right here’s what you want:
- Apples: You need agency, crisp, sweet-tart cooking apples. Pink Woman and Honeycrisp are my favorites for baking as a result of they maintain their form, however Granny Smith or Golden Scrumptious are additionally wonderful decisions.
- Cranberries: This works with recent or frozen berries. It’s a terrific thought for utilizing up leftover recent cranberries from cranberry sauce, or purchase a bag and use the remaining in bread, muffins or a smoothie.
- Orange Zest: Don’t skip this! Orange provides a floral aroma that completely brings out the flavour of the filling.
- Cornstarch: This thickens the juices launched by the fruit so the underside layer doesn’t get soupy.
- Outdated-Original Rolled Oats: These present the basic chew and rustic look. I keep away from fast oats right here as they’ll get too mushy.
- Butter: Chilly butter is crucial for creating these distinct, crumbly nuggets of topping.
- Sugars: I take advantage of a mixture of granulated sugar for the fruit and brown sugar for the topping. (Maple syrup or honey don’t work as sweeteners as a result of it makes for soggy crumbles.)

Learn how to Make Apple Cranberry Crisp
This recipe comes collectively rapidly, which is why it’s considered one of my high Thanksgiving desserts. Listed here are my ideas for getting it proper each time (or leap to the recipe under):
1. Prep the Fruit
I like to chop my apples into ½-inch chunks relatively than slices. I discover that chunks make the crisp simpler to scoop and eat. Toss the apples and cranberries with the sugar, cornstarch, cinnamon, and orange zest proper within the baking dish to avoid wasting on washing an additional bowl.
2. Work the Butter
In a medium bowl, whisk your dry components (flour, oats, sugar, spices). Then, reduce the chilly butter into small items. I take advantage of a fork or a pastry cutter to work the butter into the flour combination till it appears to be like like coarse crumbs (on the finish, I normally combine it along with my fingers).
3. Bake Till Bubbly
Unfold the topping evenly over the fruit. Bake at 350°F for about 45 to 50 minutes. The visible cue is the fruit filling effervescent up across the edges and the topping turning a deep golden brown.

Serving Solutions
Apple cranberry crisp is the proper fall or winter dessert, preferrred for serving as a Thanksgiving dessert, at Christmas, or for any meal. Like most crisps, one of the best topping is vanilla ice cream. The distinction of wealthy cream in opposition to the candy tart cranberries is perfection! Or, use one of many following toppings:
- A La Mode: A scoop of Vanilla Ice Cream is the gold normal. The melting cream mingling with the nice and cozy spiced fruit is unbeatable.
- Whipped Cream: A dollop of Do-it-yourself Whipped Cream or my favourite Yogurt Whipped Cream provides a lighter, tangy end.
- Breakfast: I received’t inform when you eat the leftovers for breakfast! It pairs surprisingly nicely with a dollop of Greek yogurt and a sizzling espresso.
Leftover Storage
Cranberry apple crisp tastes finest the day it’s made, but it surely saves very nicely! The crisp texture holds up nicely over time. Listed here are one of the best practices for the right way to retailer a crisp:
- Preserve it loosely coated at room temperature for 1 to 2 days. Holding it loosely coated helps to take care of the crumble texture.
- Refrigerate for as much as 3 days. It holds up nicely within the fridge, and tastes even higher when reheated.
- Freeze for as much as 3 months. Freeze for as much as 3 months in a sealed container. Reheat it in a 350°F oven till bubbly.
Dietary Notes
This apple cranberry crisp recipe is vegetarian. To make it gluten-free or vegan, listed here are just a few ingredient swaps:
- Gluten-free: Swap out the all-purpose flour with almond flour: it really works like a attraction and makes an irresistibly crunchy topping
- Vegan / dairy-free: Use vegan butter or refined coconut oil rather than the butter, and use vegan vanilla ice cream as a topping.
Apple Cranberry Crisp
This apple cranberry crisp is a pleasant and straightforward dessert, with a candy tart spiced fruit layer and golden buttery crumble topping!
- Prep Time: 20 minutes
- Prepare dinner Time: 50 minutes
- Whole Time: 1 hour 10 minutes
- Yield: 8
- Class: Dessert
- Technique: Baked
- Delicacies: Baked
- Weight-reduction plan: Vegetarian
Elements
For the cranberry apple filling
- 5 cups (4 medium to giant or 1 1/2 kilos) candy tart apples
- 1 ½ cups recent or frozen cranberries* (5 ounces)
- ½ cup granulated sugar
- ¼ cup packed brown sugar
- 2 tablespoons cornstarch
- ¼ teaspoon orange zest (optionally available; or ½ teaspoon lemon zest)
- 1 teaspoon floor cinnamon
For the topping
- ¾ cup all-purpose flour (or almond flour for gluten-free)
- ¾ cup Outdated Original rolled oats
- ½ cup packed brown sugar
- 1 teaspoon vanilla extract
- ½ teaspoon floor cinnamon
- ¼ teaspoon kosher salt
- 8 tablespoons chilly unsalted or salted butter (or vegan butter**), reduce into items
Directions
- Preheat the oven to 350°F.
- Make the filling: Core, peel and reduce the apples into 1/2-inch chunks. Mix the apples with cranberries, orange zest, granulated sugar, brown sugar, cornstarch, and cinnamon in a big bowl and toss till nicely coated. Pour right into a 7 x 11 baking dish.
- Make the topping: In a medium bowl, combine collectively the oats, flour, brown sugar, cinnamon, vanilla, and kosher salt. Minimize the butter into small items after which use a fork to combine it into the oats till totally distributed and a crumbly dough types. It might take some time so be affected person; you too can use a fork or pastry cutter when you want. (If utilizing coconut oil, it may be room temperature; use the identical technique so as to add it.) Pour the crumble on high and easy it into a fair layer together with your fingers.
- Bake: Bake for 45 to 50 minutes till the highest is evenly golden brown and the filling is bubbly. Cool for half-hour to 1 hour, then serve heat. You may miss your crisp on the counter for as much as 1 day (coated, at evening) so the topping can keep crisp. After 1 day, refrigerate any leftovers. This crumble additionally freezes nicely for a number of months in a sealed container; reheat it in a 350°F oven till bubbly and the topping is crisp.
Notes
Dried berries: Dried cranberries can even work, however use solely ¾ cup of the dried berries.
Vegan swaps: You may also substitute room temperature refined coconut oil or vegan butter for a vegan crisp.
Pan Dimension: This recipe suits completely in a 7×11 baking dish, however a deep 9-inch sq. pan or a pie dish works nicely too.
(operate(){
window.addEventListener( ‘message’, operate( occasion ){
if ( ( ‘https://nutrifox.com’ !== occasion.origin && ‘https://nutrifox.take a look at’ !== occasion.origin ) ||
typeof occasion.information !== ‘string’ ) {
return;
}
var payload = JSON.parse( occasion.information );
swap ( payload.occasion ) {
case ‘setHeight’:
var iframe = doc.getElementById( ‘nutrifox-label-‘ + payload.recipeId );
iframe.model.peak = payload.peak + ‘px’;
break;
}
} );
}());
window.trCommon={“minRating”:6,”ajaxurl”:”https://www.acouplecooks.com/wp-admin/admin-ajax.php”,”ratingNonce”:””,”postId”:150441};
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.smoothScroll = {
init() {
doc.addEventListener( ‘click on’, ( e ) => {
let anchor = e.goal;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}
if ( ! anchor || ! anchor.classList.incorporates( ‘tasty-recipes-scrollto’ ) ) {
return;
}
const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}
e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const aspect = doc.querySelector( selector );
if ( ! aspect ) {
return;
}
aspect.scrollIntoView( { habits: ‘easy’ } );
}
};
doc.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 = doc.querySelectorAll(this.cookModeSelector);
if (cookModes.size > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘enter[type=”checkbox”]’).addEventListener(“change”, occasion => {
this.checkboxChange(occasion.goal);
}, false);
} else {
cookMode.model.show = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = doc.querySelectorAll(this.cookModeSelector + ‘ enter[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
attempt {
this.wakeLock = await this.wakeLockApi.request(“display screen”);
this.wakeLock.addEventListener(“launch”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.launch();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};
(operate(callback) {
if (doc.readyState !== “loading”) {
callback();
} else {
doc.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.staticTooltip = {
aspect: null,
tooltipElement: null,
deleting: false,
init( aspect ) {
if ( this.deleting ) {
return;
}
this.aspect = aspect;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}
this.deleting = true;
this.tooltipElement.classList.take away( ‘opened’ );
setTimeout( () => {
this.tooltipElement.take away();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = doc.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );
const currentTooltipElement = doc.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
doc.physique.replaceChild( tooltipElement, currentTooltipElement );
} else {
doc.physique.appendChild( tooltipElement );
}
this.tooltipElement = doc.getElementById( ‘tasty-recipes-tooltip’ );
},
present() {
if ( ! this.tooltipElement ) {
return;
}
const tooltipTop = this.aspect.getBoundingClientRect().high
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().peak;
const tooltipLeft = this.aspect.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.aspect.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );
this.tooltipElement.setAttribute( ‘model’, ‘high:’ + 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.take away( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};
window.TastyRecipes.ajax = {
sendPostRequest( url, information, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.ship( this.preparePostData( information ) );
xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.standing === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}
failure( xhr );
};
xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( information ) {
const formData = new FormData();
for ( const key in information ) {
formData.append( key, information[key] );
}
return formData;
},
};
window.TastyRecipes.scores = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;
this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const scores = doc.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( scores.size {
occasion.preventDefault();
this.defaultRating = occasion.goal.closest( ‘.checked’ ).dataset.score;
this.setCheckedStar( occasion.goal );
this.maybeSendRating( this.defaultRating, occasion.goal );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click on’, e => {
// Bailout (do not take away the tooltip) when the clicked aspect is a score star, or it is the tooltip itself.
if ( e.goal.closest( ‘.tasty-recipes-rating’ ) || e.goal.classList.incorporates( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}
window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( score ) {
const ratingInput = doc.querySelector( ‘#reply .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click on();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = doc.querySelectorAll( ‘enter.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click on’, currentEvent => {
const selectedRating = currentEvent.goal.getAttribute( ‘worth’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( score ) {
if ( score < this.minRating ) {
doc.physique.classList.take away( 'tasty-recipes-selected-minimum-rating' );
return;
}
doc.physique.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( score ) {
const commentTextarea = doc.getElementById( 'remark' );
if ( ! commentTextarea ) {
return;
}
if ( score {
window.TastyRecipes.staticTooltip.changeMessage( response.information.message );
window.TastyRecipes.staticTooltip.present();
this.updateAverageText( response.information, recipeCardElement );
this.maybeFillCommentForm( response.information );
// Disguise the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.information, score );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( information, recipeCardElement ) {
if ( ! information.common ) {
return;
}
this.setRatingPercent( information );
if ( ! information.rely ) {
return;
}
const quickLink = doc.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, information );
this.setPartialStar( quickLink );
}
const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = information.common;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), information );
},
setTextInContainer( container, information ) {
if ( ! container ) {
return;
}
if ( information.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = information.label;
}
return;
}
const averageElement = container.querySelector( ‘.common’ );
if ( averageElement ) {
averageElement.textContent = information.common;
}
const countElement = container.querySelector( ‘.rely’ );
if ( countElement ) {
countElement.textContent = information.rely;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( information ) {
this.defaultRating = information.common.toFixed( 1 );
const components = information.common.toFixed( 2 ).toString().cut up( ‘.’ );
this.currentRatingPercentage = components[1] ? components[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( goal ) {
const cardRatingContainer = goal.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}
const thisStar = goal.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( information ) {
if ( ! information.remark || ! information.remark.content material ) {
return;
}
const commentForm = doc.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}
const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.worth ) {
return;
}
// Add remark particulars for enhancing.
commentBox.innerHTML = information.remark.content material;
if ( information.remark.title ) {
commentForm.querySelector( ‘[name=author]’ ).worth = information.remark.title;
commentForm.querySelector( ‘[name=email]’ ).worth = information.remark.e-mail;
}
},
maybeResetTooltip( recipeCardElement, information, score ) {
if ( this.savingRating === score ) {
this.resetTooltip( recipeCardElement, information );
}
},
resetTooltip( recipeCardElement, information ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;
// Reset the default score.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( information && information.common ) ? information.common.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;
this.resetSelectedStar( cardRatingContainer, information );
}
},
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 = doc.querySelector( ‘#reply .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.show.contains( ‘flex’ ) ) {
ratingsButtons.model.route = ‘rtl’;
}
if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Choose the score that was beforehand chosen 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 on’, occasion => {
if ( ratingSpan === occasion.goal ) {
return;
}
ratingSpan.previousElementSibling.click on();
} );
}
}
};
(operate(callback) {
if (doc.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.scores.init( window.trCommon ? window.trCommon.minRating : 4 );
});
Extra Cranberry Recipes
- Cranberry Smoothie
- Simple Cranberry Salsa
- Cranberry Cream Cheese Dip
- Cranberry Sauce
- Cranberry Orange Bread
- Cranberry Orange Muffins




