Cacio e Pepe

Food

Cacio e Pepe

Three ingredients, thirty years of practice

Prep 5 min
Cook 15 min
Servings 2
There is a particular cruelty in a dish that appears so simple. Three ingredients — cheese, pepper, pasta — and a technique that takes years to execute reliably. Every Roman grandmother who has made this for fifty years will tell you it is nothing, and she is lying, and she knows she is lying, and she is doing it deliberately. The problem, if cacio e pepe has a problem, is that it looks like it should be forgiving. It isn't. The cheese must be very finely grated — microplane-level, almost a powder — or it will clump into elastic strings. The pasta water must be warm but not hot, because protein seizes above 70°C and you will have scrambled eggs in pasta form. The pan must be off the heat when the cheese goes in, or barely on it. The ratio of pasta water to cheese is a moving variable you are adjusting throughout the final two minutes of cooking, which requires attention that cannot be divided. And then, when it works — and it will work — it is one of the most complete dishes in European cooking. The pepper is not a garnish. It is structural. Properly toasted and coarsely cracked, it blooms in the fat of the cheese, creating a warmth that is not heat but something more like presence. The Pecorino Romano is sharp, saline, ancient-tasting. The pasta should be tonnarelli if you can find it: a Roman square-cut spaghetti with more surface area and a satisfying resistance. No cream. No butter — or a small amount, which is allowed but not traditional. No garlic. The restraint is the point.

Scale Recipe

1 10 20

Instructions

0/7 complete

Toast and grind the pepper

Place the whole peppercorns in a dry skillet over medium heat. Shake continuously for 2–3 minutes until fragrant and lightly smoking. Tip onto a board. Crush coarsely with the base of a heavy pan or use a mortar: you want a mix of large cracks and fine powder, not a uniform grind. This texture variation is important for both flavour and mouthfeel.

Grate the cheese

Grate both cheeses on a microplane grater into a wide bowl until they resemble fine, dry powder. This texture is not optional — larger shreds will not emulsify. Combine and set aside. Reserve a small handful separately to finish the dish.

Cook the pasta in minimal water

Bring a smaller pot of water than usual to a boil — about 2 litres for 200g pasta. Salt it lightly (the Pecorino is already very salty). Cook the tonnarelli or spaghetti 2 minutes less than the package suggests, stirring frequently. Before draining, reserve 250ml of starchy pasta water in a measuring jug.

The concentrated starchy water is the emulsifying agent. Without it, the sauce breaks.

Bloom the pepper

While the pasta cooks, heat the olive oil in a wide skillet or sauté pan over medium heat. Add two-thirds of the ground pepper. Let it sizzle for 60–90 seconds, stirring. You will smell it change — the raw spice note gives way to something rounder and more aromatic. Add 60ml of the reserved pasta water to the pan to stop the cooking and create a base.

Add the pasta

Using tongs, transfer the underdone pasta directly from the pot into the pepper pan. Do not drain first — the small amount of water clinging to the pasta is useful. Toss vigorously over medium-low heat for 1–2 minutes. The pasta will finish cooking in the pan.

Build the sauce

Remove the pan from the heat entirely. Let it cool for 30 seconds — this is important. Add three-quarters of the grated cheese in one addition. Toss rapidly. Add 2–3 tablespoons of warm pasta water and continue tossing. The cheese should dissolve into a silky, cohesive coating. If the sauce looks tight, add a splash more pasta water. If it looks loose, keep tossing over very low heat.

Temperature is everything here. Too hot: the cheese seizes. Too cool: it won't melt. Aim for a pan you can hold your hand near without discomfort.

Finish and serve

Divide between two warm bowls. Scatter the remaining cheese and remaining ground pepper over the top. Serve immediately — this dish waits for no one.
<button type="button" class="group/star p-0.5 transition-transform hover:scale-110 focus:outline-none focus-visible:ring-2 focus-visible:ring-citrus-400 rounded" hx-post="/api/community/rate" hx-vals='{&quot;slug&quot;:&quot;cacio-e-pepe&quot;,&quot;rating&quot;:1}' hx-target="#engagement-section" hx-swap="outerHTML" aria-label="Rate 1 out of 5" > <svg class="w-7 h-7 text-salt-300 group-hover/star:text-citrus-300 transition-colors" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" > <path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.562.562 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.562.562 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z" /> </svg> </button> <button type="button" class="group/star p-0.5 transition-transform hover:scale-110 focus:outline-none focus-visible:ring-2 focus-visible:ring-citrus-400 rounded" hx-post="/api/community/rate" hx-vals='{&quot;slug&quot;:&quot;cacio-e-pepe&quot;,&quot;rating&quot;:2}' hx-target="#engagement-section" hx-swap="outerHTML" aria-label="Rate 2 out of 5" > <svg class="w-7 h-7 text-salt-300 group-hover/star:text-citrus-300 transition-colors" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" > <path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.562.562 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.562.562 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z" /> </svg> </button> <button type="button" class="group/star p-0.5 transition-transform hover:scale-110 focus:outline-none focus-visible:ring-2 focus-visible:ring-citrus-400 rounded" hx-post="/api/community/rate" hx-vals='{&quot;slug&quot;:&quot;cacio-e-pepe&quot;,&quot;rating&quot;:3}' hx-target="#engagement-section" hx-swap="outerHTML" aria-label="Rate 3 out of 5" > <svg class="w-7 h-7 text-salt-300 group-hover/star:text-citrus-300 transition-colors" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" > <path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.562.562 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.562.562 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z" /> </svg> </button> <button type="button" class="group/star p-0.5 transition-transform hover:scale-110 focus:outline-none focus-visible:ring-2 focus-visible:ring-citrus-400 rounded" hx-post="/api/community/rate" hx-vals='{&quot;slug&quot;:&quot;cacio-e-pepe&quot;,&quot;rating&quot;:4}' hx-target="#engagement-section" hx-swap="outerHTML" aria-label="Rate 4 out of 5" > <svg class="w-7 h-7 text-salt-300 group-hover/star:text-citrus-300 transition-colors" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" > <path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.562.562 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.562.562 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z" /> </svg> </button> <button type="button" class="group/star p-0.5 transition-transform hover:scale-110 focus:outline-none focus-visible:ring-2 focus-visible:ring-citrus-400 rounded" hx-post="/api/community/rate" hx-vals='{&quot;slug&quot;:&quot;cacio-e-pepe&quot;,&quot;rating&quot;:5}' hx-target="#engagement-section" hx-swap="outerHTML" aria-label="Rate 5 out of 5" > <svg class="w-7 h-7 text-salt-300 group-hover/star:text-citrus-300 transition-colors" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" > <path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.562.562 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.562.562 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z" /> </svg> </button>

Be the first to rate