This Halloween punch recipe makes a spooky smoking cauldron effect with fruity, sweet-tart flavors that work for kids or to spike with rum for adults. Ready in just 5 minutes with cranberry juice and apple cider!

Here’s a spooky drink that’s over-the-top fun: a blood red cauldron of Halloween punch that magically bubbles and boils! I’ll never forget the first time I served it: my friends actually gasped when I dropped the dry ice in (then whipped out their phones to take a video!).
The beauty of this Halloween punch recipe is that it tastes as good as it looks. Many Halloween drinks I’ve tried are super sweet or artificial testing, but this one is different. The cranberry juice makes a natural red color, and apple cider adds depth and tanginess. You can also turn it into a Halloween alcoholic punch by adding rum!
Ingredients in Halloween punch
There’s really nothing spooky about the flavor here: it’s fruity and just sweet enough! This three-ingredient drink is a mixture of the following:
- Cranberry 100% juice blend: This blend of juices is available at most grocery stores, and typically blends grape, apple, and pear juice with cranberry juice. Make sure to look for “100% juice” or “no sugar added” on the label, which is key for the flavor.
- Apple cider or apple juice: Unfiltered apple cider is nice, as it adds an even tangier nuance.
- Ginger ale: Ginger ale makes a mild flavor. You can substitute with ginger beer if you like, for a spicier, stronger ginger bite!
- Dry ice: It’s optional, but it makes a great effect. Review the safety instructions below.

Making it an alcoholic Halloween Punch
This Halloween punch is great for kids without alcohol, but you can also make it into a spiked punch. You have two approaches: add the rum directly to the punch bowl (replace 1 liter of ginger ale with a 750ml bottle of rum).
Or, you can make an alcoholic Halloween punch by setting up a station where guests can add rum to their own cups. I prefer this method because it keeps everyone happy! The best ratio is 2 ounces of rum per 8-ounce cup (1 cup) of punch.
Bourbon is my second favorite spirit for spiking punch, as it melds nicely with the fruit flavors. Vodka is much more subtle but you can use it if desired.
Dry ice safety instructions
The best part about this Halloween Punch is watching it bubble and boil with the dry ice! Everyone will be amazed as the smoke fills the table and spills out into the room. It’s safe to use, but there are a few very important notes about working with dry ice:
- DO NOT touch dry ice with bare hands. Dry ice is the solid form of carbon dioxide, which forms at temperatures below 110°F. It can give you frostbite because it is so cold. Use gloves when handling it, and use tongs for dropping it into drinks. Holding it for more than 10 seconds is considered very dangerous.
- DO NOT drink dry ice. Tell your party guests not to drink the dry ice, especially kids! For this Halloween Punch, it’s easy to ladle out punch from the top of the bowl without even touching the dry ice. You can also place small pieces in glasses for the adults: the ice settles to the bottom of the drink and should disappear in about 5 minutes. You can sip the drink carefully while the dry ice is still at the bottom, but don’t let it slide to the top of your glass.
For more detailed information, check out my guide on How to Make Dry Ice Drinks and Cocktails.
How to work with dry ice for cocktails
It’s very safe to add dry ice to drinks once you know the safety precautions: and it’s a great party trick for kids! Remember to advise kids not to touch it, since they may want to reach out once they see it in your home. Here are the tips to follow for safe storage and handling:
- Purchasing and storage: Buy the dry ice 1 to 2 hours before you plan to serve. Dry ice is available at most grocery stores and is sold in large blocks (here’s a store finder). It does not last in the freezer, so once you’re home place the plastic bag of dry ice in a cooler with the top off. Keep away from children and pets.
- Breaking into chunks: Right before serving, drop the plastic bag on the ground several times to break it into large chunks. Then put on safety goggles and gloves and break it into small chunks with a screwdriver or ice pick. The ideal size is 1/2-inch to 1-inch chunks: heavy enough to sink in the drink but small enough to disappear after a few minutes.
- Final storage: Wrap the chunks in a towel and place in a cooler with the top off until serving. Again, don’t put them into the freezer!
What to do with leftovers? Try one of my other dry ice drinks, the Witches Brew or Vampire’s Kiss.

