These vegan savory rice balls (tang yuan), 咸汤圆 are soft and chewy that are cooked in a delicious vegetable-packed soup. Ah.. talk about comfort food!

Have you tried savory rice balls (tang yuan)? I know what you are thinking – isn’t rice ball sweet? The answer is no, it can be sweet or savory. When I was at home learning how to make Hakka Abacus seeds from my aunt, she told me that I should make savory rice balls. If you are like me who couldn’t get past the thought of it being sweet, then you need to try this recipe.
The rice balls are filled with a simple and savory filling and then paired with a vegetable-packed soup for a tasty quick meal. The balls have great chew and the salty filling is the perfect match. Oh my, it’s SO Good!

A little history about rice balls
- Often serve during winter solstice and weddings
- Because Yuan’s homophonic sounds like unity, they are eaten at reunion dinners, as a way to wish each other unity
How to make vegan savory rice balls – tang yuan
Step 1: Prepare the filling
I opt for a simple tofu filling made from sauteed mushrooms and carrots.
Then, add that to mashed tofu and season with vegan oyster sauce, soy sauce, pepper. So easy, right?

Quick Tip: Press the tofu with your palms to remove the excess liquid and mash it using a fork or masher. You should be able to form the filling into balls when you squeeze the ingredients together.

Step 2: Prepare the dough
Similar to the muah chee’s recipe, all you need is glutinous rice flour. Instead of boiling a portion of the dough, you’ll start off by ‘cooking’ the dough with boiling water. This step yields soft and chewy balls as well.
Once you measured the flour in the bowl, slowly pour in the boiling water in a swirling motion while stirring the flour with a pair of chopsticks or spatula to combine.

The dough should start to form with some dry spots of flour in the bowl. When you pinch a small batch of dough, it should be soft. Now, slowly add cold water and knead until a smooth and soft dough forms. To check the elasticity, you should be able to pull the dough with both hands slightly without breaking it.

Then, divide it into 18 portions and roll it into balls. This recipe yields 16 large balls or 20 smaller ones. Note: Glutinous rice flour absorbs water very slowly, so it’s important to add cold water in small batches.
Step 3: Assemble the vegan savory rice balls – tang yuan
Always work with one dough at a time and cover the rest. Take a dough ball and make a dent in the middle. Using your fingers, thin out the side in a circular motion to create a cup-like shape. Place a teaspoon or so of filling in the middle.
Then, bring the sides together to seal. Aim to not let the filling touch the side of the dough or you won’t be able to seal the sides together.
Roll into a smooth ball and repeat with the remaining ingredients. You can freeze the balls now or continue to the next step.

Step 4: Cook and serve
I’m multitasking here with two pans, but in the video, I only showed you one step at a time. First, make the soup and at the same time, fill a pot with water to cook the rice balls. Sauté shallots until translucent, then continue to stir-fry the mushrooms until they start to turn brown and aromatic. Add the veggie stock and bring to a boil. I used Yondu and water to make a quick stock for this recipe.

Then, add the vegetables of your choice.

Once the second pot of water comes to boil, add the rice balls and gently stir them to prevent sticking to the pot. Cook until they float to the top and allow them to stay afloat for another minute or so. Cook in batches if needed.

Sieve the rice balls into the hot soup and cook for another minute to heat it through. Serve warm with a side of chopped Thai chile in soy sauce.
Savory Rice Balls – Tang Yuan Cooking Tips
- Remember the muah chee’s recipe that you need to boil a portion of the dough first? This recipe uses a part of boiling water to ‘cook’ the flour before you knead it into a dough.
- Add the cold water in batches because glutinous rice flour absorbs moisture slowly
- To check if the dough is ready – once you get a cohesive ball, stretch with both of your hands to test the elasticity. If it doesn’t stretch at all, add more cold water and knead again.
- What if I don’t like to stuff it with filling? No problem, you can roll the rice balls smaller and add them directly to savory soup and use the filling recipe as topping.
- Storage – Store the rice balls once you stuffed them in the freezer – similar to how I store the wrapped potstickers. No thawing needed when you cook them in water.
These savory rice balls – tang yuan are
- Easy-to-make
- Gluten-free available – use gluten-free sauces
- Perfect for make-ahead
- can be made allium-free – replace the shallots with minced ginger and scallions with cilantro
- TASTY!
If you try this recipe, I would love to hear your feedback and see your beautiful re-creation. Leave me a comment, rate it, and tag @woon.heng and #woonheng to your photos on Instagram or Facebook. Happy cooking, friends!


