These cheese fries are a delicious combination of crispy fries and creamy, homemade cheese sauce, making them the perfect appetizer, side dish, or party snack!

Cheese fries are the perfect combo of indulgence and comfort, and why not make them at home? That first bite of crispy French fries from the oven, smothered in a gooey cheese sauce, feels like a hug in food form. Since they’re a little lighter than restaurant takeout, I find this version lands much easier on my stomach, too!
If you’re looking for tasty comfort food, there’s nothing like a plate of homemade cheese fries to bring a little joy. Whenever I’m craving something cozy but low effort, these fries do the trick!

Why I Love This Recipe
These cheese fries taste irresistible! I love that making baked fries and a homemade cheese sauce is a little lighter than the restaurant version — which often leaves me feeling stuffed and oversalted!
The cheese sauce alone is enough to make them a crowd-pleaser, but you can also dress them up if you’re feeling fancy. There’s never a bad time for these, either. They’re just as perfect for game day or a casual get-together as they are for a late-night snack.
Bonus: Frozen fries work perfectly for this recipe. I love my homemade baked fries, but you don’t need to do all that if you have a bag of fries in your freezer. Pop them in the oven, melt your sauce, and you have the ultimate party snack.

Featured 5-Star Review
“This cheese sauce will be my go-to EVERY TIME I need a cheese sauce for chips, fries, and other creations. Mmmm, it’s so good, and the recipe and measurements listed were definitely tried and true. 5 Stars*****”
– Erin
Ingredients You’ll Need
Cheese fries are perfect in their simplicity: they’re French fries covered in a cheese sauce. You may already have most of the ingredients for this appetizer in your kitchen, but here are a few tips as you gather them up:
- French fries: For ease of preparation, I prefer using frozen fries. Use whatever brand you like in a classic or crinkle cut, but my favorite is Alexia. To make fries fresh, use my recipe for crispy baked fries or homemade fries.
- Cheddar cheese: This cheese sauce recipe for fries calls for mild or medium cheddar for the best flavor. Aged or sharp cheddar cheese is too strong.
- Milk: Use whatever milk you have available in this recipe. Whole milk gives your cheese a rich texture. If you want to use a plant-based milk, stick to unsweetened or unflavored varieties.
- Butter and flour: In a cheese sauce, butter and flour form a roux. This is the foundation of your sauce, and what gives it structure and that creamy texture. It also helps the cheese melt evenly.
- Seasonings: After cooking, you’ll want to salt your fries while they’re on the baking sheet. The onion powder and garlic are for your cheese sauce, not the fries. I have a recipe for seasoned fries if that’s what you’re after.
How to Make the Perfect Cheese Sauce
This is one of those easy recipes that doesn’t need much to turn out delicious, but there are a few things to keep in mind for the perfect cheese sauce. Here are a few tips for how to melt cheese for your fries:
- If possible, use block cheese. Bags of shredded cheddar cheese have additives that can make your cheese sauce grainy. If you can, shred your own cheese off a block.
- Low heat and patience are key. Add a handful of cheese at a time, whisking until it’s smooth in between. If your sauce looks clumpy, you’ve probably added the cheese too quickly or the sauce is too hot. Remove from heat and whisk to smooth it out.
- Use milk to adjust consistency. Milk acts as a thinning agent. Gradually whisk in a splash of milk over low heat until the sauce loosens to your desired consistency. You want it to be pourable.
- Don’t forget vinegar. Apple cider, red, or white wine vinegar adds a glossy sheen to your cheese sauce and rounds out the flavors.
- Play with heat. I’m not talking about your stove. Hot sauce is optional but delicious. Use a teaspoon for subtle complexity without much heat, or add a touch more to kick things up a bit.

