- Prep
- 30 min
- Cook
- 20 min
- Total
- 50 min
- Serves
- 4
Ingredients
What you’ll need — tap to tick off as you go
- 120 g
- 80 g
- 100 g
- 80 g
- 100 g
- 120 g
- 4 slices
- 240 ml
- 600 g
- 30 g
- 2 tbsp
Process
Timers built in · swap anything · ask as you cook
Chill 4 tall glasses or bowls in the freezer for at least 10 minutes. Drain the sweet red beans, sweet white beans, kaong, and nata de coco well in a colander so no syrup thins the dessert.
Slice the nangka into thin strips about 5 cm long. Cut the nata de coco into small cubes. Set both aside with the drained beans and kaong.
If you want sweeter milk, stir 2 tbsp sugar into the 240 ml chilled evaporated milk until dissolved. Keep it cold until serving.
Spoon 2 tbsp each of sweet red beans, sweet white beans, kaong, and nata de coco into the bottom of each chilled glass. Add a few strips of nangka to each.
Add 2 tbsp ube halaya to each glass, then place 1 slice of leche flan on top of the ube layer.
Fill each glass to the top with 150 g crushed ice, packing it gently so it mounds slightly above the rim.
Pour 60 ml chilled evaporated milk over the ice of each serving. Sprinkle with pinipig if using.
Serve immediately with a long spoon and a straw. Stir everything together just before eating so the ube, leche flan, and milk mix into the ice.

Kitchen notes
Kitchen notes
- The most common mistake is adding too much milk at once, which melts the ice into a soupy puddle. Pour only 60 ml per glass and let each person add more at the table if they want.
- Drain every bottled or canned ingredient for at least 5 minutes. Their packing syrup is heavy and will make the halo-halo watery before you even start.
- Use crushed ice, not whole cubes. If you only have cubes, pulse them in a food processor in short bursts until they look like coarse snow, then pack them immediately.
- Chill the glasses and the evaporated milk beforehand. Cold glass and cold milk slow the melting so the layers stay distinct while you serve.
Substitutions
- nangka→canned peaches or lychees, drained and sliced
- kaong→canned palm seeds or extra nata de coco
- leche flan→store-bought caramel custard or a thick slice of egg pudding
- evaporated milk→full-fat coconut milk for a dairy-free version
- pinipig→toasted puffed rice or crushed cornflakes
Storage & reheating
Halo-halo is best assembled and eaten immediately. If you must prepare parts ahead, keep the drained beans, nangka, kaong, and nata de coco in separate airtight containers in the fridge for up to 3 days, and store ube halaya and leche flan covered in the fridge for up to 4 days. Do not freeze the assembled dessert; the ice will melt and the textures will collapse. To serve later, chill the glasses and milk again, then layer fresh ice and toppings just before eating.
FAQ
The questions we get asked most
Why did my halo-halo turn into a soupy puddle?
The ice melted faster than it could be eaten, usually because the glass, milk, and toppings were not cold enough. Chill the glasses and evaporated milk for at least 10 minutes, drain all bottled toppings well, and pack the crushed ice firmly right before pouring the milk. Serve immediately and stir only at the table.
Can I make halo-halo ahead of time for a party?
You can prep the components up to 3 days ahead: drain and refrigerate the beans, kaong, and nata de coco in separate containers, and keep ube halaya and leche flan covered in the fridge. Assemble the glasses only when guests are ready, because the ice starts melting within minutes. Set up a topping bar so each person builds their own.
What can I use instead of nangka if I cannot find jackfruit?
Canned peaches, lychees, or fruit cocktail are common substitutes and give a similar sweet, soft texture. Drain them well and slice larger pieces into strips. If you use fresh jackfruit, make sure it is fully ripe so it is sweet and soft, not firm and starchy.
Is halo-halo gluten-free and dairy-free?
It is naturally gluten-free because none of the standard ingredients contain wheat, barley, or rye. It is not dairy-free as written because evaporated milk and leche flan contain milk and eggs. For a dairy-free version, replace the evaporated milk with full-fat coconut milk and omit the leche flan.
How do I know when the halo-halo is ready to eat?
It is ready the moment the ice is packed and the milk is poured. There is no cooking step at the end. The tell-tale sign of a good serving is that the ice still looks dry and snowy on top, not glossy or collapsed, and the layers are still visible through the glass.
Can I use regular ice cubes instead of crushed ice?
Yes, but you must crush them first. Pulse whole cubes in a food processor in short bursts until they look like coarse snow, or place them in a sturdy bag and crush with a rolling pin. Whole cubes make the dessert hard to eat with a spoon and melt unevenly.
Why is my halo-halo not sweet enough even with all the toppings?
The sweetness comes from the toppings and the milk, and cold temperatures dull perceived sweetness. If it tastes flat, stir 1 to 2 tbsp sugar into the evaporated milk before pouring, or add an extra spoon of ube halaya. Do not add sugar directly to the ice, as it will not dissolve evenly.
Ask KitchenMind about this recipe
Tell it what’s different tonight — it works within the actual recipe.


