Salmon Fish Bone Carrot Tofu Cilantro Soup (三文魚骨豆腐湯)

Fish bone soup Fish bone soup Fish bone soup Fish bone soup Fish bone soup

Look at all those fish head and bones I got for free (first picture) just by asking the seafood department at the grocery store! So nice! I got the milkiness, but my soup wasn’t as flavourful as what I’m used to when my mum makes it. It might be because they had frozen the bones so it’s not fresh and my mum also uses a whole fish, hence more meat. You might also think it’s a lot of cilantro and ginger in this recipe. That’s because I was a little paranoid in getting rid of any fishy taste. I had smelled the fishiness in the elevator when I got it, however, the panfrying really abolished it all. If you’re using fresh bones, you probably wouldn’t need as much, but I love cilantro anyway especially when paired with fish! Lastly, ginger is considered heaty while cilantro is considered cooling, so this soup is net neutral! But just to be safe, we ate watermelon afterwards (don’t want to be too heaty during this summer heat!).


  • 2 lbs fish head/bones, fins and tails cut off
  • 2 small carrots, thinly sliced
  • 1 block soft tofu, cut into large rectangles
  • 1.5 cups chopped cilantro
  • 5 slices ginger
  • 10 cups water
  • Salt to taste


  • Rinse all the fish parts under cool running water. Cut off the fins and tails with a strong pair of scissors. Pat dry with paper towel.
  • Bring the water to a boil with the ginger in a large pot.
  • Meanwhile, heat a cast iron pan on high heat, add a lug of oil. When oil is hot, turn the heat down to medium high and lay down the fish. Pan fry both sides until golden brown, flipping once, ~4min each side. Continue with rest of fish. Set aside.
  • When the water is boiling, transfer the fish into the water. Bring it back to a boil then turn the heat down to low-medium and let it simmer for 10min.
  • Add in the carrots and continue to simmer for another 20min.
  • Near the end of the 20min, scoop out the fish and drain into a sieve. Add in the tofu and let it boil for 1-2min (not too long or else it will get “old”). Return the drained out soup.
  • Add the cilantro and salt at the end. Stir and serve with white pepper.


  • You can also add a chopped preserved egg, which makes it infinitely better, but I forgot.
  • I added the carrots for extra sweetness and nutrition. Otherwise, you can add 1/2lb of lean pork (sliced) to make it more flavourful, but I knew my pot wouldn’t be big enough.
  • Fish soup does not need to be boiled for a long time.

Side Rant: 

  • You can skim off the oil at the end before you add the cilantro. However, I’m a firm believer that fats are just as important as any other nutrient. Your brain and nervous system need it, people! If you think about it, the only oil in the soup is the oil you used to panfry the fish and the natural fish oils, the former being unsaturated (which is better than saturated fats) and the latter being rich in omega-3’s. Spread this over the many bowls of soup this pot serves and what you get is not that much oil! But I don’t like seeing too much oil in my soup either, so you can maybe skim off half?