Foochow Fishball Soup
This is the dish that taught me the word "patience." Uncle Lau used to say it before he started pounding the fish — "patience first, then the springiness comes."
Foochow fishball — fúzhōu yúwán in Mandarin, ngṳ̀-uòng in the Foochow tongue — is one of Fujian's great gifts to the world. The dish is the proud signature of Fuzhou (Foochow), the capital city of Fujian province, and the city was officially designated by the China Fisheries Association in 2012 as "Fish Ball City." The designation is documented on the Fujian Provincial Government's official tourism site; Fuzhou today produces over 3 billion fish balls a year for global export.
Uncle Lau taught me this dish in his small fishball stall in Geylang in the late 1970s, when I was already running my own Hokkien Mee stall a few streets away and would walk down to his stall in the afternoons after my lunch crowd thinned. Uncle Lau was Sibu-born — his father was one of the New Foochow settlers who arrived in Sibu in 1901 with Wong Nai Siong, the Foochow scholar-revolutionary who had recruited 1,118 villagers from Fujian to open up the Rajang River basin in Sarawak. The first batch landed at Sungai Merah ("Red River") on 12 January 1901; the second batch, led by Wong himself, arrived on 16 March 1901 — a date still observed as New Foochow Resettlement Day by Fuzhou descendants worldwide. Of those original 1,118 settlers, reportedly between one hundred and two hundred either died from malaria and cholera in the early years or moved on to Singapore, Penang, Kuching, or Sitiawan in Perak — and Singapore's small Foochow community traces back to those scattered second-and-third-generation diaspora arrivals.
The dish has two parallel-heritage forms:
- Filled (Sibu-Foochow standard): the springy fish-paste exterior wraps a centre of seasoned minced pork mixed with diced water chestnut. This is the form most commonly served at Singapore's surviving Foochow eateries — Seow Choon Hua at Beach Road and the long-running Zhong Xing Foo lineage are documented examples. This is the version I will give you.
- Plain (Hokkien-Teochew standard): the same fish-paste exterior, no filling, served in clear pork broth with mee pok or kway teow. The Teochew fishball most Singaporeans grow up eating is this plain form.
Two further heritage notes worth carrying: the signature springy bouncy texture — what Singapore-Foochow cooks call qq — comes from sweet potato starch, which arrived in Fuzhou via maritime trade from Luzon in 1593, late Ming dynasty. Reportedly it took Fuzhou cooks several decades of experimentation before the starch was incorporated into the fish paste — and once it was, the modern Foochow fishball as we know it was born. The Foochow word for fishball, ngṳ̀-uòng, is sometimes called "balls of blessings" — a play on the Fu (福) in Fuzhou's name, which itself means "blessing." Reportedly the dish appears at every major Fuzhou family celebration and Lunar New Year reunion as a symbol of completeness and good fortune.
Uncle Lau closed his stall in 1992 when his knees gave out. His son did not take it over. There are now perhaps four or five stalls in Singapore that still hand-pound the fish paste from scratch and hand-shape the fishballs with the spoon-and-tiger's-mouth method. Most of the rest buy frozen fishballs from factory suppliers. The frozen ones are not bad. They are not Uncle Lau's.
🛒Ingredients
Three components: the fish paste, the pork filling, and the clear broth. The hand-pounding is the bottleneck and the soul.
For the Fish Paste makes ~30 fishballs
| Spanish mackerel (batang) fillet | 500 g, deboned, skinless | The heritage Singapore fish for fishball paste. Substitutes: yellowtail, threadfin (ikan kurau), or wolf herring (ikan parang). NOT cod or salmon — wrong texture and oil content. |
| Cold water | 100 ml | Critical — must be ice-cold to keep the proteins springy. |
| Sweet potato starch | 3 tbsp | The heritage starch — gives the qq bounce. Substitutes: tapioca starch (acceptable), cornflour (last resort, less authentic). |
| Salt | 1 tsp | |
| Sugar | ½ tsp | |
| White pepper | ¼ tsp | |
| Sesame oil | 1 tsp | |
| Egg white | 1 |
For the Pork Filling filling for ~30 fishballs
| Minced pork (shoulder, 70/30 lean/fat) | 200 g | |
| Water chestnuts | 60 g, peeled and finely diced | |
| Light soy sauce | 1 tbsp | |
| Shaoxing wine | 1 tsp | |
| Sesame oil | 1 tsp | |
| White pepper | ½ tsp | |
| Sugar | ½ tsp | |
| Spring onion, finely chopped | 1 tbsp | |
| Cornflour | 1 tsp |
🌶️Shifu's Lift
choose one path — see "Shifu's Secret" chapter for the philosophy- Old-school path: ¼ tsp MSG in the fish paste
- Modern hawker path: ½ tsp chicken stock powder in the fish paste
- Heritage purist path: reportedly the Sibu masters add 1 tsp of pork lard rendered from the broth bones into the fish paste — gives a deeper savoury body without changing the colour
For the Clear Broth makes 2L, enough for 4
| Pork bones (neck or back) | 800 g | |
| Fish bones | framework left from the deboned mackerel | Heritage no-waste principle. |
| Dried sole fish (ti po) | 30 g, toasted, tied in muslin | |
| Whole bulb garlic | 1, halved | |
| Fresh ginger | 1 thumb, sliced | |
| Cold water | 2 L | |
| Salt | 1 tsp, to taste | |
| White pepper | to taste |
For Serving per bowl
| Cooked fishballs | 6 | |
| Hot clear broth | 350 ml | |
| Spring onion, finely chopped | 1 tbsp | |
| Fried garlic oil with crisp garlic flakes | 1 tsp | |
| White pepper | a pinch | |
| Mee sua (fine wheat vermicelli) optional | 30 g dry, blanched 30 seconds in a separate pot |
Condiment traditional
| Bird's-eye chillies sliced thin, in light soy sauce | on the side | For dipping. |
👨🍳Method
Six stages plus assembly. Pound, fill, shape, build broth, cook fishballs, plate. Patience first, then springiness.
Pound the Fish Paste the dish's signature
This is the patience step. Uncle Lau's rule: "If you cheat the pounding, the fishball will tell on you when it cooks."
Pat the fish fillet dry with paper towels. Cut into 2 cm chunks. Place in the freezer for 15 minutes — cold fish pastes better.
Heritage method (heavy wooden mallet on a chopping block): place the chilled fish chunks on a heavy wooden block. Pound with the back of a wooden mallet, working the fish in steady rhythmic strokes, until the flesh breaks down into a smooth pale-cream paste. Add the cold water 1 tablespoon at a time as you pound, letting each addition absorb before the next. After 15 minutes of pounding, work in the sweet potato starch, salt, sugar, white pepper, sesame oil, and egg white. Pound for another 5 minutes until the paste turns glossy and elastic — when you lift a small lump on a spoon and let it fall, it should fall in one continuous heavy ribbon.
Modern method (food processor): pulse the chilled fish chunks with the cold water in short bursts until smooth. Add the remaining ingredients and pulse again until the paste is glossy and elastic. Reportedly about 90 seconds total processing time gets you there; over-process and the paste turns warm and loses its bounce.
Test for readiness: drop a small ball of paste into a bowl of cold water. If it floats within 10 seconds, the paste is properly aerated and ready. If it sinks, pound or pulse another 2 minutes.
Cover and rest the paste in the fridge 30 minutes before shaping.
Build the Pork Filling
Combine the minced pork with all filling seasonings in a bowl. Mix in one direction for 3 minutes — same technique as ngoh hiang, same technique as wantan. Add the diced water chestnut and chopped spring onion last; gentle fold to incorporate. Cover and rest 30 minutes in the fridge.
Shape the Fishballs the tiger's-mouth method
Set up your station: bowl of fish paste, bowl of pork filling with a small porcelain spoon resting in it, small cup of cold water for slicking your hands, a bamboo tray dusted with cornflour, and a stoneware basin of warm (NOT hot) water for parking the shaped fishballs.
The heritage shaping method:
- Wet your left hand. Scoop a generous lump of fish paste into your left palm, about 2 tablespoons.
- Close your left hand into a loose fist — the paste squeezes upward through the gap between thumb and forefinger (the "tiger's mouth"), forming a small rounded pocket of paste at the top of your fist.
- With your right hand, dip the spoon into the cold water (keeps it slick), then scoop a small portion of pork filling — about ½ teaspoon — and press it gently into the centre of the emerging paste pocket.
- Squeeze your left fist tighter — the paste closes over the filling, sealing it inside. The fishball pops out the top of your fist as a uniform round.
- Use the slick edge of the spoon to scrape the fishball off your fist and set it down into the basin of warm water.
The fishballs sit in the warm water as you shape — this gentle pre-warming firms the surface so they don't fall apart when they hit the broth.
Build the Clear Broth
In a large stockpot, blanch the pork bones in boiling water for 5 minutes. Drain, rinse under cold water, and return the bones to the (cleaned) pot. Add the fish-bone framework, the toasted ti po in muslin, halved garlic bulb, ginger slices, and 2 litres of cold water.
Bring to a gentle simmer over medium heat — not a rolling boil. The boil will turn your broth cloudy and milky; you want clear amber. Once at simmer, reduce heat to low and skim the pale foam-scum from the surface every 10 minutes for the first hour. After the first hour, you can leave it alone.
Simmer 3 hours total. Strain through a fine-mesh sieve lined with muslin into a clean pot. Season with salt and white pepper to taste. The broth should be clear pale amber, lightly seasoned, deeply savoury.
Cook the Fishballs
Bring a separate pot of clear broth (or lightly salted water if your broth is precious) to a gentle simmer, NOT a rolling boil. Lower the shaped fishballs in batches of 8–10 — do not crowd.
The doneness cue is the float. Uncle Lau's rule: "When they float, they're cooked. Lift them out immediately. If you wait, they go tough."
The fishballs sink at first, then rise to the surface within 4–6 minutes. The moment they float, lift them out with a wire-mesh strainer.
Assemble
Ladle hot clear broth into a simple white porcelain heritage soup bowl. Add 6 cooked fishballs. Sprinkle with chopped spring onion, drizzle with fried garlic oil and a few crisp garlic flakes, finish with a pinch of white pepper.
If serving with mee sua: blanch the fine wheat vermicelli in a separate pot for 30 seconds — no longer, mee sua softens fast. Add to a separate bowl and pour broth-and-fishballs over it.
Serve immediately, with a small saucer of bird's-eye chillies in light soy sauce on the side.
🎯The Three Tips
Heritage. Master's. Mistake.
🏛 Heritage Note
The Foochow Fishball Is Older Than Singapore
The Fuzhou tradition of pounding fish into springy paste predates the arrival of sweet potato starch in 1593, but the modern springy-bouncy fishball as we know it is post-1593. Reportedly the dish travelled from Fuzhou with the maritime trading routes — through the Ryukyu Islands, where it influenced Okinawan and Japanese fish-cake traditions, and southward through the Foochow diaspora to Sibu, Sitiawan, Penang, and Singapore.
For young hawkers thinking about Foochow fishballs as a stall: the pounding is the bottleneck. A skilled pair of hands can pound and shape about 200 fishballs an hour. A frozen-supplier stall can do 2,000 in the same time. The economics are real. But the customer who walks back the second week is the one who tasted the difference.
👨🍳 Master's Tip
The Float Test
Two doneness cues for Foochow fishballs:
1. Pre-cook float test in cold water. Drop a tiny ball of raw paste into cold water. If it floats within 10 seconds, your paste is properly aerated and the fishballs will be springy. If it sinks, the paste is over-pounded or under-mixed; pound or pulse another 2 minutes.
2. Cooking float in simmering broth. When the shaped fishballs rise to the surface in the simmering broth, they are cooked through. Lift immediately — Uncle Lau's rule is absolute. Every minute past the float, the paste tightens; a few minutes past, and they go from springy-bouncy to rubber.
⚠ Common Mistake
Cloudy Broth, Tough Fishballs
Boiling the broth instead of simmering it. A rolling boil emulsifies the fat from the pork bones into the water, giving you a milky-white tonkotsu-style broth instead of the clear amber Foochow broth. Gentle simmer always — small bubbles on the surface, no rolling. And skim every 10 minutes for the first hour.
Overcooking the fishballs. People assume "cook longer = safer" — for these fishballs, longer is the enemy. The fish paste is fully cooked the moment the fishballs float. Lift immediately.
Wrong fish. Cod, sea bass, salmon — none have the protein structure or right oil content. Spanish mackerel, yellowtail, threadfin, wolf herring — these are the springy-paste fish. Cod is for fish-and-chips. Salmon is for sashimi.
📈 Scaling for Hawker Service
For a Foochow fishball stall doing 80–120 bowls a day
Noting that fewer than five surviving stalls in Singapore still hand-pound and hand-shape — the rest buy frozen.
- Fish-paste batch: 5–7 kg fish processed daily, in the morning. Pounding takes a skilled cook 2–3 hours; many stalls now use commercial-grade food processors but the heritage stalls insist on hand-pounding for the final 5 minutes to "wake up the springiness."
- Fishball production: 600–1,000 fishballs hand-shaped daily, by a single experienced cook in 3–4 hours. This is the labour bottleneck.
- Broth: 15–20 litres of clear pork-and-fish-bone broth simmered overnight, 6–8 hours, refreshed once at midday with additional bones if service runs late.
- Cost (Singapore 2026): per bowl ~SGD 2.40 (fishballs 1.40 + broth 0.50 + aromatics 0.20 + mee sua 0.30 if included). Sells SGD 6–9 standard, SGD 10–14 with mixed-soup additions (yan pi, fish dumplings, fishcake). Margin: 60–70%.
- Where the surviving stalls land: Seow Choon Hua (Beach Road), Zhong Xing Foo (formerly China Street). Reportedly both still hand-pound. Both stalls are documented in Singapore food-writing sources including Miss Tam Chiak and ieatishootipost.
Patience first, then the springiness comes. Pound the fish, shape with the tiger's mouth, simmer the broth gentle, lift the fishball the moment it floats. Skip any one of these four, and you do not have a Foochow fishball — you have a fish-flavoured rubber ball in dishwater. Uncle Lau used to say there are no shortcuts in this dish. Forty years later, I still cannot find any.