Sapin-sapin is a Filipino layered rice cake made with glutinous rice flour and coconut milk.
It's soft and chewy, lightly sweet, and usually topped with latik or toasted coconut.
It might look fancy, but it's really just a steamed rice cake made with simple ingredients and a little patience.

Jump to:
Ingredients You'll Need

Notes and Substitutions
- Coconut cream: This is what you need to make latik - the thick part of coconut milk, also called kakang gata. You can also use unsweetened desiccated coconut instead or use both for the topping.
- Glutinous rice flour (sweet rice flour): It's made from sticky rice and gives sapin-sapin its chewy texture. Regular rice flour won't work the same.
- Coconut milk: This is used for the base batter. Use full-fat coconut milk for the best texture and flavor.
- Ube jam (ube halaya): Adds flavor and a bit of color to the purple layer. A few drops of ube flavoring can help make the color darker.
- Achuete powder: Used mainly for color. Always dissolve it in warm water first so it mixes evenly.
- Macapuno: Soft, jelly-like coconut, and usually sold sweetened in jars. You can also use young coconut meat (buko).
How to Make Sapin-Sapin (Step-by-Step)
Step 1: Make the coconut curds (latik)
Pour 1 can of coconut cream into a wide pan.
Cook it over medium-high heat until it comes to a boil.
As it heats up, it will slowly thicken and begin to separate - this takes about 20 minutes, so don't rush it.

Once it thickens, lower the heat to keep it gently bubbling.
Stir occasionally, scraping the bottom and sides so it doesn't stick or burn.

It's ready when the oil separates and the coconut curds turn golden and crisp.
Turn off the heat before they get too dark and taste bitter.

Strain to separate the crispy coconut bits (latik) from the oil.
Set both aside - the latik will crisp up more as it cools.
For a detailed, step-by-step guide on making latik, be sure to check out my latik tutorial.

If you want to save time, you can use toasted coconut instead.
Toast unsweetened desiccated coconut in a dry pan over medium heat until lightly golden. It's quicker and lighter in flavor, but still adds a nice crunch on top.

Step 2: Prep your steamer and pan
Set up your steamer and add about 2 inches of water, making sure it does not touch the pan.
Bring to a boil, then lower to medium heat so the water bubbles gently.
Wrap the steamer lid with a clean kitchen towel to catch condensation so it doesn't drip onto the sapin-sapin.
Note: I used a large pot with a rack and only needed about 1 inch of water. Just keep the water below the rack and add more if needed.

Lightly grease an 8-inch round pan, including the sides.
If you made latik, use a bit of the reserved coconut oil for extra flavor and to help prevent sticking.

If you're using banana leaves, wipe them clean and pat dry.
Quickly pass them over a flame to soften them and bring out the smell.
Line your serving platter with the leaves, brush lightly with latik oil, and set aside.

Step 3: Make the base batter
In a large bowl, combine:
- 3 cups glutinous rice flour
- 1¼ cups white sugar
- a pinch of salt
- 1 (13.5 ounce) can coconut milk
- 1½ cups water
Mix the batter until smooth. It should be thick but pourable, similar to pancake batter.

Step 4: Divide and flavor the layers
Divide the batter evenly into 3 bowls, just under 2 cups each.
For the purple layer: Add ½ cup ube jam and a few drops of ube flavoring, until you get the color you like.

Mix the batter until smooth and the color is even.

For the orange layer: Dissolve 1 teaspoon achuete powder in 1 tablespoon warm water.

Mix it into the batter until the color is even.

For the white layer: Mix in ½ cup macapuno.
If the strands are long, chop them first so they spread better.

Mix the batter until smooth.

Step 5: Steam the layers
Let each layer set before adding the next. This keeps the colors from mixing and helps the sapin-sapin cook evenly.
Layer 1: Pour the ube layer into the prepared pan. Steam for about 12 minutes.

How to check: Lightly tap the center with a fingertip or the back of a spoon.
It should feel set and no longer wet, even if it's still soft.

Layer 2: Mix the batter again, then slowly pour the orange layer over the first layer.
You can pour it over the back of a spoon so it goes on gently and doesn't break the layer underneath.
Steam for about 15 minutes.

Check: The center should feel set before moving on.
Make sure there's still water in the steamer and add more if needed.

Layer 3: Mix again before pouring the white layer in.
Steam a little longer, about 18 minutes.

Check: Press the center lightly-it should feel firm but still bouncy.
Turn off the heat and let the cake sit in the steamer for 15 minutes, with the lid on.
This makes sure it cooks all the way through and holds its shape.

Step 6: Cool and unmold
Take the pan out of the steamer and let the sapin-sapin cool completely.
Run a thin knife around the sides, then gently flip it onto a platter to unmold.
Lightly brush the surface with a little latik oil to keep it from drying out and to give it a nice sheen.

