Comforting Xiu Mai (Vietnamese Meatballs)

Growing up, I always thought meatballs were something that comes from Italy, so I was pleasantly surprised when I found out Vietnam also has its own version of meatballs. These Xiu Mai or Vietnamese meatballs remind me a little bit of bun cha hanoi but way more comforting with its tomato sauce. When I first tasted these meatballs, it tasted distinctly Vietnamese, and I loved it! Ingredients like fish sauce and sesame oil give it that yummy umami flavor, and the tomatoes and sugar balance it out with sweetness. I love this recipe so much, and I’m so excited to share it with you!

How my mom makes Xiu Mai
There are many variations of this dish across street vendors who sell this dish and families who enjoy it on a daily basis. My family likes to use carrots in the meatball whereas a lot of people prefer jicama instead. I love how the sweetness from the carrots complements the umami flavors in the dish. My mom likes to use ketchup in the sauce which is not normally used, but she says it adds color and flavor to the sauce. And to top it all off, we eat it with a crunchy banh mi baguette.
Some deets about key ingredients
- Baguette – The baguette helps give some structure to the meatballs. In Vietnamese cooking, we use baguettes anytime we need bread, but you can use any kind of bread you want. Good substitutes are white bread and wheat bread.
- Carrots – This is my mom’s personal touch, and one I love. You can substitute carrots with jicama.
- Shallots – Adds a sweetness to these meatballs. A great substitute is sweet yellow onion.
- Sesame oil – Adds a smokey umami flavor to the xiu mai. I added more sesame oil than I usually do because I love the flavor it adds to the meatballs. Feel free to add less.
- Corn starch – Substitute with all purpose flour, potato starch, or tapioca starch.
- Chicken broth – I used low sodium chicken broth for this recipe since there’s already so much salt in this sauce. I tested this recipe with regular chicken broth, and it was way too salty! You can substitute with water or vegetable broth.
- Corn starch – Corn starch helps thicken the sauce. You can substitute with all purpose flour or tapioca starch.




How to make Xiu Mai
- Soak the baguette in water to soften the bread. Use a cheesecloth or paper towel to squeeze out as much liquid as possible. Add it to a large bowl.
- Next, saute the minced garlic and shallots until they become brown. Add them to the bowl. Add the rest of the ingredients for the meatballs and mix. Form meatballs that are 2 inches in diameter and place them in a bowl.
- Tip #1: The tip I love the most is using an ice cream scoop. Scooping the meatballs with an ice cream scoop then rolling them between your hands is the best way to form uniform meatballs. And when they’re uniform, they cook evenly.
- Bring water to a simmer in your steamer pot and add the steamer insert. Put the bowl in the steamer insert and steam for 15-20 minutes until the meatballs are cooked through. If the steamer insert is too deep for the bowl, add another bowl flipped upside down and put the bowl of meatballs on top. This makes it easier to pull out the bowl.
- Tip #2: If you don’t have a steamer, fill a large pot with 2-3 inches of water. Place a bowl upside down in the pot and bring to a simmer. Then put in your meatballs and steam!
- While the meatballs are steaming, make the sauce. Add the onions to a large sauce pan over medium high heat. Cook for 2-3 minutes until translucent. Add the tomatoes and cook for 5 minutes until the tomatoes soften. Add the ketchup and chicken broth and cook for 5-10 minutes until the sauce thickens. Lastly, add the fish sauce, sugar, and a corn starch slurry to the sauce and mix. Make the corn starch slurry by mixing the corn starch and 2 tbsp of water.
- Once the meatballs are done, add them to the sauce. Bring the sauce to a simmer and remove from the heat. Serve meatballs with a baguette and enjoy!
How do you serve and eat xiu mai?
The traditional way to serve xiu mai is with a baguette! When eating, place some of the meatball and the sauce on the bread and take a bite. You can also serve this with white rice. I’ve had it with both and they both are yummy compliments to the dish.

Did you make this dish?
If you made this dish, I would love to see!
Follow Cooking Therapy on Instagram, snap a photo, and tag and hashtag it with @cooking__therapy and #beccascookingtherapy.
Stay connected and follow along on Facebook, Pinterest, and Instagram for all my latest recipes.
Disclaimer: If you purchase anything through a link on this site, I may receive a small commission from the purchase at no extra cost to you. I also only recommend products that I would personally use. Thank you so much for the support!

Get the Recipe:
Comforting Xiu Mai (Vietnamese Meatballs)
Ingredients
Meatballs
- ¾ cup baguette, cut into 1 inch pieces
- 5 cloves garlic, minced
- 2 shallots, minced
- 1 lb ground pork
- 1 cup carrots, shredded
- 2 tsp salt
- 1 tbsp pepper
- 2 tsp sesame oil
- 1 tbsp granulated sugar
- 2 tbsp corn starch
Sauce
- 1 yellow onion, thinly sliced
- 3 tomatoes, cut into small pieces
- ½ cup ketchup
- 1 can chicken broth, low sodium, 14.5 oz
- 1 tbsp fish sauce
- 1 tbsp granulated sugar
- 1 tbsp corn starch
Equipment
Instructions
- Soak the baguette in water to soften the bread. Use a cheesecloth or paper towel to squeeze out as much liquid as possible. Add it to a large bowl.
- Next, saute the minced garlic and shallots until they become brown. Add them to the bowl (2-3 minutes).
- Add the rest of the ingredients for the meatballs and mix.
- Form meatballs that are 2 inches in diameter and place them in a bowl. Grab some meat and roll it between your palms until it forms a ball.
- Bring water to a simmer in your steamer pot and add the steamer insert. Put the bowl in the steamer insert and steam for 15-20 minutes until the meatballs are cooked through. If the steamer insert is too deep for the bowl, add another bowl flipped upside down and put the bowl of meatballs on top. This makes it easier to pull out the bowl.
- While the meatballs are steaming, make the sauce. Add the onions to a large sauce pan over medium high heat. Cook for 2-3 minutes until translucent.
- Add the tomatoes and cook for 5 minutes until the tomatoes soften.
- Add the ketchup and chicken broth and cook for 5-10 minutes until the sauce thickens.
- Lastly, add the fish sauce, sugar, and a corn starch slurry to the sauce and mix. Make the corn starch slurry by mixing the corn starch with 2 tbsp of water.
- Once the meatballs are done, add them to the sauce.
- Bring the sauce to a simmer and remove from the heat.
- Serve meatballs with a baguette and enjoy!
Meatballs were good! It’s just the sauce was VERY ketchup forward…maybe need to do a mix of tomato paste or something else?
That could work! You can also omit the ketchup or use less of it if you don’t like it.
Can these be frozen into individual servings? If so, would you suggest fully cooking everything first? Or how would you go about it?
Hi Erica! Yes you can! I would recommend fully cooking it and then freezing it in freezer safe containers.
Could you cook the meatballs directly in the sauce rather than steaming it separately? This looks delicious!
Thank you! You could do some of the cooking in the sauce but they won’t completely cook through before the sauce starts burning. If you don’t have a steamer, I would recommend baking them in the oven.
This is a perfect dish for fall. It looks great and attempted. Not too complicated recipe. I definitely will try to do it 👍😍
(Review provided by family member of Cooking Therapy.)
Thank you!
10/10!!!! I kept going back to the stove for “just a few more xiu mai” at least 3 times. You’ve just gained a subscriber! An uncomplicated recipe to follow. The most time consuming things are chopping veggies and making the meat into balls. I also like that steaming the xiu mai means less oil used.
Thank you so much for trying the recipe! I worked with my mom on this, so I’ll let her know you love it!