Serving tips and variations
If you’re not using dry ice, this punch still deserves a moment. I love floating fresh cranberries and thin apple slices on top for a festive look. Plastic spider rings, candy eyeballs, and gummy worms floating on the surface add to the creepy factor without interfering with the flavor.
This recipe scales well. For smaller gatherings, halve everything. For a large crowd, double it: just make sure you have a punch bowl large enough!
Frequently asked questions
Absolutely. While dry ice creates the impressive smoking effect, the punch tastes delicious without it. Garnish with floating cranberries, apple slices, or plastic Halloween decorations instead.
Aged rum like Appleton Estate or Mount Gay works nicely. The aging adds vanilla and oak notes that complement the fruit flavors. White rum also works.
Yes, when handled properly. Never touch dry ice with bare hands, use tongs to drop it in drinks, and never drink the dry ice itself. Wait for small pieces to fully dissolve before drinking, or ladle punch from the top of the bowl where the dry ice isn’t present.
Because it’s so simple, it’s best to just pour together the ingredients right before serving (to preserve the carbonation of the ginger ale).
For the full recipe (approximately 1 gallon total), use at least a 1.5-gallon punch bowl to allow room for ice and garnishes. For doubled recipes, use a 2-3 gallon bowl.
Halloween Punch
This fruity Halloween punch looks spooky and impressive! It works for kids, or you can spike it for an alcoholic spin.
- Prep Time: 5 minutes
- Cook Time: 0 minutes
- Total Time: 5 minutes
- Yield: 24 servings
- Category: Drink
- Method: Mixed
- Cuisine: Punch
- Diet: Vegan
Ingredients
- 64 ounces cranberry 100% juice blend (with grape, apple, and pear)*
- 64 ounces apple juice or apple cider
- 2 liters ginger ale (or 1 liter ginger ale and 1 750 ml bottle aged rum**)
- 2 4-inch to 5-inch chunks dry ice*** (optional)
- Punch bowl and glasses
- Other garnish ideas: candy eyeballs, plastic spiders, gummy worms, etc.
Instructions
- Make the punch: Chill the ingredients prior to serving. Add all ingredients to a punch bowl and stir. Garnish with dry ice (instructions below) or any of the optional garnishes. For the alcoholic punch variation, you can add the entire bottle of rum or make the spiked servings to order so the bowl works for kids and adults. Ladle out a 1 cup (8 ounce) serving of punch and add 1 to 2 ounces rum.
- Break the dry ice into 4-inch chunks (if using): Do this as close to the time you’ll be serving the drinks as possible, though you can buy the dry ice a few hours in advance. Start by dropping the plastic bag with the dry ice on the ground several times to allow it break into large chunks. Remember never to touch the dry ice with your bare hands! Put on goggles and gloves. Use a chisel to break the dry ice into smaller pieces using a screwdriver or ice pick. The ideal size is 4-inch to 5-inch chunks. Wrap the small chunks in a towel and place them in a cooler with the top off until you’re ready to serve the drinks. Do not place the dry ice in the freezer.
- Add the dry ice: Using tongs (do not touch the dry ice!), add 2 of the 4 to 5-inch chunks of dry ice to the punch bowl, which will sink to the bottom and immediately make a smoking effect. The smoking will last 5 to 10 minutes. Do not drink the dry ice! For kids, ladle out punch by skimming off the top. If you’d like you can ladle out a small chunk of dry ice into a glass for adults, but wait until the cube disappears before enjoying your drink (or you can take sips with the dry ice in the bottom). Review these Dry Ice Handling instructions.
Notes
*This blend of juices is available at most grocery stores: make sure it is 100% juice and not sweetened.
**Or, substitute white rum or dark rum. Bourbon or vodka also work, but rum works is best flavor-wise.
**Dry ice is available at many grocery stores and comes in a large block. Buy it a few hours before you plan to serve the drinks (it does not store in the freezer). Read more about Dry Ice Safety here and review the instructions in the post above.
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.acouplecooks.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:””,”postId”:108606};
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 );
});
Other Halloween drinks to try
Love parties for Halloween? It’s my favorite holiday! Here are a few of my favorite Halloween cocktails to try:
- Grab a Witches Brew, a tasty bright green drink, or the Vampire’s Kiss, blood red with a berry flavor
- Try a Halloween Margarita or Halloween Sangria
- Channel wizards and witches with Butterbeer