The healthiest hawker dish in Singapore, judged on four measures, is porridge with minced pork and century egg. That was not the answer we expected either — and the hospital that measured it disagrees, which is the more interesting half of the story.
We ranked 16 Singapore hawker dishes on protein per calorie, sodium, saturated fat and total calories, using portions weighed and measured by the Department of Nutrition and Dietetics at KK Women's and Children's Hospital (KKH). Each dish was ranked 1 to 16 on each measure and the four ranks added together. Lowest total wins. The best possible score is 4.
- The winner, and why KKH themselves would tell you not to eat it daily
- All 16 dishes scored on four measures
- The full 41-dish table — sodium, protein and the KKH serving weight for every dish
- The three changes that cost nothing at the stall
The winner: porridge, with a score of 9
512g · 224 calories · 11g protein · 834mg sodium · 2.3g saturated fat.
It placed first on calories, second on sodium, second on saturated fat and fourth on protein efficiency. Nothing else on the board was top five on all four measures. The dish most people file under "food for when you're sick" is, by these four numbers, the best thing at the stall.
The catch, from KKH themselves
Their own note on this exact dish says it is too high in cholesterol and sodium, and too low in protein and fibre to be eaten on a regular basis. It carries 370mg of cholesterol — the highest of any dish compared here.
Our four measures did not include cholesterol or fibre. Had they been included, porridge would not have won. Both things are true at once: it is the best dish on this board by these four measures, and it is still not an everyday meal. Any single ranking is only as good as the measures behind it, which is why ours are printed rather than hidden.
"It only wins because the bowl is small"
Partly fair. Porridge is 224 calories against chicken rice's 607, so here are two bowls against one plate:
| Two bowls of porridge | One chicken rice | |
|---|---|---|
| Calories | 448 | 607 |
| Protein | 22g | 25g |
| Sodium | 1,668mg | 1,287mg |
| Saturated fat | 4.6g | 8.7g |
Two bowls still beat one chicken rice on calories and come in at roughly half the saturated fat. But chicken rice wins on sodium and on protein. If you are eating two bowls to get full, the salt advantage is gone.
All 16 dishes, scored
Ranked by total score, lowest first. Runners-up were sliced fish bee hoon soup and wonton mee soup, tied on 16, followed by duck rice with the skin removed on 19.
| Dish | Serving | kcal | Protein | Sodium | Sat fat | Score |
|---|---|---|---|---|---|---|
| Porridge with minced pork & century egg | 512g | 224 | 11g | 834mg | 2.3g | 9 |
| Sliced fish bee hoon soup | 686g | 349 | 22g | 1,413mg | 3.5g | 16 |
| Wonton mee — soup | 545g | 290 | 19g | 1,804mg | 0g | 16 |
| Duck rice — skin removed | 350g | 530 | 24g | 326mg | 3.6g | 19 |
| Mutton murtabak | 211g | 373 | 15g | 1,365mg | 7.0g | 28 |
| Fishball noodle soup | 798g | 551 | 30g | 2,913mg | 2.4g | 31 |
| Mee soto | 541g | 433 | 19g | 2,678mg | 5.4g | 33 |
| Nasi lemak | 210g | 494 | 13g | 838mg | 7.6g | 34 |
| Chicken rice (roasted, with skin) | 382g | 607 | 25g | 1,287mg | 8.7g | 36 |
| Char siew rice | 327g | 605 | 24g | 880mg | 11.9g | 39 |
| Bak chor mee — dry | 311g | 511 | 20g | 1,491mg | 9.2g | 39 |
| Mee rebus | 571g | 571 | 23g | 2,164mg | 5.8g | 40 |
| Nasi biryani with chicken | 488g | 877 | 39g | 1,656mg | 14.8g | 46 |
| Laksa lemak | 540g | 591 | 17g | 1,588mg | 17.8g | 50 |
| Char kway teow | 384g | 744 | 23g | 1,459mg | 29.2g | 53 |
| Roti john | 252g | 721 | 25g | 2,011mg | 18.1g | 55 |
The four that lost, and why
- Roti john — 55. 18.1g of saturated fat and 2,011mg of sodium in a 252g serving. The smallest serving on the board with the worst score.
- Char kway teow — 53. 29.2g of saturated fat. Nothing else on the board comes close; KKH notes that one plate exceeds the daily saturated fat allowance outright.
- Laksa lemak — 50. 2.9g of protein per 100 calories. The coconut milk does it.
- Nasi biryani — 46. 39g of protein, genuinely excellent — carried on 877 calories and 14.8g of saturated fat.
Losing here does not mean never eat it. It means knowing what it costs, and how often.
The full 41-dish hawker board
Every dish KKH measured that works as a complete meal or as the protein in one, ranked by sodium, with the serving weight behind every figure. Green is under 1,000mg. Orange is over the entire 2,000mg daily limit in a single serving.
| Dish | KKH serving weight | Protein | Sodium | % of daily limit |
|---|---|---|---|---|
| Fishball noodle soup | 798g | 30g | 2,913mg | 146% |
| Mee soto | 541g | 19g | 2,678mg | 134% |
| Mee siam | 655g | 28g | 2,659mg | 133% |
| Lor mee | 540g | 15g | 2,538mg | 127% |
| Prawn mee soup | 574g | 19g | 2,422mg | 121% |
| Kway chap | 611g | 33g | 2,303mg | 115% |
| Penang laksa | 569g | 18g | 2,287mg | 114% |
| Ban mian | 528g | 22g | 2,196mg | 110% |
| Mee rebus | 571g | 23g | 2,164mg | 108% |
| Roti john | 252.5g | 25g | 2,011mg | 101% |
| Lontong with sayur lodeh | 775g | 46g | 1,930mg | 96% |
| Mee goreng | 309g | 18g | 1,851mg | 93% |
| Wonton mee — soup | 545g | 19g | 1,804mg | 90% |
| Bak chor mee — soup | 597g | 18g | 1,740mg | 87% |
| Sup tulang / mutton soup | 934g | 20g | 1,658mg | 83% |
| Nasi biryani with chicken | 488g | 39g | 1,656mg | 83% |
| Fishball noodle — dry | 327g | 19g | 1,645mg | 82% |
| Laksa lemak | 540g | 17g | 1,588mg | 79% |
| Beehoon soto | 902g | 20g | 1,537mg | 77% |
| Wonton mee — dry | 330g | 19g | 1,502mg | 75% |
| Bak chor mee — dry | 311g | 20g | 1,491mg | 75% |
| Nasi goreng | 377g | 21g | 1,467mg | 73% |
| Char kway teow | 384g | 23g | 1,459mg | 73% |
| Fried Hokkien prawn mee | 442g | 18g | 1,423mg | 71% |
| Sliced fish bee hoon soup | 686g | 22g | 1,413mg | 71% |
| Mutton dum biryani | 859g | 47g | 1,400mg | 70% |
| Mutton murtabak | 211g | 15g | 1,365mg | 68% |
| Fried carrot cake | 295g | 2g | 1,289mg | 64% |
| Chicken rice (roasted, with skin) | 382g | 25g | 1,287mg | 64% |
| Fried rice | 428g | 28g | 1,245mg | 62% |
| Chicken soup with Chinese herbs | 534g | 24g | 909mg | 45% |
| Char siew rice | 327g | 24g | 880mg | 44% |
| Nasi lemak | 210g | 13g | 838mg | 42% |
| Porridge with minced pork & century egg | 512g | 11g | 834mg | 42% |
| Duck rice — roasted, with skin | 410g | 24g | 545mg | 27% |
| Chicken tandoori | 112g | 19g | 480mg | 24% |
| Beef rendang | 93g | 24g | 466mg | 23% |
| Fish tikka | 99g | 23g | 414mg | 21% |
| Duck rice — skin removed | 350g | 24g | 326mg | 16% |
| Ayam goreng | 80g | 16g | 228mg | 11% |
| Chicken tikka | 71g | 24g | 187mg | 9% |
Source: KKH Department of Nutrition and Dietetics via SingHealth HealthXchange. Daily sodium limit of 2,000mg per Singapore's Health Promotion Board. Portions vary by stall — treat every figure as ±10%.
Three things that cost you nothing
1. Don't finish the broth
The noodles were never the problem. In a bowl of mee soto the noodles carry roughly 40mg of sodium; the bowl carries 2,678mg. The rest is broth, seasoning and sambal. You don't have to change what you order — only what you leave behind.
2. Two words at the duck rice stall: no skin
Duck rice with the skin on is 410g, 545mg of sodium and 24g of protein. With the skin removed it is 350g, 326mg of sodium and the same 24g of protein. Identical protein, 219mg less sodium and less fat, for two words at the counter.
3. Learn the bottom of the board
Most people can name the dishes they think are bad for them. Very few can name the ones that are not. Duck rice with the skin removed (326mg), porridge (834mg), nasi lemak (838mg) and char siew rice (880mg) are all complete meals under half the daily sodium limit.
Method and limits
All nutritional figures are from the Department of Nutrition and Dietetics at KK Women's and Children's Hospital, a member of the SingHealth group, published via HealthXchange in the "Best and Worst Singapore Hawker Food" series covering Chinese, Malay and Indian dishes (Ref: S13). The 2,000mg daily sodium limit is the Health Promotion Board's figure for adults.
Serving weights, protein, sodium, calories and saturated fat are transcribed directly from KKH's published tables with no adjustment. Scores and percentages are calculated from those published figures. This board covers complete one-dish meals plus dishes ordered as the protein element of a meal; per-piece dim sum, snacks, plain breads and shared platters were also measured by KKH but are excluded here so that like is compared with like.
Limits. Portions vary by stall — treat every figure as ±10%. KKH measured one portion of each dish, not an average across stalls. Dishes not listed were not measured in this series; their absence is not a verdict. This page is general information, not medical or dietary advice. If you have high blood pressure, kidney disease, high cholesterol, or you are pregnant, your targets come from your doctor.
Frequently asked questions
What is the healthiest hawker dish in Singapore?
By four measures — protein per calorie, sodium, saturated fat and total calories — it is porridge with minced pork and century egg. A 512g serving measured by KK Women's and Children's Hospital contains 224 calories, 11g of protein, 834mg of sodium and 2.3g of saturated fat. It ranked first on calories, second on sodium, second on saturated fat and fourth on protein efficiency out of 16 dishes. No other dish placed in the top five on all four.
Is porridge actually healthy?
Not unconditionally, and KKH says so themselves. Their note on this dish states it is too high in cholesterol and sodium, and too low in protein and fibre, to be eaten on a regular basis. It carries 370mg of cholesterol — the highest of the dishes compared here. Our four measures did not include cholesterol or fibre. If they had, porridge would not have won. It is the best dish on this board by these four measures and still not an everyday meal.
Which hawker dish has the most sodium?
Fishball noodle soup. A 798g serving contains 2,913mg of sodium — 146% of the 2,000mg daily limit set by Singapore's Health Promotion Board — in a single bowl. Ten of the 41 dishes measured exceed the entire daily limit in one serving.
Which hawker dish has the lowest sodium?
Of the complete one-dish meals, duck rice with the skin removed is lowest at 326mg, or 16% of the daily limit, while keeping all 24g of protein. The same dish with the skin on measures 545mg. Asking for it without skin is the single cheapest change on this board.
Which hawker dish has the most saturated fat?
Char kway teow, at 29.2g in a 384g serving. That is more than mutton dum biryani, which is an 859g plate with almost 400 more calories. KKH notes that eating char kway teow exceeds the daily saturated fat allowance and delivers 70% or more of the daily cholesterol and sodium allowance for an adult.
How were these dishes scored?
Each of the 16 dishes was ranked from 1 to 16 on four measures — protein per 100 calories, sodium per serving, saturated fat per serving and calories per serving — and the four ranks were added together. The lowest total wins. All four measures count equally and there is no weighting. The best possible score is 4.
Where do these numbers come from?
Every figure was measured by the Department of Nutrition and Dietetics at KK Women's and Children's Hospital, a member of the SingHealth group, and published through HealthXchange. Nothing here is an app estimate. The serving weight KKH measured is printed against every dish, because a nutrition figure without a serving weight cannot be compared to anything.
Knowing the numbers is the easy half
This board tells you what is in the dish. It does not tell you what to order on a Tuesday when you have 40 minutes and the queue is long. That is the part people actually get stuck on.
The 7-Day Hawker Shred Plan turns this data into an actual week — a named dish for every meal, protein and calorie targets that hold together across the day, and the exact order to ask for at the stall. The 28-Day Hawker Shred Complete runs the full month with the macro maths done for you.
Compiled by Couz-Nutri — Singapore sports nutrition. Every figure on this page has a named source. If you find one you think is wrong, tell us and we will check it.