Scalloped Potatoes: Creamy, Cheesy, and Made from Scratch

Scalloped potatoes done right hold their shape when you lift a portion. You can see the individual layers, the sauce has thickened into something almost custardy, and the top has a golden, slightly crispy crust from the Gruyère. This version builds the sauce from scratch using a butter-flour roux, whole milk, and heavy cream. It adds about 10 minutes to the process compared to pouring raw cream over raw potatoes, and the difference in texture is significant enough to notice from the first bite.
The approach here uses Russet potatoes for their high starch content, which helps the sauce absorb and thicken as the dish bakes. The cream sauce is cooked on the stove first so it goes into the dish already thick. No canned soup. No guesswork. You can also assemble this a full day ahead, which makes it genuinely useful for weeknight dinners and holiday meals alike.
Why You’ll Love This Scalloped Potatoes Recipe
- The sauce is pre-thickened before it hits the potato layers, so there is no watery pooling at the bottom after baking
- Gruyère on top melts into a deep golden crust with slightly crispy edges around the sides of the dish
- The sliced onion layers cook down between the potatoes and dissolve into the sauce, adding sweetness without announcing themselves
- You can assemble the entire dish 24 hours ahead and bake it fresh when needed
- Leftovers come out of the fridge in clean slices and reheat well with just a splash of milk
Ingredients You’ll Need
For the Potato Layers
- 1.2 kg (2.6 lbs) Russet potatoes, peeled — high starch content helps the sauce bind and thicken throughout the layers
- 1 medium yellow onion, thinly sliced — adds a gentle sweetness and depth that builds as it cooks
- 1 tsp fine salt
- 1/2 tsp black pepper, freshly ground
For the Cream Sauce
- 3 tbsp unsalted butter
- 3 garlic cloves, minced — cooked in butter first so the raw sharpness is gone before the cream goes in
- 3 tbsp all-purpose flour — the thickener; needs a full 2 minutes of cooking or the sauce will taste floury
- 500 ml (2 cups) whole milk, at room temperature
- 250 ml (1 cup) heavy cream, at room temperature
- 1 tsp fine salt
- 1/2 tsp black pepper, freshly ground
- 1/4 tsp ground nutmeg — optional but noticeably rounds out dairy-heavy cream sauces
- 120 g (1 generous cup) Gruyère cheese, freshly shredded, divided
Substitution note: Gruyère can be replaced with sharp Cheddar or a Gruyère-Cheddar blend. The flavor will be sharper and less nutty, but it melts cleanly and works well. Avoid pre-shredded cheese if possible — the anti-caking coating affects how evenly it melts.
Recipe Timing
| Timing Element | Duration |
|---|---|
| Prep Time | 20 minutes |
| Cook Time | 1 hour 15 minutes |
| Rest Time | 15 minutes |
| Total Time | 1 hour 50 minutes |
Servings: 6 | Difficulty: Medium | Cuisine: American/European | Course: Side Dish

How to Make Scalloped Potatoes: Step by Step
Step 1: Prep the Oven and Potatoes
Preheat the oven to 190°C (375°F). Butter a 9×13 inch (23×33 cm) baking dish generously on the bottom and up the sides. Peel the potatoes and slice them 3mm (1/8 inch) thin using a mandoline or a sharp knife. Aim for uniform thickness so every slice cooks at the same rate. Toss the slices in a large bowl with 1 tsp salt and set aside while you make the sauce.
Step 2: Start the Roux
Melt the butter in a medium saucepan over medium heat. Add the minced garlic and cook for 1 minute, stirring constantly, until fragrant but not browned. Add the flour and whisk continuously for 2 full minutes. The mixture will look like a pale, sandy paste.
Why this works: cooking the flour in the butter for a full 2 minutes removes the raw, chalky taste that ruins cream sauces. Under-cooking the roux is one of the most common reasons scalloped potatoes taste “floury” even after a long time in the oven.

Step 3: Build the Cream Sauce
Pour the milk and heavy cream into the roux in a slow, steady stream, whisking the entire time. Do not stop whisking until all the liquid is incorporated and the mixture is smooth. Raise the heat slightly to medium-high and continue cooking for 5-7 minutes, whisking frequently, until the sauce is thick enough to coat the back of a spoon and holds a clean line when you draw your finger across it.
Why this works: adding cold liquid all at once causes the roux to seize before it can be evenly distributed, which creates lumps. Adding it gradually while whisking keeps the sauce perfectly smooth throughout.
Step 4: Season and Add Cheese
Remove the pan from the heat. Add 1 tsp salt, 1/2 tsp black pepper, and the nutmeg. Stir in half the shredded Gruyère (about 60g) until fully melted and the sauce is smooth. Taste it. It should be well-seasoned on its own because it will be diluted slightly as it bakes into the potato layers.
Step 5: Layer the Potatoes
Lay half the potato slices in the buttered baking dish, overlapping each slice by about a third. Scatter half the sliced onion evenly over the potatoes. Pour half the cream sauce over the top, using a spatula to spread it all the way to the edges. Repeat with the remaining potatoes, onions, and sauce. Scatter the remaining Gruyère over the top.

