Walk past any Hanoi corner at 7 in the morning and you will smell it before you see it: the vendor's bicycle stacked with warm bundles, each one a scoop of golden sticky rice, a few thin shavings of mung-bean paste, and a heavy handful of fried shallots, all wrapped in a banana leaf. That is xoi xeo, and it is the breakfast I think about whenever sticky rice comes up.

What is xoi xeo?
Xoi xeo is a northern Vietnamese street-food breakfast built from two humble ingredients: glutinous rice (nep) and split mung beans (dau xanh). The rice steams with some of the beans mixed in, which tints it gold. On top go two things that make the dish what it is. First, thin slices shaved off a compacted ball of cooked, mashed mung beans (the "xeo" in the name is the vendor's slicing motion, the knife angled to peel curls off the bean ball straight onto the rice). Second, a shower of fried shallots, crisp and sweet, with a spoonful of their fragrant oil drizzled over everything.
It is sold by morning vendors who set up before dawn and often sell out by nine. A packet costs little, eats like a full meal, and travels well, which is why office workers and students eat it on the go. The flavor is savory and nutty rather than sweet: chewy rice, soft bean paste, crunchy shallots, and that hit of warm oil tying it together. Optional extras on a vendor's cart are chicken floss (ruoc), crushed roasted peanuts, or slices of cha lua (Vietnamese pork sausage).
My sticky rice guide covers the soaking and steaming basics if you are new to glutinous rice, and the shallots deserve their own treatment. My crispy shallots guide walks through the low, patient fry that keeps them sweet instead of bitter.
The three parts of the dish
Xoi xeo is really three small recipes that meet in the bowl: the rice, the bean paste ball, and the fried shallots. Nothing about any of them is hard, but each has one step that decides whether the dish lands. The rice needs a full overnight soak. The bean ball needs to be mashed while hot and packed tight, or it crumbles when you slice it. The shallots need medium-low heat and your attention. Get those three right and the assembly takes a minute.

The ratio I use is 500 grams of glutinous rice to 200 grams of split mung beans, a 5:2 ratio by weight. Of the beans, half goes into the rice and half becomes the paste ball. That split gives the rice its gold tint and leaves enough beans for a ball that slices cleanly. More rice than that and the dish reads plain; more beans and the paste overwhelms the chew.

Ingredients
For the sticky rice:
- 500 g (about 2 3/4 cups) glutinous rice (sweet rice)
- 100 g (about 1/2 cup) split mung beans (dau xanh, husks removed)
- 1 teaspoon kosher salt
- 1/2 teaspoon ground turmeric (for the gold color)
- 2 tablespoons neutral oil or rendered chicken fat
For the mung-bean paste ball:
- 100 g (about 1/2 cup) split mung beans (dau xanh, husks removed)
- 1/2 teaspoon kosher salt
For serving:
- 8 to 10 shallots, thinly sliced, fried crisp (about 1 cup)
- 1/4 cup of the shallot frying oil, for drizzling
- Optional: chicken floss (ruoc), crushed roasted peanuts, sliced cha lua
Steps
- Soak the rice and beans. Rinse the glutinous rice until the water runs mostly clear. In a large bowl, combine the rice, 100 g of the mung beans, the salt, and the turmeric in enough cold water to cover by 2 inches. Soak at least 6 hours, or overnight. In a separate bowl, soak the remaining 100 g of mung beans in cold water for 2 to 4 hours. Short soaks are the main reason this dish turns out hard, so do not rush it.
- Drain and steam the rice. Drain the rice and bean mixture well and shake off as much water as you can. Line a steamer basket with damp cheesecloth, spread the rice in an even layer, and steam over boiling water for 15 minutes. Lift the cloth, flip the rice over in chunks with a spatula so the bottom moves to the top, drizzle with the oil, and steam 10 to 15 minutes more. The rice is done when every grain looks translucent and chewy with no chalky white center. Keep it covered while you finish the rest.
- Steam the beans for the paste. Drain the separately soaked mung beans and steam them in the same basket (or a second tier) for 20 to 25 minutes, until they crush easily between your fingers.
- Make the paste ball. While the beans are still steaming hot, transfer them to a bowl with the 1/2 teaspoon of salt and mash thoroughly with a potato masher or pestle until no whole beans are left. Pack the hot mash into a tight ball (or a short cylinder) using plastic wrap, twisting the ends to compress it. Chill at least 30 minutes so it firms up. A loosely packed ball crumbles under the knife, so press it harder than feels necessary.
- Fry the shallots. If you have not made them ahead, slice the shallots thin and fry in a generous amount of neutral oil over medium-low heat, stirring, until evenly golden, about 12 to 15 minutes. Lift out with a slotted spoon and drain on a rack or paper towels. They crisp more as they cool. Reserve the oil.
- Slice and assemble. Unwrap the chilled bean ball and slice it into shavings 2 to 3 millimeters thick with your sharpest knife. This is the xeo motion: long angled strokes. Scoop warm rice into bowls (or onto banana leaves), lay a few bean slices on top, add a generous handful of fried shallots, and drizzle with a spoonful of the warm shallot oil. Add chicken floss, peanuts, or cha lua if you like.

Paul's notes
- The soak is the recipe. Six hours is the floor, eight is better. Rice that went in dry will have hard centers no amount of extra steaming fixes. You cannot steam your way out of a short soak; you can only make the outside mushy while the inside stays chalky.
- Flip the rice once. The top of the steamer basket cooks slower than the bottom. One flip at the 15-minute mark evens it out; skip it and the top grains stay underdone while the bottom turns soft.
- Mash the beans hot and pack the ball tight. Cold beans mash lumpy, and a loosely packed ball falls apart into crumbs instead of slicing into shavings. If your ball cracks when sliced, the beans were either under-steamed or under-packed.
- Salt the soak water. A teaspoon in the soak seasons every grain from the inside. Rice salted only at the end tastes flat no matter how good the toppings are.
- Turmeric is for color, and a little goes a long way. Half a teaspoon in 500 grams of rice gives the classic Hanoi gold without any turmeric flavor. Double it and the rice starts tasting like the spice.
- Leftover rice reheats well. Sprinkle a tablespoon of water over it, cover, and steam 8 to 10 minutes. It comes back chewy, not gummy. The bean ball keeps 3 days refrigerated; slice it cold, straight from the fridge.

Variations
- Xoi xeo with chicken: top with shredded poached chicken and a spoon of its broth, Hanoi-style, for a heartier bowl.
- Extra crunch: double the fried shallots and add crushed roasted peanuts. The two crunches play well against the soft rice.
- Sausage version: a few slices of cha lua or Chinese sausage (lap xuong) turn it into a fuller breakfast, the way vendors near office districts serve it.
- No steamer: a heatproof bowl set on a rack inside a large lidded pot works. Keep the water at a steady simmer and do not let it touch the bowl.
Troubleshooting: Fix My Xoi Xeo
Hard centers, mushy grains, a bean ball that crumbles, or shallots that went bitter. Each one has a cause and a fix. Tell the tool what went wrong:
This troubleshooting guide is not available yet.

Xoi Xeo: Vietnamese Sticky Rice with Mung Beans
Ingredients
Method
- Soak the rice and beans. Rinse the glutinous rice until the water runs mostly clear. In a large bowl, combine the rice, 100 g of the mung beans, the salt, and the turmeric in enough cold water to cover by 2 inches. Soak at least 6 hours, or overnight. In a separate bowl, soak the remaining 100 g of mung beans in cold water for 2 to 4 hours.
- Drain and steam the rice. Drain the rice and bean mixture well and shake off as much water as you can. Line a steamer basket with damp cheesecloth, spread the rice in an even layer, and steam over boiling water for 15 minutes. Lift the cloth, flip the rice over in chunks with a spatula so the bottom moves to the top, drizzle with the oil, and steam 10 to 15 minutes more, until every grain looks translucent and chewy with no chalky white center. Keep covered.
- Steam the beans for the paste. Drain the separately soaked mung beans and steam for 20 to 25 minutes, until they crush easily between your fingers.
- Make the paste ball. While the beans are still steaming hot, transfer them to a bowl with the 1/2 teaspoon of salt and mash thoroughly with a potato masher or pestle until no whole beans are left. Pack the hot mash into a tight ball (or a short cylinder) using plastic wrap, twisting the ends to compress it. Chill at least 30 minutes so it firms up.
- Fry the shallots. If not made ahead, slice the shallots thin and fry in a generous amount of neutral oil over medium-low heat, stirring, until evenly golden, about 12 to 15 minutes. Lift out with a slotted spoon and drain on a rack or paper towels. They crisp more as they cool. Reserve the oil.
- Slice and assemble. Unwrap the chilled bean ball and slice it into shavings 2 to 3 millimeters thick with your sharpest knife: long angled strokes. Scoop warm rice into bowls (or onto banana leaves), lay a few bean slices on top, add a generous handful of fried shallots, and drizzle with a spoonful of the warm shallot oil. Add chicken floss, peanuts, or cha lua if you like.
Notes
More Vietnamese recipes
For more of the cuisine, try Banh Cuon: Vietnamese Steamed Rice Rolls, the other great Hanoi morning dish, Cha Gio: Crispy Vietnamese Fried Spring Rolls for the crunch, and Pho Ga: Vietnamese Chicken Noodle Soup when you want the classic bowl.