Vegan savory rice balls – tang yuan 咸汤圆
Ingredients
- 5 oz firm tofu drained and pressed
- 10 dried Shiitake mushrooms rehydrated
- 1 small carrot finely chopped
- 1½ tablespoons vegan oyster sauce
- 1½ tablespoons soy sauce separated
- ¼ teaspoon thick caramel sauce/dark soy sauce
- 2 shallots thinly sliced
- 2-3 cups chopped napa cabbage
- 3 stalks green onion chopped
- 3 cups veggie stock
- pepper
- salt
- toasted sesame oil
- oil for cooking
Dough
- 2 cups glutinous rice flour
- ¾ cup boiling water
- ¼ cup water see instructions
Instructions
Prepare the filling
- Finely chopped 7-8 mushrooms into tiny bits and slice the remaining for soup. Heat a non-stick skillet with 1-2 teaspoons of oil over medium heat. Sauté the mushrooms for 1-2 minutes, then season with 1 tablespoon of soy sauce. Continue to cook until the mushrooms fully absorb the sauce. Add the carrots and stir-fry for a few more seconds. Turn off the heat.
- Place tofu in a large bowl and mash into a slightly coarse mixture with a potato masher. Fold in the cooked mushrooms and season with vegan ‘oyster’ sauce, thick dark soy sauce, pepper, chopped green onions, and a splash of toasted sesame oil. Mix until combine. Aim to have a mixture that can hold together when squeezed. Add a tablespoon of stock or water if it’s too dry.
Prepare the dough
- Measure the rice flour in a large mixing bowl. Using a pair of chopsticks or silicone spatula, stir the flour while slowly pouring the boiling water. Now, knead the dough while you add the cold water in batches until a soft and pliable dough forms. You may not need the whole ¼ cup of water. Cover the bowl and let it rest for 10 minutes, then divide into 18 portions and roll into balls. The dough is enough to make 16 large ones and 20 small ones. Always cover the dough with a towel to prevent them from drying out.
Assemble the rice balls
- Assemble the rice balls. Take a dough ball and make a deep dent in the middle. Using your fingers, press the side to create a cup-like shape. Fill it with a portion of the filling. Bring the sides to seal and roll into a smooth ball. Set aside, cover, and repeat with the remaining ingredients.
Cook and serve
- Next, make the soup. Heat a large wok with a tablespoon of oil and sauté shallots until translucent. Add the sliced mushrooms and stir-fry for a minute, then sesaon with ½ tablespoon of soy sauce. Add the veggie stock and bring it to boil.
- Meanwhile, fill another pot with water, halfway through or enough for the rice balls to float up during cooking. Bring the water to a boil. Carefully drop in the rice balls and do not stack them. Gently stir to prevent sticking. Cook in batches if you have a small pot. Cook until they float to the top, about 5-8 minutes. Let them stay afloat for another minute while you turn your attention to the soup.
- Once the soup starts to boil, add the Napa cabbage and scallions. Sieve out the rice balls and transfer them to the soup and boil for another minute or so. Taste and season accordingly.
- Serve warm with a side of chopped Thai chili in soy sauce.
Video
Notes
- I used 3 elephants Thai rice flour and LeeKumKee vegetarian stir-fry sauce. For homemade version, check this recipe.
- It’s highly recommended to weigh the flour instead of using cups
Feel free to pin the below picture on your Pinterest Board for easy reference.

