Dulce de Leche
Milk and sugar cooked down in a wide pot until the water is gone and the milk itself has browned. It is not caramel, and it is not a can in a pot of water.
- Prep
- 10 min
- Cook
- 2 hr
- Serves
- About 450 g (1½ cups) at clásico
- Difficulty
- Medium
Kitchen-tested

Dulce de leche is milk and sugar cooked until most of the water is gone and what remains has browned. It is not caramel. Caramel is dry sugar taken to the edge of burning. This is a wet cook: lactose and milk proteins browning together while the pot concentrates. That is Maillard, and it is why homemade dulce tastes like cooked milk and not like burnt sugar.
The rule people get wrong is treating this like a set-and-forget caramel — or worse, boiling a sealed can of condensed milk and calling that the recipe. The can method is a known shortcut with a real rupture risk. This recipe is the pot. Wide, low, stirred. You are there for it.
Argentine kitchens have made this on the stove for as long as there has been cheap cow’s milk and an afternoon to spare. The jar at the store is the same idea, cooked in a plant. What you cannot buy is the stage: you stop when it is the colour you want, not when a factory decided clásico.
- 1 L4 cupsWhole milkpreferably not ultra-pasteurised. Not skim, not 2%
- 280 g1⅓ cups plus 1 tbspGranulated white sugar
- 1 g¼ tspBaking soda / bicarbonato de sodioweigh it if you can — 1 g is the ceiling, not a suggestion
- 1 g⅛ tspFine saltoptional. Skip it if this is going into alfajores
- 1 pod1 tspVanilla bean, split and scraped — or vanilla extractpod in at the start; extract off the heat at the end. One or the other
Yield and timing
About 450 g — roughly 1½ cups — at clásico thickness, a little less if you take it to repostero. Clock time is 1½ to 3 hours depending on how wide your pot is.
The ratio
1 L milk to 250–300 g sugar is the canonical range for Argentine home pots. I cook at 280 g. Drop to 250 g if you want it less candy-sweet, 300 g if you want a denser, sweeter jar.
On the milk
Whole milk. Fat carries flavour and keeps the mouthfeel from going chalky as the proteins concentrate. Ultra-pasteurised milk works but already tastes cooked and browns a little duller; ordinary pasteurised whole is better. Fresh, not sour — acid curdles the proteins before they brown. Argentine dulce de leche is cow's milk. Goat's milk is another confection, closer to Mexican cajeta.
On the baking soda
People skip this, then wonder why the pot is still beige at hour three, or why it split. Baking soda raises pH, and Maillard runs faster in a mildly alkaline pot — so the milk colours at a simmer, around 95–100 °C / 203–212 °F, instead of sitting white until the proteins coagulate. Too much is worse than none. Above about 1 g per litre you get a soapy taste and a grey-tan colour. Use 1 g. Weigh it. A rounded ¼ teaspoon of fresh soda is close; a heaping one is already too much.
On the vanilla, and the salt
A split pod goes in with the milk at the start: the seeds speckle the pot, the pod infuses the whole cook, and you fish it out at the end. That is how I prefer it. Extract goes in off the heat — two hours of simmer blows off the alcohol and a chunk of the aroma. One or the other, not both. Salt is optional and does not make this savoury; it keeps the sweetness from reading as flat candy. If you are filling alfajores, skip it — the cookie already has salt.
Equipment
- A wide, heavy pot — 28–32 cm across, 4–5 L, stainless or enamelled steel. Surface area is the timer
- A heatproof spatula or wooden spoon, flat enough to scrape the bottom and the walls
- A wet pastry brush, to knock sugar crystals off the wall
- A small plate in the freezer, for doneness checks
- A clean 500 ml glass jar, sterilised
Not needed, and actively harmful: a sealed can of condensed milk sitting in a pot of water. That is not this recipe. Cans can rupture, the process is untested as home canning, and you cannot see colour, scrape, or stop at clásico. Also skip: thin nonstick (two hours of scraping wrecks it, and you cannot see the brown film on the wall); a pressure cooker as the method, because enclosed steam is not a Maillard pan; the microwave; and a whisk once it thickens.
Method
Dissolve everything cold5 min
Pour the milk into the wide pot. Add the sugar, baking soda, and salt. If you are using a pod, split it, scrape the seeds in, and drop the pod in. Stir cold until the sugar is mostly dissolved and the soda has no dry pockets.
Starting cold matters. Sugar dumped onto hot milk sits on the bottom and can scorch before it dissolves. Soda dumped into a rolling simmer foams hard and climbs the walls. A faint yellow tint from the soda is normal — it is not a curdle.
Put a small plate in the freezer for testing later. In a wide pot, stir cold whole milk, sugar, baking soda and optional salt until mostly dissolved, with no dry soda pockets. Use no more than 1 g soda. If using a vanilla pod, add its seeds and split pod now; save extract for the end.
Bring it to a simmer10–15 min
Medium heat, stirring now and then. You want a simmer, not a boil: small bubbles at the edge, a surface that shivers, around 95–98 °C / 203–208 °F. A hard boil throws protein foam and scorches the bottom before the water has had time to leave.
When it first simmers the soda will foam. Knock it down with the spatula and it settles in a minute or two. If it threatens the rim, drop the heat. Do not add butter "to stop the foam" — that is a different confection.
Heat on medium, stirring occasionally, to a gentle simmer at 95–98 °C / 203–208 °F, about 10–15 minutes. Lower the heat if the initial foam rises; stir it down with a spatula. Do not boil hard or add butter.
The long reduction60–90 min
Lower the heat so the surface barely moves. Uncovered. Stir every 5–8 minutes for the first hour, scraping the bottom in a full circle and the walls where a beige film forms.
That film is flavour if it has browned and not blackened — scrape it back in. If a patch has gone dark brown-black and smells bitter, leave that patch. Bitterness does not cook out.
This stage looks like nothing is happening, and then it looks like café con leche. Volume drops. Colour shifts from white to ivory to the tan of milky coffee. It still pours. You will smell sweet milk, then a faint toasted note — that note is Maillard, proteins and lactose, not sucrose caramelising. Sucrose needs roughly 160 °C / 320 °F to caramelise dry, and you are nowhere near that.
A wide pot at a true low simmer hits café con leche around 60–75 minutes. A narrower pot will still be pale. Do not raise the heat to catch up — that scorches the bottom while the top is still thin.
Simmer uncovered over low heat for 60–90 minutes, stirring and scraping the bottom and sides every 5–8 minutes during the first hour. Incorporate beige film, not blackened or bitter patches. Expect a milky-coffee color after roughly 60–75 minutes in a wide pot; a narrow pot takes longer. Do not raise the heat to hurry it.
The thickening20–40 min
Once it looks like café con leche, the solids are high enough that the bottom wants to catch. Stir every 1–2 minutes and keep the simmer lazy.
Colour. Café con leche is pale tan and still pourable — good for coffee, flan, ice cream. *Clásico* is commercial-jar brown: a ribbon that falls from the spatula and sits a second before sinking. *Repostero* is mahogany, stiff, pulling from the sides in a slow mass — that is pastry filling.
Sound. The bubbles get slower and heavier. When it plops rather than simmers, you are in the last stretch.
The cold plate. Drop a small spoonful on the frozen plate, wait ten seconds, and tilt it. Café con leche runs. Clásico wrinkles and holds a trail. Repostero sits in a mound.
It thickens more as it cools, so stop a notch looser than the jar you want. For toast, medialunas, and pancakes, stop at clásico. For alfajores de maicena, take it to repostero — a loose dulce in a cornstarch cookie is a leak.
If the sides crust with pale sugar, brush them down. Those crystals can seed a grainy jar.
As it thickens, stir every 1–2 minutes for another 20–40 minutes. Test a spoonful on the frozen plate: wait ten seconds and tilt. Clásico leaves a trail; repostero holds a mound and suits alfajores. Stop slightly looser than desired because it thickens on cooling. Brush down pale sugar crystals on the sides.
Finish and jar it12 min, then cool
Off the heat when the plate test says so. Fish out the vanilla pod, or stir in the extract now, off the heat. Residual heat in a heavy pot keeps cooking — err loose.
Pour into the warm sterilised jar, wipe the rim, lid on. Cool until the jar is no longer hot, about an hour, then refrigerate.
Do not leave a pot of warm dairy-sugar paste on the stove all evening. Homemade dulce has no industrial preservative. Treat it like a dairy product that happens to be sweet.
Remove from the heat. Discard the vanilla pod, or add the vanilla extract now. Pour into a warm sterilized jar, wipe the rim and cover. Cool until no longer hot, about an hour, then refrigerate; this is refrigerated dairy, not shelf-stable canning.
Storing it
How long it keeps
Refrigerated, in a clean jar, 2–3 weeks for homemade. Commercial jars last longer because they are a plant process — do not use a store date as your homemade date. A thin skin on the surface is not spoilage; press parchment onto it if it bothers you. It freezes: small containers, a little headspace, three months. Thaw in the fridge and stir it smooth.
If it goes grainy
Usually lactose and sucrose crystallising in the cold. Not dangerous. Prevention is dissolving the sugar fully at the start, brushing down wall crystals, and not stirring the sugar crust back in. To rescue it, warm it over a water bath and stir until the crystals dissolve; a teaspoon of warm milk over low heat helps stubborn ones. You are slightly re-diluting it — that is a fix, not an improvement.
Not negotiable
- Do refrigerate it, and use a clean spoon every time. - Do throw it out if it smells fermented, fizzy, or cheesy. - Don't water-bath can this formula. There is no lab-tested process here and I am not handing you one. - Don't leave it in the danger zone, roughly 5–60 °C / 40–140 °F, for hours. Cool it before the fridge, but do not let it sit out.
Troubleshooting
- Still white after an hour.
Heat too low, pot too narrow, or no soda. Do not add more soda now — alkali late tastes soapy and foams. Wider pot next time.
- Soapy, or grey.
Too much baking soda. There is no fix I trust. Start over at 1 g.
- It split — grainy and watery.
The proteins coagulated: milk slightly acid, heat too high, or an unstirred bottom boil. Sometimes a splash of hot milk and a hard stir off the heat brings it back. Curds sitting in sweet whey means it is broken. Next batch: fresh milk, lower heat, soda from the start.
- Scorched, bitter.
Do not scrape the burnt part back in. If the rest tastes clean, pour it off into a new pot and finish. If the whole batch is bitter, it is done.
- It foamed over.
Soda plus a boil, or too small a pot. Lower the heat. Next time: wider pot, true simmer, soda dissolved cold.
- Too thin after cooling.
You stopped at café con leche. Return it to the pot and cook to clásico. It is easier to cook it further than to thin a repostero.
- Too thick, like paste.
You went to repostero. Warm it with a spoon or two of milk over very low heat — or fill alfajores with it.
- Gritty, from the wall crust.
Those crystals seeded the batch. Water-bath and stir. Prevention is the wet brush.
- Colour right, taste flat.
Salt and vanilla. A pinch of salt off the heat often does more than another half-hour of browning.
Substitutions
Swaps, and the verdict on each
| Swap | Verdict |
|---|---|
| Whole cow's milk | Traditional. Use this |
| 2% or skim | Known departure. Chalkier, easier to split |
| Ultra-pasteurised whole | Usable. Duller browning |
| Goat's milk | Not this recipe — that is closer to cajeta |
| White sugar, 250–300 g per litre | Canonical range |
| Brown sugar / panela / honey | Known departure. Wrong flavour; honey's acid can curdle |
| Baking soda, ~1 g per litre | Canonical home practice |
| Baking powder | No. It is not soda |
| Vanilla pod from the start | Traditional, and my preference |
| Vanilla extract off the heat | Fine, and common |
| No vanilla | Traditional in some pots. Valid |
| Cinnamon stick | Known departure. Household variation, not standard |
| Cream at the end | Known departure. Richer, not necessary |
| Condensed milk, can in water | Not the method. Cans can rupture, you cannot see or scrape, and it is untested as canning |
| A store-bought jar | Not a substitution here — but for alfajores tonight, a firm commercial repostero is what pastry kitchens actually use |
Scaling
Canonical ratio: 1 L milk to 250–300 g sugar to about 1 g soda. Scale on the milk.
| Row label | Half | Base | Double |
|---|---|---|---|
| Milk | 500 ml (2 cups) | 1 L (4 cups) | 2 L (8 cups) |
| Sugar | 140 g | 280 g | 560 g |
| Baking soda | 0.5 g (⅛ tsp) | 1 g (¼ tsp) | 2 g (½ tsp) |
| Salt (optional) | a pinch | 1 g | 2 g |
| Vanilla | ½ pod or ½ tsp | 1 pod or 1 tsp | 1–2 pods or 2 tsp |
| Yield at clásico | ~225 g | ~450 g | ~900 g |
| Time, same wide pot | a little under base | 1½–3 h | longer, or two pots |
Why doubling costs more than double
Evaporation is a surface problem, so doubling in the same pot more than doubles the time. Use a wider pan or two pots. Soda scales with milk — 1 g per litre, not "a bit extra for luck." A half batch in a wide pot can finish in 70–90 minutes. Watch the colour, not the clock.
What to serve it with
Heat it gently if you are saucing something. A hard boil on finished dulce can split it.
- Medialunas, split and still warm
- Alfajores de maicena, as the glue — cooked to repostero, or clásico chilled overnight until it stands
- A spoon, standing in the jar
- Pancakes, panqueques, toast, other facturas
- Flan, a spoonful on the plate or warmed and poured
- Ice cream, ribboned through at the end or warmed as a sauce
Do not confuse this with the dark dry-sugar caramel you cook in a flan mould. That is caramel; this is dulce. They can sit on the same plate.
Questions
Is this caramel?
No. Caramel is sucrose browned around 160 °C / 320 °F and up. Dulce de leche never gets that hot. The brown is Maillard — milk proteins plus lactose, helped by a slightly alkaline pot, while the water leaves. Same colour family, different chemistry.
Why baking soda?
pH. Maillard likes a higher pH, and soda gets you browning at a simmer before the proteins curdle. Skip it and you can still get there, slowly, with more risk of a split or a pale result. Overdo it and you get soap and grey.
How do I know when it's done?
Colour plus the cold-plate test, not the clock. Café con leche pours. Clásico ribbons and holds a trail. Repostero mounds. Stop a notch looser than the jar in your head — it thickens as it cools.
Slow cooker or pressure cooker?
An uncovered slow cooker will reduce milk if you give it most of a day and still stir near the end. A sealed pressure cooker hides the stage and does not evaporate. This recipe is the open wide pot.
Why did mine take three hours?
Narrow pot, timid heat, or too much milk for the surface area. Next time, wider. Do not crank the heat to punish the pot.
Can I can it for the pantry?
Not from this page. Homemade dulce goes in the fridge.
Is the condensed-milk can method the same thing?
No. Condensed milk is already concentrated and sweetened; you would only be browning it. The unopened-can-in-boiling-water version adds a rupture risk I will not walk you through. If you need dulce tonight and cannot stand at a pot, buy a jar.