On the hottest afternoons in the Philippines, nothing beats a tall glass of halo-halo. The name means mix-mix in Tagalog, and it doubles as the serving instruction: stir everything together before you take your first spoonful.
I make this all summer. It is cold, sweet, and creamy, with chewy bits of coconut gel and beans in every bite, and the combination changes from one spoonful to the next. This is my home version, built from jarred Filipino ingredients so it comes together on a weeknight with no cooking at all.

What is halo-halo?
Halo-halo is the Philippines' shaved ice dessert. Preserved fruits, sweetened beans, coconut gel, and sugar palm fruit go into the bottom of a tall glass. Shaved ice gets mounded on top, evaporated milk is poured over so it seeps down through the layers, and the glass is finished with leche flan, ube halaya (purple yam jam), a scoop of ube ice cream, and a sprinkle of toasted pinipig, which is pounded young rice.
What should you expect? Every spoonful is different. One bite is milky ice, the next is chewy macapuno, the next carries a bit of silky flan. The ice keeps it refreshing, and mixing well matters: an unmixed glass gives you plain ice on top and a syrup-heavy layer at the bottom. If you like this style of dessert, my che thai works the same way, with Vietnamese fruits and coconut milk instead.
Ingredients
Makes 4 tall glasses.

For layering:
- 4 tablespoons sweetened red mung beans (about 1 tablespoon per glass)
- 4 tablespoons sweetened white beans
- 4 tablespoons macapuno (sweetened coconut strings)
- 4 tablespoons nata de coco (coconut gel)
- 4 tablespoons kaong (sugar palm fruit)
- 4 tablespoons sweetened jackfruit, chopped
- 4 tablespoons ube halaya (purple yam jam), plus a little extra for smearing the glasses
For the ice and milk:
- 4 cups shaved or finely crushed ice (about 1 cup per glass)
- 1 cup evaporated milk (about 1/4 cup per glass)
- 3 to 4 tablespoons sweetened condensed milk, for drizzling
- 1 to 2 tablespoons sugar per glass, optional
For the toppings:
- 4 slices leche flan (store-bought works well)
- 4 scoops ube ice cream (1 per glass)
- 2 tablespoons pinipig, toasted in a dry pan until golden (crushed cornflakes work as a substitute)
How to make halo-halo
Prep: 20 minutes. Cook: none, when you use jarred ingredients and store-bought flan. Serves: 4.
- Put 4 tall glasses in the freezer for 15 minutes. In my kitchen, ice in a room-temperature glass starts weeping within two or three minutes, and that melt waters down the first pour of milk.
- Smear about 1 tablespoon of ube halaya along the bottom and slightly up the inside of each chilled glass. It gives a purple streak you can see through the glass.
- Spoon 1 tablespoon of each mix-in into every glass: beans first, then macapuno, nata de coco, kaong, and jackfruit. The layer should fill about a third of the glass.
- Mound 1 cup of shaved ice on top of each glass, packing it gently with the back of a spoon so it holds its shape.

- Sprinkle with sugar if you like it sweeter, then pour 1/4 cup of evaporated milk slowly over the ice in each glass so it seeps down through the layers instead of pooling on top.
- Set a scoop of ube ice cream on each glass, add a slice of leche flan, and spoon a little extra ube halaya on top.
- Sprinkle with the toasted pinipig, drizzle with condensed milk, and serve right away with long spoons. Tell everyone to mix it all together first.
My layering order and ice-to-milk ratio
The ratio I use is 1 cup of shaved ice to 1/4 cup of evaporated milk per glass. Less milk leaves dry, plain ice; more milk pools at the bottom before you finish mixing. I pour the milk over the ice slowly, never all at once, so it sinks through and sweetens the beans at the bottom.

I layer the least syrupy mix-ins (beans) first and the syrupy fruits on top of them, with the show pieces (flan, ice cream) last. They stay cold and in place on top of the ice instead of sinking into it. Assemble at the last minute: shave the ice only when the glasses are filled and ready, because a finished glass waits for no one.
Tips and variations
- Use evaporated milk for the main pour. Sweetened condensed milk is too thick to seep through shaved ice, so save it for the final drizzle.
- If your jarred fruits sit in heavy syrup, drain most of it off before layering. The syrup adds sugar without adding much flavor.
- You can prep the mix-ins and the flan a day ahead and keep them cold. Shave the ice only when you are ready to serve.
- Add cooked sago pearls, gulaman (agar) jelly cubes, sweet corn, or diced mango for your own mix. For a dairy-free glass, use coconut milk in place of the evaporated milk.
- For another chilled dessert that feeds a crowd, try my mango sticky rice: sweet coconut rice with ripe mango, served cold.
Troubleshooting: Fix My Halo-Halo
Something off with your glass? Pick what went wrong below and get a practical next step you can use right now.
This troubleshooting guide is not available yet.

Halo-Halo: Filipino Shaved Ice Dessert
Ingredients
Method
- Put 4 tall glasses in the freezer for 15 minutes. In Paul's kitchen, ice in a room-temperature glass starts weeping within two or three minutes, and that melt waters down the first pour of milk.
- Smear about 1 tablespoon of ube halaya along the bottom and slightly up the inside of each chilled glass. It gives a purple streak you can see through the glass.
- Spoon 1 tablespoon of each mix-in into every glass: beans first, then macapuno, nata de coco, kaong, and jackfruit. The layer should fill about a third of the glass.
- Mound 1 cup of shaved ice on top of each glass, packing it gently with the back of a spoon so it holds its shape.
- Sprinkle with sugar if you like it sweeter, then pour 1/4 cup of evaporated milk slowly over the ice in each glass so it seeps down through the layers instead of pooling on top.
- Set a scoop of ube ice cream on each glass, add a slice of leche flan, and spoon a little extra ube halaya on top.
- Sprinkle with the toasted pinipig, drizzle with condensed milk, and serve right away with long spoons. Tell everyone to mix it all together first.
Notes
Note 2: Chill the glasses for 15 minutes before assembling. In Paul's kitchen, ice in a room-temperature glass starts weeping within two or three minutes, and that melt waters down the first pour of milk.
Note 3: Drain the heavy syrup off jarred fruits before layering. The syrup adds sugar without adding much flavor, and it throws off the sweetness of the whole glass.
Note 4: Layer the least syrupy mix-ins first (beans), the syrupy fruits on top of them, and the show pieces (flan, ice cream) last. They stay cold and in place on top of the ice instead of sinking into it.
Note 5: Shave the ice last, right before serving. A finished glass waits for no one, so serve immediately with long spoons and tell everyone to mix it all together first.
More Filipino recipes
- Chicken adobo: the savory classic to serve before dessert
- Sinigang: the sour tamarind soup Filipinos love on any day
- Lumpia: crisp fried spring rolls for the savory side of the spread
- Pancit bihon: stir-fried rice noodles that round out a Filipino feast