Step 6: Bake Covered
Cover the dish tightly with aluminum foil. Bake on the center rack for 50 minutes. The potatoes should be mostly tender at this point. You can test by pressing the center through the foil with a fork — it should give with only slight resistance.
Why this works: the foil traps steam inside the dish and essentially steams the potato layers from within. Baking uncovered from the start concentrates all the heat on the surface, which browns the top before the center has a chance to cook through.
Step 7: Uncover and Brown
Remove the foil and return the dish to the oven. Bake uncovered for 20-25 minutes until the top is deep golden brown and a thin knife inserted straight down into the center slides through without any resistance. The sauce should be bubbling actively around the edges.
Why this works: the uncovered phase allows surface moisture to evaporate and the Gruyère to caramelize. This is what gives you a crust rather than just melted cheese.

Step 8: Rest Before Serving
Pull the dish from the oven and let it sit uncovered for 15 minutes before slicing. The cream sauce continues to set during this rest, which means the layers hold together when you lift a portion instead of spreading across the plate. Serve with a wide spatula.
Common Mistakes to Avoid
Slicing potatoes unevenly
A mix of thick and thin slices in the same dish means some are overdone before others are cooked through. Use a mandoline set to 3mm if you have one. If you’re using a knife, take your time. Irregular slices are the most common reason a dish bakes unevenly.
Under-cooking the roux
Adding liquid to undercooked flour is what causes that raw, pasty aftertaste. Two full minutes at medium heat is the minimum. The paste should smell faintly nutty before you add anything to it.
Using cold milk and cream straight from the fridge
Cold dairy hit with a hot roux can seize or cause the sauce to turn grainy. Let the milk and cream sit at room temperature for 20-30 minutes before you start, or warm them for 45 seconds in the microwave.
Cutting the dish too soon
Scalloped potatoes sliced straight out of the oven spread everywhere. The 15-minute rest is not optional if you want clean portions. The sauce firms up considerably during that window.
Variations and Substitutions
Different cheese:
Sharp Cheddar works in place of Gruyère. The result is tangier and more familiar but still melts cleanly. A 50/50 Gruyère-Parmesan blend gives a more complex, slightly saltier crust.
Lighter version:
Replace the heavy cream with an equal amount of whole milk. The sauce will be thinner and less rich, but it still holds together through the full baking time. Low-fat or skim milk tends to separate, so avoid those.
Herb layer:
Lay fresh thyme sprigs between the potato layers for a subtle earthy note. Pull them out before serving or give guests a heads-up.
What to Serve With Scalloped Potatoes
Scalloped potatoes are a side dish, so they work best alongside proteins with clear, contrasting flavors rather than other cream-based dishes.
Roast chicken — the richness of the cream sauce balances well against simply herb-seasoned chicken skin.
Grilled lamb chops — the cream sauce complements lamb without competing with the flavor.
A sharp green salad with lemon vinaigrette — the acidity cuts through the cream and prevents the meal from feeling heavy.
Steamed green beans or roasted asparagus — simple vegetables keep the plate from being all starch and fat.
Braised beef short ribs — a slow-cooked main alongside scalloped potatoes makes the meal feel genuinely occasion-worthy.