How to Serve
Once you’ve got your cheese sauce and baked fries, you’re ready to assemble! Serve the fries immediately if you can. This sauce has the best consistency right after it’s done, so try to have the fries and sauce finish at the same time, or as close as possible.
I love to keep this delicious recipe simple. Generously pour on your cheese sauce, and you’re ready to eat! If you want to add a little something or prefer loaded cheese fries, here are some ideas for garnishes:
- For color: Chopped parsley, green onions, or chives
- For a kick: Fresh or pickled jalapeños (keep the hot sauce!)
- For crunch: Fried shallots or fried onions
If you want to go really wild, turn this into a chili cheese fries recipe. My version tops those with sour cream, pico de gallo, and green onion. Potatoes in all their forms are always a hit!
Storage & Reheating Tips
Cheese sauces made with butter and flour don’t reheat well. The sauce won’t be as creamy and stretchy as it is on the day it’s made. (Trust me, I’ve tried it!) That’s why I recommend using most of your cheese sauce the day it’s made.
Consider making a half recipe if you don’t plan to use the entire 1 cup. If the sauce becomes clumpy while waiting for the fries to finish, reheat it on the stovetop and add more milk if necessary to make it pourable.
If you need to make a sauce in advance, I recommend trying my nacho cheese recipe. It uses cornstarch and evaporated milk instead of all-purpose flour. You can refrigerate it for up to a week and reheat it in the microwave. I prefer that one for dipping vs. cheesy fries, though!
Dietary Notes
This cheese fries recipe is vegetarian.
FAQs
To keep your fries from getting soggy, start with a good base. Bake your fries in a single layer on parchment paper — an air fryer works, too. Don’t pour your cheese sauce over the fries until it’s time to serve them!
Cheese fries are at their best fresh and hot, with the cheese sauce timed for pouring right after your fries are done. The fries stay crispy and golden brown, and the cheese sauce is perfectly gooey. The fries start to get soggy as they sit, and the sauce can thicken or separate. If your sauce has to sit, reheat it on the stovetop first. You may need to add a little milk to make a pourable consistency.
Cheese Fries
Turn frozen fries into cheesy perfection in minutes. These cheese fries are gooey, golden, and totally irresistible.
- Prep Time: 10 minutes
- Cook Time: 20 minutes
- Total Time: 30 minutes
- Yield: 4
- Category: Side dish or appetizer
- Method: Baked
- Cuisine: Fries
- Diet: Vegetarian
Ingredients
- 1 pound frozen french fries or 1 recipe Crispy Baked Fries
- 1 tablespoon flour*
- 1 tablespoon butter
- ¾ cup milk, plus more for thinning
- 6 ounces mild to medium** cheddar cheese, grated (1 ½ cups)
- ⅛ teaspoon onion powder
- ⅛ teaspoon garlic powder
- ⅛ teaspoon kosher salt
- ½ teaspoon apple cider vinegar (or red or white wine vinegar)
- Optional: 1 teaspoon hot sauce
- Finely chopped parsley or chives, for the garnish
Instructions
- Bake the fries according to the package instructions or the Baked Fries recipe. Once the fries are done, taste and add additional salt as necessary.
- In a small or medium saucepan over medium heat, melt the butter. Add the flour and whisk constantly for 1 minute, until bubbly and golden.
- Add a splash of milk and whisk it in: the sauce will instantly turn chunky. Constantly whisking, continue to add splashes of milk and whisk them in until the entire quantity is incorporated and the sauce is smooth. Cook 2 to 3 minutes, whisking frequently, until very thick and smooth.
- Turn off the heat and stir in the spices. Stir in the cheese 1 handful at a time, only adding more when it has melted. Once you need more temperature to melt the cheese, return heat to low to complete melting. Once fully smooth, it will be thick. Whisk in 2 more tablespoons of milk until it comes to a pourable consistency, then stir in the vinegar (and hot sauce, if using). If the sauce needs to sit until the fries are done, re-heat it on the stovetop and add a little more milk if necessary to make it pourable.
- Place the warm fries on a platter and pour over the warm cheese sauce. Garnish with chopped parsley or chives and serve immediately.
Notes
*Don’t use an aged cheddar. The flavor is much too strong.
Cheese sauces that use flour and butter don’t reheat well after refrigeration. Consider making a half recipe if you don’t plan to use the entire cup. If the sauce becomes clumpy while waiting for the fries to finish, reheat it on the stovetop and add more milk if necessary to make it pourable.
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.acouplecooks.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:””,”postId”:131522};
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 );
});