A rich and aromatic Indonesian beef soup from Jakarta, slow-simmered with galangal, lemongrass, and warm spices, then enriched with creamy coconut milk. Served with emping crackers, lime, and sambal for the ultimate Betawi comfort bowl that balances savory, fragrant, and gently spiced flavors in every spoonful.
Prep Time20 mins
Cook Time120 mins
Total Time140 mins
Servings4
Yield4 servings
Nutrition Facts
Per serving (estimated)
- 720 kcalCalories
- 42 gFat
- 24 gSaturated Fat
- 14 gCarbs
- 2 gFiber
- 5 gSugar
- 40 gProtein
- 720 mgSodium
- 780 mgPotassium
- 95 mgCalcium
- 6 mgIron
- 16 mgVitamin C
- 85 mcgVitamin A
Ingredients
For the broth and beef
- 500 g (about 1.1 lb) beef brisket, cut into 3 cm cubes
- 200 g (7 oz) beef tendon or honeycomb tripe, parboiled 20 minutes and sliced
- 2 L (8 cups) cold water
- 2 tbsp vegetable oil
- 8 shallots, thinly sliced
- 5 garlic cloves, smashed
- 2.5 cm (1 in) fresh ginger, smashed
- 2.5 cm (1 in) fresh galangal, smashed
For the spice paste and finishing
- 2 lemongrass stalks, white part only, bruised
- 3 kaffir lime leaves, torn
- 2 Indonesian bay leaves (daun salam)
- 1 small cinnamon stick, about 4 cm
- 2 tsp ground coriander
- 1 tsp ground white pepper
- 1 tsp turmeric powder
- 400 ml (13.5 oz) full-fat coconut milk
For serving
- 2 medium tomatoes, seeded and diced
- 2 scallions, thinly sliced
- 1 small handful celery leaves, chopped
- 2 tbsp crispy fried shallots
- 1 lime, cut into wedges
- 80 g (about 1 cup) emping or melinjo crackers
- Sambal or chili paste, to taste
- Steamed jasmine rice or lontong rice cakes, optional
Directions
- Heat the oil in a heavy pot over medium heat. Add the shallots, garlic, ginger, and galangal and sauté for 4 to 5 minutes until fragrant and lightly golden.
- Stir in the ground coriander, white pepper, and turmeric and cook for 30 seconds until the spices bloom and smell toasty.
- Add the beef brisket and tendon or tripe, turning to coat in the aromatics. Pour in the water, then drop in the lemongrass, kaffir lime leaves, bay leaves, and cinnamon stick. Bring to a boil, then reduce the heat and skim off any gray foam that rises to the surface.
- Simmer gently, partially covered, for 90 minutes to 2 hours, or until the beef is fork-tender and the broth has reduced by about one-quarter.
- Pour in the coconut milk and season with 1.5 tsp salt and 1 tsp sugar, or to taste. Simmer uncovered for another 10 minutes so the milk infuses the broth; do not let it boil hard or the coconut milk may split.
- Discard the lemongrass, cinnamon stick, and bay leaves. Taste and adjust the seasoning with more salt or a pinch of sugar if needed.
- Ladle the soup into warm bowls, dividing the beef and tripe evenly. Top each bowl with diced tomato, scallions, celery leaves, and a generous spoonful of crispy fried shallots.
- Serve immediately with steamed rice or lontong on the side, plus lime wedges, emping crackers, and sambal so each person can brighten and spice their bowl to taste.
Cook’s Notes
- For the most authentic flavor, ask your butcher for a mix of brisket and tripe or tendon; the natural gelatin gives the broth its signature silky body.
- Add the coconut milk only in the last 10 minutes and keep the heat low so it stays creamy and does not split or curdle.
- Substitute krupuk (Indonesian shrimp crackers) for emping if melinjo nuts are hard to find, or simply toast raw cashews in a dry pan as a quick crunchy topping.
- Skim the foam early in the simmer so the broth stays clean and clear rather than cloudy and greasy.
- This soup tastes even better the next day once the spices have fully melded; refrigerate overnight, reheat gently, and add the fresh garnishes just before serving.










