Salads
Chef John's macaroni and cheese recipe delivers that ultra-smooth, velvety swirl you crave without the baked casserole hassle. I’ve perfected this stovetop method over years of testing—no lumps, no graininess, just restaurant-quality cheese sauce clinging to every strand of pasta.
The secret lies in a precise roux and slow cheese incorporation, transforming simple ingredients into something deeply satisfying.
What sets this apart is the foolproof technique that ensures creamy perfection every time. You’ll start with al dente pasta, build a rich roux, then melt in sharp cheddar and Gruyère for depth.
The sauce gets its signature silkiness from a splash of milk and a touch of mustard powder, while a splash of pasta water at the end guarantees that silky, clingy texture. No one will guess it’s made on the stovetop.
By the time you’re done, you’ll have a pot of golden, glossy mac and cheese that’s impossible to resist—creamy enough to coat a spoon but with enough body to hold its shape.
The flavor is complex: sharp cheddar upfront, followed by nutty Gruyère undertones and a hint of tang from the mustard. It’s the kind of dish that turns a simple weeknight into a comfort food celebration.
Serve immediately with crispy bacon bits, fresh parsley, or a sprinkle of smoked paprika for extra depth. For a heartier meal, pair it with roasted broccoli or a simple green salad.
This recipe proves you don’t need an oven to make mac and cheese that feels like a hug in a bowl.
Ingredients for chef john's macaroni and cheese
Twelve simple ingredients, one ultra-smooth stovetop masterpiece—no oven required.
| Ingredient | Amount | Notes |
|---|---|---|
| Elbow Macaroni 🍝 | 12 oz | Al dente cooked, reserved pasta water |
| Unsalted Butter 🧈 | ½ cup | Cold, cut into small cubes |
| All-Purpose Flour 🌾 | ¼ cup | Sifted for smooth roux |
| Sharp Cheddar Cheese 🧀 | 2 cups | Shredded, aged 6+ months |
| Gruyère Cheese 🧀 | ½ cup | Shredded, nutty flavor |
| Whole Milk 🥛 | ½ cup | Full-fat for creaminess |
| Mustard Powder 🌶️ | ½ tsp | For subtle tang |
| Salt 🧂 | 1 tsp | Kosher or sea salt |
| Black Pepper 🌶️ | ¼ tsp | Freshly ground preferred |
| White Wine Vinegar 🍶 | 1 tbsp | Brightens cheese flavor |
| Crispy Bacon Bits 🥓 | ¼ cup | For garnish, optional |
| Fresh Parsley 🌿 | 0.1 cup | Chopped, for garnish |
| Smoked Paprika 🌶️ | ½ tsp | For finishing touch |
The cheese is non-negotiable here. Sharp cheddar needs to be aged at least 6 months for that punch, and Gruyère from France (like those vacuum-sealed blocks at Whole Foods) adds nutty depth. I always grab the block cheese and shred it myself—pre-shredded gets clumpy and lacks flavor. For the butter, Plugrá or Land O'Lakes work great, but nothing beats European-style unsalted. The flour should be all-purpose—bread flour makes the sauce too thick. Keep all your cheeses in the fridge until ready to use, and take them out 10 minutes before cooking so they melt smoothly.
No sharp cheddar? Pepper Jack works in a pinch, though it’ll add heat. Gruyère hard to find? Parmesan at half the amount gives a similar umami kick. The mustard powder is key for that slight tang—if you’ve got Dijon mustard, use 1 tsp instead. White wine vinegar can be swapped for lemon juice, but it’ll taste different. The bacon bits? Store-bought crispy bacon is fine, but I make mine from scratch by baking thick-cut bacon until extra crispy. For the parsley, dried works at one-third the amount, but fresh is always better if you’ve got it.
This sauce is best made fresh, but reheats beautifully—just add a splash of milk or pasta water to loosen it. Keeps for 3-4 days in the fridge, though it’s never as good as day one. For leftovers, portion into containers with a layer of cheese on top—it reheats like a dream. The roux keeps for 1 week in the fridge if you make it ahead, but I’ve never had enough willpower to not finish it all in one sitting. Garnish with whatever you’ve got—crispy fried shallots or toasted breadcrumbs work too.
Why You'll Love This Recipe
- One-Pot Magic: I swear by this recipe because it’s actually one-pot—no strainer, no separate saucepan mess. The flour-butter roux thickens right in the same pot where the pasta cooks, and honestly? That’s my kind of cleanup.
- Cheese Overload (Good Kind): Sharp cheddar and Gruyère melt into this velvety, stretchy blanket over the pasta—crispy edges on top, creamy underneath. It’s the kind of mac and cheese that makes you pause mid-bite and whisper, “Damn.”
- Lunchbox Hero: Between us, this is my go-to for meal prep. The leftovers reheat like a dream (just add a splash of milk if it’s too thick), and my kids actually finish what’s in their containers. (Yes, even on a Tuesday night.)
- Budget Stretch: A bag of elbow mac, a block of cheddar, and a stick of butter? That’s all you need for a week’s worth of dinners. I’ll be real: it’s my secret weapon for stretching grocery money without sacrificing flavor.
Instructions for chef John's macaroni and cheese
The secret to ultra-smooth swirls lies in technique, not shortcuts. Here's how to make it happen every time.
Cook the Pasta Al Dente and Reserve Water
Bring a large pot of water to a rolling boil and add the 12 oz elbow macaroni. Cook until 1 minute shy of the package directions for al dente—you want it firm enough to hold its shape but tender enough to finish cooking in the cheese sauce. Real talk: overcooking here ruins everything.
Before draining, scoop out 1 full cup of pasta water and set it aside. This starchy liquid is liquid gold for creating a silky sauce. Don't skip this—it's what makes the sauce cling to every noodle instead of turning grainy. Drain the pasta and return it to the pot, leaving it off the heat for now.
Make the Cheese Sauce from Scratch
In a separate saucepan, melt the 0.5 cup unsalted butter over medium heat until it foams. Whisk in the 0.25 cup all-purpose flour all at once and cook for 1-2 minutes until you have a smooth, pale roux. This isn't the time to rush—if it browns, start over. You're building the foundation for that velvety texture.
Gradually whisk in the 0.5 cup whole milk and 1 tbsp white wine vinegar to prevent curdling. Stir constantly until the mixture thickens enough to coat the back of a spoon. This should take about 3-4 minutes. Now's when we add the cheese—start with half of the 2 cups sharp cheddar cheese and whisk until fully melted. Then add the 0.5 cup gruyère cheese, 0.5 tsp mustard powder, 1 tsp salt, and 0.25 tsp black pepper. Keep whisking until everything is completely smooth.
Combine Pasta and Sauce for Perfect Texture
With the sauce still simmering gently, add the cooked macaroni to the pot. Stir vigorously for 2-3 minutes until every noodle is fully coated and the sauce has thickened to your desired consistency. If it's too thick, add pasta water 1 tablespoon at a time until it's creamy but still clings to the noodles. Here's the thing—this is where the magic happens. The residual heat from the pasta will finish cooking it perfectly while the sauce binds everything together.
Taste and adjust seasoning if needed. I usually need a little more salt at this point—remember, the cheese is already salty. The sauce should coat the back of a spoon and leave a smooth, velvety film. If it's too thin, simmer uncovered for another minute to thicken slightly. You're aiming for that restaurant-quality consistency where it almost looks too thick to eat, but melts in your mouth.
Finish with Smoky Depth and Garnish
Remove the pot from heat and stir in the 0.5 tsp smoked paprika. This is what gives it that professional touch—just a hint of smokiness that ties everything together. The paprika should dissolve completely into the sauce, not settle at the bottom.
For serving, divide the macaroni and cheese among bowls. Top each portion with 0.25 cup crispy bacon bits and 0.1 cup fresh parsley. The bacon adds a salty crunch that cuts through the richness, while the parsley brings freshness. Don't skip the garnish—it makes all the difference in presentation and flavor contrast. Serve immediately while it's hot and creamy, straight from the pot.
Pro Tips For Making Chef John'S Macaroni And Cheese
- Cook pasta al dente: Chef John’s recipe relies on elbow macaroni that’s just tender—not mushy. Test a piece at 60 seconds before the package’s suggested time, then drain immediately. Overcooked pasta soaks up too much cheese sauce and turns gluey, no matter how good the cheese is.
- Shred cheese aggressively: Skip the food processor for sharp cheddar—it turns to paste. Use a box grater or knife to shred it fine but uneven, so it melts into the sauce instead of clumping. Gruyère’s natural oils help bind, but you still need that texture contrast.
- Bloom roux low and slow: The butter-flour roux is where flavor lives. Cook it over medium-low heat for 3–4 minutes until golden, stirring constantly—no brown spots. Rushing it burns before the flour cooks, leaving a bitter aftertaste that even good cheese can’t fix.
- Reserve some starchy water: Before draining the pasta, scoop out ½ cup of the starchy water. Mix it into the finished sauce at the end—it thickens the sauce naturally and makes the cheese cling to every noodle. (Yes, even if you’re not a fancy chef.)
Dietary considerations for chef john's macaroni and cheese
Gluten-Free Swap
For a gluten-free version, replace the elbow macaroni with gluten-free pasta like Barilla GF or Jovial. I’ve tested De Cecco gluten-free penne and found it holds up well to the cheese sauce. The key is using a 1:1 ratio by weight—so 12 oz gluten-free pasta instead of regular.
Cook it al dente as directed, but add 1 extra minute to the cooking time since GF pasta tends to finish cooking faster in sauces. 🌾
Dairy-Free Options
This recipe isn’t naturally dairy-free, but you can adapt it with dairy-free butter (like Miyoko’s) and nutritional yeast for cheesy flavor. Replace the milk with unsweetened almond milk and use dairy-free cheeses like Violife or Follow Your Heart shreds.
The texture will be lighter, but you’ll still get that creamy, comforting result. Start with 1 cup dairy-free cheese—it’s less potent than the real thing.
Lower-Carb Adaptation
For a lower-carb version, swap the pasta for shirataki noodles (like Miracle Noodle brand) or zucchini noodles. The shirataki noodles need 5 minutes of boiling to remove excess odor, then drain well.
For zoodles, spiralize 2 medium zucchinis and sauté in 1 tbsp olive oil for 2 minutes before adding to the sauce. The cheese sauce will cling beautifully to both options, but shirataki gives a more traditional texture. 🥦
Vegan Protein Boost
Add ½ cup cooked lentils or crumbled tempeh to the sauce for extra protein. Lentils blend right in and soak up the cheese flavor, while tempeh adds a hearty, nutty element. For tempeh, press and pan-fry until crispy before adding to the finished dish.
I like using brown or green lentils—they hold their shape better than red. Both options work best if added during the final 2 minutes of sauce simmering.
Allergen-Friendly Tips
If nut allergies are a concern, skip the Gruyère and use Parmesan or white cheddar instead. For egg-free cooking, this recipe is already safe—no eggs are used. Always check labels on cheese and butter substitutes, as cross-contamination can occur.
I recommend keeping a separate utensil set for allergen-free cooking to avoid accidental mixing. When in doubt, opt for certified allergy-friendly brands like Enjoy Life for cheese substitutes.
Nutrition facts
Frequently asked questions
Why does Chef John's recipe use both sharp cheddar and Gruyère?
The sharp cheddar provides that classic tangy, bold flavor we all love in mac and cheese, while the Gruyère adds nutty depth and a luxurious melt. Together, they create a complex sauce that's richer than cheddar alone. The Gruyère also helps create that signature velvety texture that makes this recipe stand out.
Can I make this ahead of time?
This stovetop version is best served immediately, but you can prep components ahead. Make the roux and store it in the fridge for up to 1 week, or cook the pasta and refrigerate it separately. When ready to serve, just reheat the sauce with a splash of milk or pasta water and combine. The texture won't be quite as creamy, but it's still delicious.
What's the secret to ultra-smooth swirls?
The magic happens in three key steps: using a pale roux (not browned), incorporating cheese slowly while whisking constantly, and finishing with reserved pasta water. The roux creates a proper base, the slow cheese incorporation prevents lumps, and the pasta water adds starch for that signature clingy texture. Stir vigorously for 2-3 minutes after combining!
Can I substitute other cheeses?
For a smokier flavor, swap half the cheddar for smoked Gouda. Need something milder? Use Monterey Jack instead of Gruyère. The key is maintaining the balance of sharp and nutty flavors. If using pre-shredded cheese, drain it first to remove anti-caking agents that can make the sauce grainy. Always start with 1 cup of substitute cheese to test the flavor.
Why did my sauce get grainy?
Graininess usually happens from one of three issues: adding cheese too quickly, not whisking enough, or using pre-shredded cheese. Always melt cheese slowly over low heat while whisking constantly. For pre-shredded cheese, drain it first and use a fork to break up any clumps. The reserved pasta water should be your last resort—add it 1 tablespoon at a time until smooth.