Storage, Reheating, and Make-Ahead
Fridge:
Cool the dish completely, then cover the baking dish tightly with plastic wrap or transfer portions to an airtight container. Keeps for up to 4 days. The flavors actually deepen on day two.
Freezer:
Portion into individual servings and freeze in airtight containers for up to 2 months. Thaw overnight in the fridge before reheating. The sauce texture changes slightly after freezing (it may look grainy when thawing), but it smooths out once reheated gently.
Reheat:
Place portions in an oven-safe dish. Spoon 2-3 tablespoons of whole milk or cream over the top. Cover with foil and bake at 175°C (350°F) for 20-25 minutes until heated through. The added liquid prevents the sauce from drying out or developing a skin.
Make-ahead:
Assemble the entire dish without baking, cover tightly with foil, and refrigerate for up to 24 hours. When ready to bake, keep it covered and add 10-15 extra minutes to the initial covered bake time to account for the cold dish going into a hot oven.
Allergen and Dietary Information
Contains dairy (butter, whole milk, heavy cream, Gruyère). To make this dairy-free, substitute the butter with a plant-based alternative, use full-fat oat milk or coconut cream in place of the milk and cream, and choose a dairy-free cheese that is specifically designed to melt. The texture of the sauce will differ but the structure holds.
Contains gluten (all-purpose flour in the roux). To make this gluten-free, use a 1:1 gluten-free flour blend in the same quantity, or use 2 tbsp cornstarch instead (whisk the cornstarch into the cold milk before adding it to the butter, skipping the roux step entirely).
Critical: never claim a recipe is “safe” for someone with a serious allergy without confirming every ingredient and brand label. Cross-contamination from shared equipment is a separate concern.
Nutrition Information
Per serving (based on 6 servings):
| Nutrient | Per Serving |
|---|---|
| Calories | 385 kcal |
| Protein | 12 g |
| Total Carbohydrates | 38 g |
| Dietary Fiber | 3 g |
| Total Sugars | 5 g |
| Total Fat | 22 g |
| Saturated Fat | 13 g |
| Sodium | 520 mg |
| Cholesterol | 65 mg |
| Potassium | 780 mg |
| Calcium | 220 mg |
| Iron | 2 mg |
Nutritional values are estimates only and may vary based on specific ingredients, brands, and portion sizes used. For precise dietary needs, consult a registered dietitian.
Frequently Asked Questions
What is the difference between scalloped potatoes and au gratin potatoes?
Traditional scalloped potatoes are baked in a plain cream sauce with no cheese. Au gratin potatoes include cheese layered between the potatoes as well as on top. In most modern recipes, including this one, the line has blurred — this version adds cheese only to the sauce and the top layer, which puts it somewhere between the two. The terms are now used interchangeably in most kitchens.
Why are my scalloped potatoes still hard after baking?
The two most common causes are slices cut too thick (anything over 4mm will not cook through in the standard baking time) and a cream sauce that was too thick before layering, which insulates the potato slices from the oven heat. Slice at 3mm and make sure the sauce pours easily before you layer it. If the dish is still firm after the full baking time, cover it with foil and add another 15-20 minutes.
Can I make scalloped potatoes the day before?
Yes. Assemble the entire dish, cover it tightly with foil, and refrigerate for up to 24 hours. Add 10-15 extra minutes to the covered baking phase to account for the cold dish. Everything else stays the same.
Can I use milk instead of heavy cream?
Whole milk works well as a straight substitution. The sauce will be slightly thinner and the finished dish a little less rich, but the layers hold and the flavor is still good. Avoid low-fat or skim milk, which tend to separate at sustained oven temperatures and produce a grainy sauce.
What is the best cheese for scalloped potatoes?
Gruyère is the standard choice because it melts smoothly, develops a deep golden crust, and has a nutty flavor that doesn’t overpower the potato. Sharp Cheddar and a half-Gruyère, half-Parmesan blend are both solid alternatives. Avoid pre-shredded cheese — the anti-caking starch coating prevents it from melting evenly and can make the top grainy.
How thin should I slice the potatoes?
3mm (1/8 inch) is the target. At that thickness, the slices cook through evenly during the 50-minute covered phase. Thicker than 4mm and the centers stay firm; thinner than 2mm and the slices can dissolve into the sauce and lose their structure.
How do I stop scalloped potatoes from curdling?
Curdling happens when the sauce gets too hot too fast or when cold dairy is added to a very hot pan. Use room-temperature milk and cream, keep the heat at medium when building the sauce, and bake at a steady 190°C (375°F) rather than higher. Avoid boiling the dish aggressively. The roux also acts as a stabilizer, which is one reason a from-scratch sauce is more reliable than poured raw cream.
Conclusion
These scalloped potatoes take about 20 minutes of active prep, and then the oven handles the rest. The sauce is the part worth paying attention to: get the roux cooked through, add the liquid gradually, and season it well before it goes into the dish. If you do those three things, the bake is straightforward. The 15-minute rest at the end matters more than it sounds. That is what determines whether you get clean, layered portions or a spreading pool of cream when the spatula goes in.
Scalloped Potatoes: Recipe Card

Scalloped Potatoes: Creamy, Cheesy, and Made from Scratch
Ingredients
Method
- Preheat oven to 190°C (375°F). Butter a 9×13 inch baking dish. Peel potatoes and slice 3mm (1/8 inch) thin. Toss with 1 tsp salt and set aside.
- Melt butter in a saucepan over medium heat. Add garlic and cook 1 minute, stirring. Add flour and whisk for 2 full minutes until the paste smells faintly nutty.
- Add milk and cream in a slow stream, whisking constantly. Cook 5-7 minutes over medium-high heat until the sauce thickens enough to coat the back of a spoon.
- Remove from heat. Add 1 tsp salt, 1/2 tsp pepper, and nutmeg. Stir in half the Gruyère until melted. Taste and adjust seasoning.
- Layer half the potato slices in the dish, overlapping by a third. Scatter half the onion over. Pour half the sauce over and spread to the edges. Repeat with remaining potatoes, onions, and sauce. Top with remaining Gruyère.
- Cover tightly with foil. Bake 50 minutes.
- Remove foil. Bake uncovered 20-25 minutes until top is deep golden brown and a knife slides through the center without resistance.
- Rest uncovered for 15 minutes before slicing. Serve with a wide spatula.
