Chinese Stir Fry Recipe with Garlic Shoots and Tofu

This is the basis and the mother of all Chinese stir fry. Simple, fresh ingredients, fast, and tasty. You don’t have to use the exact ingredients — you can pick any vegetables, meat, tofu, etc. and employ the same technique. In this post, I will teach you the philosophy behind making the best stir fry and how to make your stir fry the most presentable using “colour, smell, and taste.”

“Colour, smell, and taste” are Cantonese cooking principles. To make a truly successful dish in any Cantonese cooking, you will have to fulfill these three criteria. The total time to make this dish is less than 30 minutes, with actual cooking time under 10 minutes. Click to read further:

The version pictured above is actually a vegetarian stir-fry, with the protein coming from pressed five spice tofu:

This tofu is pressed, and very firm. Look for the first two symbols (in red) that you see in the photo above. There are a variety of brands available, so simply ask the store staff for this type of tofu if you can’t find it. Usually it is with the rest of the tofu but within the firm tofu section there are still many types. “Five Spice” is the one you want!

If you are wanting to make a stir fry with meat, you can do so as well. Simply substitute chicken, beef, or pork instead of tofu.

The key points of this recipe:

  • Unity – Despite the ingredients, you should cut your stir fry veggies & meat/tofu into similarly shaped julienne pieces. This will provide a good harmony, in visuals and in taste. In general, it is important to always keep this harmony principle in mind, because it is used throughout Chinese cooking
  • Aromas – The foundation vegetables in this stir-fry are: carrots, onions, and red peppers — these provide the perfect combination of aroma to give your stir fry the authentic full-bodied savory taste
  • Timing – Vegetables tend to cook at different speeds. Know the cook times of your vegetables so the end result is still crunchy but not raw (no mushy vegetables!)
  • Visual harmony – As you can see in the picture above, there is a healthy and balanced variety of colour. It is important to use a diverse mix of vegetables to not only get different tastes, but so that you have a visually appealing presentation!

Special notes about using garlic shoots:

  • When in season, garlic shoots offer a wonderful and aromatic element to stir-fry:

  • They take much longer to cook than most other vegetables and you must cut off the bottom 2 inches of the garlic shoot — it is too old and fibrous and will be chewy!

Special notes about my favourite secret ingredient, “zha choi” / “zhacai” Sichuan Preserved Vegetables:

  • You can buy this at any Chinese/Asian grocery store
  • It is not mandatory but will add another layer/dimension of flavour. I really like using it because it also has a great crunch and salty unique flavour. It is a very popular ingredient in Chinese cooking!
  • You to rinse the zha cai very well after opening the package because it is heavily salted! Rinse well with cold water and set aside before cooking…

Chinese Stir Fry Recipe with Tofu and Garlic Shoots

Serves 4-6

Total time: 30 minutes (including prep time)


  • 1 bunch of fresh garlic shoots, cut into 2-3″ segments
  • 1/4 large sweet onion, julienned
  • 1/2 red pepper, julienned
  • 1 carrot, peeled and julienned
  • 2 squares of “Five Spice” pressed tofu, julienned
  • 1 package Sichuan preserved vegetable, rinsed well and julienned
  • 5 large fresh shiitake mushrooms, julienned
  • 1 large stalk green onion, julienned
  • Chinese cooking wine

Sauce – premix in a separate bowl – mix well!

  • 1 tsp corn starch
  • 1/2 tsp oyster sauce
  • 1/2 tsp soy sauce
  • 1/2 tsp fish sauce
  • 1/4 tsp sugar
  • Splash of white pepper
  • 1 tsp Chinese cooking wine
  • 1/4 cup water
  • Mix above ingredients well and add 1/4 tsp sesame oil

(Some other suggested stir fry vegetables: celery, yellow/orange peppers, asparagus, etc. — as long as they are colourful and aromatic!)


  1. Heat up your wok or frying pan with high heatand once it is smoking hot, add approx. 2 tbsp of Canola/vegetable oil (DO NOT USE OLIVE OIL)
  2. Place garlic shoots into the frying pan with approx. 3 tbsp of water and cover immediately with a pot lid. Garlic shoots take much longer to cook than the other vegetables so it is important to give it extra time and a bit of a boost with high heat & steam. Let cook for 30 seconds.
  3. After 30 seconds, open the lid and allow the water to evaporate. Add carrots, onions, and red peppers (if you are not using garlic shoots then do not use the cover & steam method)
  4. Quickly toss splash cooking wine on the sides of the cooking pan. Mix well and allow the hot heat to evaporate all of the alcohol
  5. Add shiitake mushrooms and bring heat back down to medium (shiitake mushrooms will absorb all liquid in the pan so be careful with the heat — it will burn! If you smell any burning, add a little bit more vegetable oil)
  6. Keep tossing ingredients well for approximately one minute
  7. Add sliced tofu and Sichuan preserved vegetables, mix well
  8. Just before adding the sauce, turn the heat back up to high and mix well. The corn starch is a thickening agent and will automatically make a nice, shiny, thick sauce. At the very end, add your julienned green onions and toss well.
  9. Arrange onto a serving plate and enjoy! Dinner is ready!

This goes well with plain, steamed rice or soup udon noodles.

One Comment Add yours

  1. Julian says:

    Great recipe!
    Though most vegetarians, like me, i think would disagree, that this is still a vegetarian dish with the oyster- and fishsauce in it. I tried it today without those ingredients and took a little extra soysauce instead. Tasted great nonetheless.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s