Before Hanoi is fully awake, the yellow rice is already out. At market gates and on street corners, a vendor lifts the cover off a bamboo basket, steam rolls up, and a scoop of turmeric-gold sticky rice goes onto a square of banana leaf. Thin, pale shavings of mung bean fall over it, then a spoon of liquid fat and a shower of fried shallots, and the bundle is folded up for someone on the way to class or to work. That is xôi xéo, the sticky-rice breakfast of northern Vietnam. The rice is soft and chewy, the bean layer is smooth and mild against it, and the shallots bring crunch and a toasted, sweet smell.
A Hanoi Breakfast from a Bamboo Basket
On the street at dawn
No place in Vietnam sets out as many kinds of xôi as Hanoi, and xôi xéo is one of the most popular. It is sold from early morning at markets and on corners, and vendors keep it warm in bamboo baskets carried on the shoulder or strapped to the back of a bicycle. Portions are wrapped in banana leaf and old newspaper. In 2019 a serving cost 5,000–7,000 dong, which is why it fed so many students and manual workers: cheap, and filling enough to carry someone to lunch.
The fat is part of the street version. Vendors pour chicken or pork fat over the rice while it is still liquid, and in the cold months they keep a charcoal brazier going beside the basket so the fat never sets. People customise their plate. Some ask for a heavy pile of ruốc, finely shredded and fried salty pork; children tend to ask for more bean and more shallots. The ingredients are the same everywhere (sticky rice, turmeric, mung bean, shallot and fat), and still xôi xéo is counted among the hardest xôi to make well. The difficulty sits almost entirely in the beans.
Xôi is steamed sticky rice. Xéo is harder to pin down, and where the name came from is not settled. One explanation makes xéo another word for beans; another notes that it is also a rude way of telling someone to go away; another ties it to cắt xéo, cutting at an angle, for the way the bean ball is shaved; some say it means to mash. In English it is often called sticky rice with hand-cut mung bean, which describes the dish without settling the word.
How it differs from other xôi
The bean is what sets xôi xéo apart from its neighbours. In xôi vò, mung bean is ground fine and rubbed over the rice grains so every grain is coated. In xôi đỗ xanh, the beans are mixed into the rice and steamed together. Plain xôi has no bean and no turmeric at all. Xôi xéo keeps the two apart: the beans are steamed, mashed, pressed into a ball and shaved thin with a knife, so they sit on top of the rice as a separate pale layer. Bánh chưng, the leaf-wrapped cake, shares the same pairing of sticky rice and mung bean in a completely different form.
Ingredients (serves 4)