Step 7: Slice and serve
Use a sharp knife to slice, wiping it clean between cuts so the layers look nice.
Top with latik, toasted coconut, or both.

Sapin-sapin is best enjoyed at room temperature so it stays soft and chewy.

Storage
Refrigerate sapin-sapin promptly in an airtight container at 40°F (4°C) or below and use within 3-4 days. Let individual portions soften at room temperature for about 20 minutes before serving.
To freeze: Wrap tightly without toppings and freeze for up to 1 month. Thaw overnight in the fridge. If still firm, steam briefly until soft.
Helpful Tips
- Let each layer set before adding the next.
- Pour new layers gently (over a spoon) so you don't break the layer underneath.
- Check the water level in your steamer and keep it simmering so it doesn't run dry.
- Once it's cooked, leave it in the steamer for about 15 minutes so it cooks through.
Recipe FAQs
Sapin-sapin is a Filipino rice cake made by steaming soft, chewy layers one on top of another.
The name literally means "layers," which pretty much describes it - one pan, different colors and flavors, all stacked together. Each layer is usually flavored with ube, langka, or macapuno.
The layer underneath wasn't fully set. Let each layer steam until the center feels set and no longer wet before adding the next.
Lightly tap the center - it should feel set and no longer wet, even if it's still soft.
This usually happens when the layers are too thick or there isn't enough steam coming from the pot. Just keep steaming until the center cooks through.
Yes, you can freeze without the toppings. Wrap the slices properly and freeze them for up to 1 month. Thaw overnight in the refrigerator. Steam lightly to soften if needed.
More Kakanin (Filipino Rice Cakes)
- Bibingka: Soft rice cake topped with salted egg and cheese.
- Puto: Soft, steamed rice cakes.
- Puto bumbong: Purple rice cakes steamed in bamboo, topped with butter, sugar, and coconut.
- Kutsinta: Chewy rice cakes with grated coconut. Try this two-layer version steamed in a pan, too.
- Palitaw: Soft rice cakes coated with coconut, sugar, and sesame seeds.
- Suman: Sticky rice wrapped in banana leaves, served with sugar or latik sauce.
- Cassava cake: Chewy, baked cake made with grated cassava and coconut milk.
Street Food Recipes You May Like

Did you make this recipe? I would love to know! Your feedback helps me make better recipes. Please rate, review, or comment below. Questions about this recipe are welcome, too!
Let's connect on Facebook, Instagram, Pinterest, TikTok, Twitter, and Youtube. Be sure to tag me when you try any of my recipes @recipesbynora!
📖 Recipe

Sapin-Sapin (Filipino Layered Rice Cake)
Equipment
- Steamer with lid
- 8-inch round pan
Ingredients
Latik topping:
- 1 can coconut cream
Base batter:
- 3 cups glutinous rice flour
- 1¼ cups granulated sugar
- A pinch of salt
- 1 (13.5 ounce) can coconut milk (about 1¾ cups)
- 1½ cups water
Flavoring:
- ½ cup ube jam + a few drops ube flavoring
- 1 teaspoon achuete powder dissolved in 1 tablespoon warm water
- ½ cup macapuno
Instructions
- Cook coconut cream over medium-high heat, stirring occasionally. Lower the heat as it thickens. Cook until the oil separates and the curds turn golden, about 30-40 minutes. Strain, saving the latik and oil.
- Bring steamer water to a boil, keeping it below the rack. Lower to medium heat so it bubbles gently. Wrap the lid with a towel secured away from the heat. Grease the pan with latik oil.
- Mix glutinous rice flour, sugar, salt, coconut milk, and 1½ cups water until smooth.
- Divide into 3 equal portions. Mix ube jam and flavoring into one, dissolved achuete into another, and macapuno into the third.
- Pour the ube batter into the pan. Cover and steam for about 12 minutes, until set.
- Stir the orange batter and pour gently over the back of a spoon onto the ube layer. Cover and steam for about 15 minutes, until set.
- Stir and gently add the white batter. Cover and steam for about 18 minutes, until firm and springy. Turn off the heat and leave covered for 15 minutes.
- Cool completely. Loosen the edges and turn onto a platter. Brush with latik oil, add the topping, and slice.
Video
Notes
- Coconut cream: Use for latik. For the topping, you can use unsweetened desiccated coconut instead, or both.
- Glutinous rice flour: Also called sweet rice flour. Gives sapin-sapin its chewiness. Regular rice flour isn't a direct substitute.
- Coconut milk: Use full-fat for the batter.
- Ube jam: Adds ube flavor and color. Add a few drops of ube extract for a darker purple.
- Achuete powder: Adds color. Dissolve in warm water first.
- Macapuno: Use sweetened jarred macapuno. Young coconut meat also works.









Elma says
This looks absolutely gorgeous! I have to make this.
Nora Reyes says
Thank you, Elma!