What should you eat in a Bali warung, and what does it cost?
A warung is a small family-run restaurant, often just an open-fronted room on the street. It is where the Balinese eat every day, and where you will eat best for the least money. A full meal usually costs 20,000 to 50,000 IDR ($1 to $3). If a warung charges more than 50,000 IDR for a basic nasi campur, you are probably in a place aimed at tourists.
The foundation of the cuisine is base genep, a spice paste handed down through generations. The dishes to know:
- Nasi campur: the everyday dish. A mound of rice surrounded by small portions of whatever the warung prepared that morning: shredded chicken, tempeh, tofu, fish, sambal, peanuts, prawn crackers.
- Babi guling: spit-roasted suckling pig, stuffed with spices, with crackling skin. Cooking starts before dawn, and it is mostly served at lunchtime. The most famous is Ibu Oka in Ubud: there is a queue, but other places are just as good for less.
- Bebek betutu: duck cooked slowly, wrapped in banana leaves, over embers (up to 24 hours). It has to be ordered the day before. The chicken version (ayam betutu) is cheaper.
- Sate lilit: skewers of minced fish, chicken or pork, mixed with coconut and wrapped around lemongrass sticks, then grilled over fire.
- Lawar: a ceremonial salad of coconut, garlic and chilli, with meat (sometimes blood). There is a blood-free version (lawar putih).
Vegetarians are not forgotten: tempeh, tofu, vegetables and coconut are everywhere. If you need halal food, look for the sign at the door: many warungs run by Muslim families serve no pork, though the signage varies.
On hygiene, don't be paranoid: choose a warung busy with Balinese diners, where the food is prepared in the morning and goes quickly.
Verdict: warungs are the best food deal in Bali, and a nasi campur at lunchtime is the one dish you shouldn't skip.
Tip: if you don't eat pork, ask for “ayam” (chicken) or “ikan” (fish), and go between 11 am and 2 pm, when everything is fresh.
Prices and addresses checked in October 2026; confirm before you go.