Salt goes in twice, in separate amounts, once on the rice and once on the beans. That split is what makes each layer taste seasoned on its own.
Put ½ tsp on the rice and ¼ tsp on the beans, never all of it in one place. If one layer tastes flat at the table, the salt went into the other one.
The base is rice, mung bean, salt and turmeric; coconut milk is optional. Store-bought fried shallots are sometimes coated in flour or starch before frying, so read the ingredient label on the pack before you buy.
Equipment
- Steamer, ideally with two tiers, or a bamboo steamer basket set over a pot
- Muslin or cheesecloth to line the steamer
- Two bowls for soaking, and a sieve or colander for draining
- Mortar and pestle or a food processor
- A sharp knife that cuts thin slices
- Wooden spoon
Choosing and Substituting
Glutinous rice is the one thing you cannot swap. Japanese or Korean short-grain glutinous rice and Thai glutinous rice both work; ordinary rice makes a different dish entirely. Variety and freshness change how quickly the grains absorb water and cook through, so judge by the bite in the steaming step rather than changing the amount.
The beans are the ingredient worth a trip. Look in Chinese, Southeast Asian or Indian grocers for peeled split mung beans, sold as split mung bean or moong dal: small, flat, yellow and skinless. Whole skin-on mung beans will turn the topping greener and the mash coarser, and the thin shavings that define the dish become harder to cut.
Turmeric powder from the spice aisle does the colouring, and a small jar lasts a long time. Coconut milk comes in cans or cartons; you need only a few spoonfuls, so a small carton saves waste. Fried shallots are sold in Vietnamese, Thai and Indian shops, and fried onions from a supermarket stand in with a slightly different flavour.
The coconut milk takes the place of the chicken or pork fat poured over street plates. It keeps the dish plant-based and gives softness and richness, but it tastes like coconut, not like rendered fat. Choose one or the other for a batch; mixing both blurs the dish.
Method
Start both soaks together, in two bowls side by side, at least a couple of hours ahead or the night before. After that the only heat is steam. With a two-tier steamer, the rice and beans cook at the same time on separate levels. With one tier, steam the rice first, then the beans, and warm the rice briefly in the microwave while the beans finish. Turmeric stains hard: keep it away from wooden bowls, cloth and plastic measuring spoons you care about.
Keep fried shallots sealed until the plates are ready. Sprinkle them right before eating; a few minutes on hot rice is enough to turn them chewy.
When It Goes Wrong
| What you see | Why | What to do |
|---|---|---|
| The rice has a hard core | Too short a soak, too little steaming, or the rice piled too thick | Soak at least 2–3 hours. Spread the rice thin and keep steaming in a few minutes at a time, biting a grain after each |
| The rice is sticky or clumped | Poorly drained, or condensation dripping off the lid | Drain thoroughly in a sieve. Wrap the lid in a cloth so drips stay off the rice |
| The bean ball crumbles when shaved | The paste cooled before shaping, or was mashed too coarsely | Mash finer and shape while warm next time. If it crumbles now, scatter the pieces over the rice and serve |
| The beans feel gritty or powdery | Understeamed, undermashed, or too wet | Steam until a bean crushes under your finger, shake off excess water, and mash until smooth |
| The rice is too pale or too dark | Turmeric mismeasured | Measure ¼ tsp exactly. Adjust the amount next time instead of lengthening the soak |
| The shallots are soft | Humidity, or sprinkled too early | Store them airtight and add them only at the table |
Serving, Variations and Storage
At the table
Xôi xéo is a breakfast plate eaten warm and straight away. In Hanoi it is often topped with ruốc, and modern stalls add pâté with ruốc, chả quế (cinnamon pork roll) with trứng muối (salted egg), or spicy shredded chicken, and there are meatless chay versions too. It is also good next to thịt kho tàu, sweet-salty braised pork belly, or roast chicken. Store-bought ruốc, pâté, chả quế and salted eggs are processed products; keep them as their packs instruct.
Variations
- Street-style fat. Leave out the coconut milk. Render chicken skin and fat slowly over low heat and spoon a little of the clear fat over each plate, starting with about 1 tsp. Chicken fat is prized for a colour and aroma that other fats are said not to match; pork fat works too and tastes porkier. For mỡ hành, stir sliced scallions into the hot fat for a moment and spoon it on with the shallots.
- Rice-cooker rice. This version skips the soak and uses its own amounts, so keep them separate from the steamer recipe. Put 10½ oz (300 g) glutinous rice in the cooker with 1 tsp turmeric and a pinch of salt, add water to ⅛–¼ inch (3–5 mm) above the rice, and cook. When the cooker switches to warm, stir, close the lid and leave it 15–20 minutes. Simmer 3½ oz (100 g) soaked split mung beans until soft, season with salt, mash finely and shape while warm. It serves 2–3.
- Different toppings. Keep the rice and beans as they are and change only what goes on top: ruốc, pâté, chả quế with salted egg, shredded chicken, or a meatless topping. The base stays the same; the plate turns from a light breakfast into a full meal.
- Double batch for 8. Use 1 lb (450 g) rice, 7 oz (200 g) beans, ½ tsp turmeric, 1 tsp salt on the rice and ½ tsp on the beans, and 6–8 tbsp (90–120 ml) coconut milk. A thicker load takes longer to steam, so spread it across both tiers if you can and keep checking the bite, adding a few minutes at a time.
Storage and reheating
The vendor's warm basket belongs to the street. At home, cooked sticky rice follows stricter rules.
Cooked rice and other starchy foods that cool slowly, or sit out of the fridge, let bacteria grow and produce a toxin that reheating does not destroy. Eat xôi xéo right away, keep it hot at 60°C or above, or cool it quickly, refrigerate it, and eat it within 2 days. Do not make a big batch and leave it to cool slowly; divide it into small containers so it cools fast.
Reheat leftover rice by steaming it again; the microwave also works. Leftover bean balls go into the fridge, covered, and get a short re-steam before you shave them. Drain homemade fried shallots of all oil and keep them in an airtight container. Keep leftover rendered chicken or pork fat in the fridge and use it up soon.
Frequently asked questions
Can I use curry powder instead of turmeric?
No. Curry powder is a blend of spices, so it changes both the colour and the aroma of the rice and moves it away from xôi xéo. Plain turmeric powder is easy to find in the spice aisle.
Can I use fresh turmeric root?
Fresh root carries a different amount of pigment, so the same quantity gives a different colour. For this recipe, stick with powder and the measured amount, and the rice comes out the right gold.
How do I make fried shallots at home?
Slice shallots thinly and let them dry well. Toss them in bột năng, which is tapioca starch and not the same as potato starch, then drop them into the frying oil all at once and turn the heat down right away. Lift them out just before they take on colour, drain off all the oil, and store them airtight once cool.