You did not specify what the weight of the flour is, your recipe only mentions 2 cups…
Just switch to “Metric”
This is such a comforting and delicious rice ball soup. I love it and your recipe makes it so easy to follow. Thank you.
Delicious soup with balls to die for.
As usual I didn’t check the ingredient list before I started and didn’t have a couple items. Mainly cabbage, so I used beet root tops. This was my first experience with using glutinous rice flour but it was very easy to use.
Love your posts.. Thanks
Could you make the balls ahead of time? If so, would I refrigerate them cooked in soup or uncooked (and covered)? I want to make for friends but not sure how to store for delivery. Thank you!
Sorry meant to add do I have to freeze them if not eating right away but will eat in a day? Thank you, can’t wait to try!
Hi Melissa, you can freeze them after you fill them up – similar to the frozen glutinous rice ball, you don’t need to thaw them. Put them straight to hot boiling water from freezer.
Good afternoon, Im in the store now, and they don’t have 3 Elephants thai rice flour or glutinous rice flour. I don’t know what to do. Can I use Almond Flour?
Hey Samantha, only glutinous rice flour will make it chewy and form. The almond flour will not turn it into chewy ball.
I made this today for dinner. Where I’m from I used to be able to eat these often from the stores but bow I gotta make it myself and I’m grateful for your recipe!!! It took me a long time. Lol 😂 and I got the glutinous rice flour and water ratio a bit off and ran out of more glutinous rice floor to balance it. So the dough end up way sticker than it should ( people learn from my mistake 😆 ) and I had a hard time rolling them into balls without it sticking and breaking apart 😢 I’ll try again another day. Your recipes look amazing ❤️❤️❤️
Thank you so so much, Iris. I’m so happy you gave this a try. Because glutinous rice flour absorbs slowly, you’ll need to add them in batches slowly. That way, you won’t end up adding more flour than you need to. Also, if you feel that it’s dry, you can dab your hand with some oil to help you roll the ball. Please do reach out if you need any help again, okay. :0) Thanks, Iris. Best, WoonHeng
Hi WoonHeng! Your recipe looks amazing. I was trying to do it myself, but the dough, with that amount of rice flour and only with the boiling water, was too sticky for the manipulation. Could you give me any advice please? (Anyway, from the dough we finally got another product that was yummy too haha).
We love your videos! Thanks for all
Greetings from Chile <3
Hi Niko, thanks a lot for reaching out. Were you able to weigh the flour? Once you added the boiling water and stir into a dough. You can let it rest and knead. If the dough appears to be too dry at that time, you can slowly add the cold water until you can form it. Glutinous rice flour absorbs water really slowly so plan on adding the water in batches. If it’s too sticky, another way is to add more glutinous rice flour. 🙂 Let me know if you need anything else.
Thanks, WoonHeng
Thank you very much for your answer! With no doubt, I’ll be trying this recipe again. Looks so tempting.
<3
Hi, I’m keen to make these as they look delicious. When reading the recipe, for the soup, you say to sauté the shallots, but I don’t see them in the ingredients list. Would they be the green onions? Thank you for sharing so many wonderful recipes.
Hi Kerrie, thanks for your interest and pointing it out. Yes, it will be 2 shallots, thinly sliced. Please let me know if you need anything else and have a wonderful day. Best, WoonHeng
Super delicious recipe, highly recommend. It’s tricky to get right the first time but practice makes perfect. Woonheng makes every dish look easy.
Thanks so much, Mandi. I’m really grateful that you gave this a try, it means so much. Thank you for your lovely support. Best, WoonHeng
Delicious
Thanks so much!
This looks incredible! Which brand of glutinous rice flour do you recommend? Which brand of vegan oyster sauce, and yondu do you recommend?
Hi Heidi, I used 3 elephants Thai rice flour and LeeKumKee vegetarian stir fry sauce. Or you can use my homemade version. Yondu is the brand of the umami seasoning. Hope that helps.