Soft, buttery, and tender, these cranberry orange shortbread bars are perfect for sharing this holiday season. Or keeping allllll for yourself. I won’t tell.
Cranberry Orange Shortbread Cookies
These buttery cranberry orange shortbread bars come together in a pinch and keep for weeks, meaning you can whip up a big batch on a whim and have sweet treats for weeks. Of course you’ll eat them all within two days because they’re seriously addicting, but sometimes you just have to lie to yourself a little, y’know?
What are cranberry orange shortbread bars?
We love a shortbread cookie. They just check all the boxes for a holiday cookie. Super easy to make–CHECK. Sturdy enough to pack into boxes and ship out to friends–CHECK. Stay soft for days–CHECK. And it certainly doesn’t hurt that they are just as pretty as they are tasty. Which is, like, A LOT.
And these cranberry orange shortbread bars are the *elite* shortbread this holiday season. The tang of the orange zest and the tartness of the cranberries perfectly complement the tender shortbread to create a truly magical cookie. Second to the taste, my favorite thing about these babies is that you don’t need to individually scoop out cookies. Simply throw your dough into a pan, pat it flat, bake it off, and then slice into perfect little cookie bars AKA a lazy girl’s dream.
Tips for making the best cranberry orange shortbread
Shortbread is very simple to make, but these few tricks will make a perfect, flavorful cranberry orange shortbread!
- Don’t overwork the dough: The key to good shortbread is dough that has as little gluten in it as possible. This will make a tender, melt in your mouth texture that you expect from shortbread. Your dough will be a little crumbly, but will stick together when you smoosh it together. Don’t be alarmed!
- Use high quality butter: I know I’ve said this before, but I just had to say it again. The butter will make these shortbread bars SO GOOD.
- Bake them to perfection: With shortbread there’s a fine line between doughy and overdone. The bars should take about 25 to 30 minutes to bake and you”ll know they’re done when they’re just golden brown on the edges, have puffed up, and are dry to the touch.
Happy baking, my sweet friends!
XXX
Soft, buttery, and tender, these cranberry orange shortbread bars are perfect for sharing this holiday season. Or keeping allllll for yourself. I won’t tell.
- Author: Sofi | Broma Bakery
- Prep Time: 10 minutes
- Cook Time: 25 minutes
- Total Time: 35 minutes
- Yield: 16 bars 1x
- Category: dessert
- Method: oven
- Cuisine: american
- Author: Sofi | Broma Bakery
- Prep Time: 10 minutes
- Cook Time: 25 minutes
- Total Time: 35 minutes
- Yield: 16 bars 1x
- Category: dessert
- Method: oven
- Cuisine: american
Units:
Scale:
- Author: Sofi | Broma Bakery
- Prep Time: 10 minutes
- Cook Time: 25 minutes
- Total Time: 35 minutes
- Yield: 16 bars 1x
- Category: dessert
- Method: oven
- Cuisine: american
Ingredients
- 10 Tablespoons unsalted butter, cold and cut into cubes
- 1 1/4 cups all purpose flour
- 1/2 cup granulated sugar
- 2 Tablespoons fresh orange zest
- 1/4 teaspoon salt
- 1/2 cup dried cranberries
- 4 ounces white chocolate, melted
Instructions
- Preheat the oven to 350°F and line an 8 x 8 inch pan with parchment paper on all sides. Set aside.
- In a food processor combine the flour, sugar, salt, orange zest and butter. Pulse until just combined and the mixture forms a dough ball.
- Remove from the food processor and stir in the cranberries.
- Press the dough into the prepared pan, using your hands to spread the dough into an even layer.
- Bake at 350°F for 20 to 30 minutes or until just light golden brown. Take out of the oven and allow the bars to cool completely.
- Once the bars are cool use a spoon to drizzle the bars with the melted white chocolate. Pop the bars in the freezer for a few minutes or the fridge for a half hour to set. Once set, use a large sharp knife to cut into desired size rectangles. Enjoy!
Keywords: cranberry orange shortbread
D){Q=Q_2;P=P_2}else{Q=Q_1;P=P_1}}if(!mixed)return[0,sgn*P,Q];var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]}; /* {‘¼’: ‘1/4′,’½’: ‘1/2′,’¾’: ‘3/4′,’⅓’: ‘1/3′,’⅔’:’2/3′,’⅕’:’1/5′,’⅖’:’2/5′,’⅗’:’3/5′,’⅘’:’4/5′,’⅙’:’1/6′,’⅚’:’5/6′,’⅛’:’1/8′,’⅜’:’3/8′,’⅝’:’5/8′,’⅞’:’7/8′} */ window.tastyRecipesVulgarFractions = JSON.parse(decodeURIComponent(“%7B%22%C2%BC%22%3A%221%2F4%22%2C%22%C2%BD%22%3A%221%2F2%22%2C%22%C2%BE%22%3A%223%2F4%22%2C%22%E2%85%93%22%3A%221%2F3%22%2C%22%E2%85%94%22%3A%222%2F3%22%2C%22%E2%85%95%22%3A%221%2F5%22%2C%22%E2%85%96%22%3A%222%2F5%22%2C%22%E2%85%97%22%3A%223%2F5%22%2C%22%E2%85%98%22%3A%224%2F5%22%2C%22%E2%85%99%22%3A%221%2F6%22%2C%22%E2%85%9A%22%3A%225%2F6%22%2C%22%E2%85%9B%22%3A%221%2F8%22%2C%22%E2%85%9C%22%3A%223%2F8%22%2C%22%E2%85%9D%22%3A%225%2F8%22%2C%22%E2%85%9E%22%3A%227%2F8%22%7D”)); window.tastyRecipesFormatAmount = function(amount, el) { if ( parseFloat( amount ) === parseInt( amount ) ) { return amount; } var roundType = ‘frac’; if (typeof el.dataset.amountShouldRound !== ‘undefined’) { if (‘false’ != el.dataset.amountShouldRound) { if ( ‘number’ === el.dataset.amountShouldRound ) { roundType = ‘number’; } else if (‘frac’ === el.dataset.amountShouldRound) { roundType = ‘frac’ } else if (‘vulgar’ === el.dataset.amountShouldRound) { roundType = ‘vulgar’ } else { roundType = ‘integer’; } } } if (‘number’ === roundType) { amount = Number.parseFloat(amount).toPrecision(2); } else if (‘integer’ === roundType) { amount = Math.round(amount); } else if (‘frac’ === roundType || ‘vulgar’ === roundType) { var denom = 8; if (typeof el.dataset.unit !== ‘undefined’) { var unit = el.dataset.unit; if ([‘cups’,’cup’,’c’].includes(unit)) { denom = 4; if (0.125 === amount) { denom = 8; } if (“0.1667″ === Number.parseFloat( amount ).toPrecision(4)) { denom = 6; } } if ([‘tablespoons’,’tablespoon’,’tbsp’].includes(unit)) { denom = 2; } if ([‘teaspoons’,’teaspoon’,’tsp’].includes(unit)) { denom = 8; } } var amountArray = frac.cont( amount, denom, true ); var newAmount = ”; if ( amountArray[1] !== 0 ) { newAmount = amountArray[1] + ‘/’ + amountArray[2]; if (‘vulgar’ === roundType) { Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) { if (newAmount === window.tastyRecipesVulgarFractions[vulgar]) { newAmount = vulgar; } }); } } if ( newAmount ) { newAmount = ‘ ‘ + newAmount; } if ( amountArray[0] ) { newAmount = amountArray[0] + newAmount; } amount = newAmount; } return amount; } /** * Update the URLs used to display a print view when the scale or unit * selection on a recipe card has changed. */ window.tastyRecipesUpdatePrintLink = () => { const printLinks = document.querySelectorAll( ‘.tasty-recipes-print-link’ ); const printButtons = document.querySelectorAll( ‘.tasty-recipes-print-button’ ); // Use the first print button found as the canonical URL source. const printButton = document.querySelector( ‘.tasty-recipes-print-button’ ); // If no print button is available, we can’t reliably update its href. if ( ! printButton ) { return; } const printURL = new URL( printButton.href ); const searchParams = new URLSearchParams( printURL.search ); const unitButton = document.querySelector( ‘.tasty-recipes-convert-button-active’ ); const scaleButton = document.querySelector( ‘.tasty-recipes-scale-button-active’ ); let unit = ”; let scale = ”; if ( unitButton ) { unit = unitButton.dataset.unitType; searchParams.delete(‘unit’) searchParams.set( ‘unit’, unit ); } if ( scaleButton ) { scale = scaleButton.dataset.amount; searchParams.set( ‘scale’, scale ); } const paramString = searchParams.toString(); const newURL = ” === paramString ? printURL.href : printURL.origin + printURL.pathname + ‘?’ + paramString; printLinks.forEach( ( el ) => { el.href = newURL; }); printButtons.forEach( ( el ) => { el.href = newURL; }); } // When the document loads, look for unit and scale parameters and setup the recipe card // to reflect those values. document.addEventListener( ‘DOMContentLoaded’, () => { // Only reflect URL parameters on the print view. if ( ! window.location.href.includes( ‘/print/’ ) ) { return; } const searchParams = new URLSearchParams( window.location.search ); const unit = searchParams.get( ‘unit’ ); const scale = searchParams.get( ‘scale’ ); if ( unit && ( ‘metric’ === unit || ‘usc’ === unit ) ) { document.querySelector( ‘.tasty-recipes-convert-button[data-unit-type=”‘ + unit + ‘”]’ ).click(); } if ( scale && Number(scale) > 0 ) { document.querySelector( ‘.tasty-recipes-scale-button[data-amount=”‘ + Number(scale) + ‘”]’ ).click(); } }) }()) ]]> = 10 ? ‘integer’ : ‘number’; } else if (typeof convertable.dataset.amountOriginalType !== ‘undefined’) { convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType; } else { convertable.dataset.amountShouldRound = false; } convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable); } if (convertable.classList.contains(‘nutrifox-unit’)) { if (‘gram’ === convertable.dataset[dataset]) { convertable.innerText = ‘grams’; } } }); /* Trigger the correct amount if scaling is active */ document.querySelectorAll(‘.tasty-recipes-scale-button-active’).forEach(function(scaleButton){ scaleButton.click(); }); window.tastyRecipesUpdatePrintLink(); }); }); }()) ]]>
Source