Quick Recipe Version (TL;DR)
Quick Ingredients
- 4 lb beef marrow/knuckle bones
- 1.5 lb oxtail or beef shank
- 1 lb brisket, 1 lb flank steak
- 2 large yellow onions, 4-inch piece ginger
- 6 star anise, 2 cinnamon sticks, 1 tbsp coriander seeds, 1 tbsp fennel seeds, 6 cloves, 1 black cardamom pod (optional)
- 6 qt water
- 1/3 cup fish sauce, 2 tbsp rock sugar (or granulated), 2 tsp kosher salt
- 1 lb dried rice noodles (banh pho)
- Bean sprouts, Thai basil, cilantro, lime wedges, thinly sliced onion, scallions, Thai chiles
Do This
- 1. Blanch bones and oxtail: boil 10 minutes, drain and rinse.
- 2. Char onion and ginger under broiler (550°F) 8–10 minutes; toast spices 2–3 minutes.
- 3. Simmer bones with aromatics, spices, and 6 qt water at 190–195°F for 3 hours, skimming.
- 4. Add brisket and flank; simmer 75–90 minutes until tender. Chill to slice thinly.
- 5. Season broth with fish sauce, sugar, and salt; simmer 30 minutes, then strain clear.
- 6. Blanch soaked noodles 30–60 seconds. Assemble bowls with noodles, sliced meats, onion, scallions; ladle boiling broth and serve with herbs, sprouts, lime, and chiles.
Why You’ll Love This Recipe
- Crystal-clear, deeply aromatic broth thanks to blanching, charring, and careful simmering.
- Tender, thin-sliced brisket and flank for classic pho bo texture and flavor.
- Balanced seasoning with fish sauce and rock sugar—savory, lightly sweet, and clean.
- Restaurant-worthy results with straightforward, home-cook-friendly steps.
Grocery List
- Produce: 2 large yellow onions, 1 small onion (garnish), 4-inch piece fresh ginger, scallions, Thai basil, cilantro, bean sprouts, limes, Thai bird’s eye chiles
- Dairy: None
- Pantry: Beef bones (marrow/knuckle), oxtail or beef shank, brisket, flank steak, dried rice noodles, fish sauce, rock sugar (or granulated sugar), whole spices (star anise, cinnamon sticks, coriander seeds, fennel seeds, whole cloves, black cardamom), kosher salt
Full Ingredients
Bones & Meat
- 4 lb (1.8 kg) beef marrow and/or knuckle bones
- 1.5 lb (680 g) oxtail or beef shank
- 1 lb (450 g) beef brisket
- 1 lb (450 g) beef flank steak
Aromatics & Spice Pouch
- 2 large yellow onions (about 1 lb/450 g), halved
- 1 piece fresh ginger, 4 inches (100 g), halved lengthwise
- 6 whole star anise
- 2 cinnamon sticks (3-inch/7.5 cm)
- 1 tbsp coriander seeds
- 1 tbsp fennel seeds
- 6 whole cloves
- 1 black cardamom pod (optional but traditional)
- Cheesecloth/tea sachet for spices
Seasonings for the Broth
- 6 qt (5.7 L) cold water
- 1/3 cup (80 ml) fish sauce, plus more to taste
- 2 tbsp (30 g) rock sugar (or 2 tbsp granulated sugar)
- 2 tsp kosher salt, plus more to taste
Noodles & Toppings
- 1 lb (450 g) dried flat rice noodles (banh pho size M) or 2 lb fresh rice noodles
- 1 small onion, paper-thin slices (soaked in ice water 10 minutes)
- 4 scallions, thinly sliced
- 4 cups bean sprouts
- 1 large bunch Thai basil; small bunch cilantro and/or culantro (ngo gai)
- 3 limes, cut into wedges
- 2–3 Thai bird’s eye chiles, thinly sliced
- Optional at table: hoisin and chili-garlic sauce

Step-by-Step Instructions
Step 1: Blanch the bones for a clear broth
Place the beef bones and oxtail (or shank) in a 12-quart (11.4 L) stockpot and cover with cold water by 2 inches. Bring to a rolling boil over high heat and boil for 10 minutes. Drain immediately. Rinse bones and pot thoroughly to remove any gray foam and impurities. This step ensures a clear, clean-tasting broth.
Step 2: Char aromatics and toast spices
Set oven to high broil (about 550°F / 290°C). Place halved onions and ginger, cut sides up, on a foil-lined sheet. Broil 8–10 minutes, turning once, until deeply charred in spots and fragrant. Briefly rinse under warm water to remove loose blackened bits. Meanwhile, toast star anise, cinnamon, coriander, fennel, cloves, and black cardamom in a dry skillet over medium heat for 2–3 minutes until aromatic. Tie spices in cheesecloth or place in a large tea sachet.
Step 3: Simmer the broth base gently
Return cleaned bones and oxtail to the pot. Add 6 qt (5.7 L) cold water, charred onions and ginger, and the spice pouch. Bring just to a boil, then immediately reduce to a very gentle simmer (190–195°F / 88–90°C). Partially cover and simmer for 3 hours, skimming any foam or excess fat occasionally. Keep the surface gently trembling—do not boil vigorously.
Step 4: Cook brisket and flank until tender
Lower the brisket and flank into the gently simmering broth. Continue simmering 75–90 minutes, until both cuts are tender but not falling apart (a skewer slides in with little resistance). Remove the meats; cool 20 minutes, then wrap and chill to firm up for thin slicing.
Step 5: Season and strain for a crystal-clear finish
Add 1/3 cup fish sauce, 2 tbsp rock sugar, and 2 tsp kosher salt to the pot. Simmer 30 minutes to meld. Remove and discard spice pouch, onions, and ginger. Strain the broth through a fine-mesh sieve lined with cheesecloth into a clean pot. Adjust seasoning with more fish sauce or salt if needed; the broth should taste savory, lightly sweet, and aromatic. Keep at a bare simmer for serving.
Step 6: Prep the garnishes
Soak paper-thin onion slices in ice water for 10 minutes, then drain well (this keeps them crisp and mild). Rinse bean sprouts, pick basil and cilantro leaves, slice scallions and chiles, and cut limes into wedges. Arrange everything on a platter for the table.
Step 7: Cook noodles and slice the meats
For dried noodles: soak in warm water 30 minutes, then blanch in boiling water for 30–60 seconds until just tender. For fresh noodles: blanch 10–20 seconds. Drain thoroughly. Slice the chilled brisket and flank very thinly (1–2 mm) across the grain.
Step 8: Assemble and serve
Warm serving bowls. Divide noodles among 6 bowls (about 3–4 oz cooked per bowl). Top with slices of brisket and flank, a few onion rings, and scallions. Ladle in 2 cups of vigorously simmering broth per bowl so the meat warms through. Serve immediately with basil, cilantro, bean sprouts, lime wedges, and chiles on the side. Offer hoisin and chili-garlic sauce if desired.
Pro Tips
- Keep it gentle: a steady 190–195°F simmer prevents cloudy broth and keeps flavors clean.
- Soak-and-blanch noodles right before serving to avoid clumping and overcooking.
- Chill cooked brisket and flank before slicing for paper-thin, restaurant-style cuts.
- Strain through cheesecloth for a sparkling clear finish; skim fat or chill and remove the set fat cap.
- Pre-warm bowls so the broth stays hot when it hits the noodles and meat.
Variations
- Pressure cooker: After blanching, cook bones, aromatics, spices, and water at High Pressure for 60 minutes, natural release 20 minutes. Add brisket and flank; pressure 20 minutes, quick release. Season and strain.
- Weeknight shortcut: Simmer 2 quarts low-sodium beef broth with charred onion, ginger, and toasted spices for 45 minutes. Add fish sauce and sugar; strain. Poach thinly sliced flank in the broth and assemble bowls.
- Pho tai add-on: Add 4–6 oz paper-thin raw eye of round to each bowl and pour boiling broth directly over to cook just to medium-rare.
Storage & Make-Ahead
Broth keeps 5 days refrigerated or 3 months frozen. Cool quickly: within 2 hours to 70°F, then to 40°F by 4 hours. Store cooked, sliced meats separately up to 3 days (or freeze up to 2 months). Reheat broth to a simmer before serving and blanch fresh noodles to order. Keep herbs and sprouts dry and crisp; prep the day of serving for best texture.
Nutrition (per serving)
Approximate for 1 of 6 bowls: 620 calories; 35 g protein; 17 g fat; 82 g carbohydrates; 1250 mg sodium. Values will vary based on noodle brand, fat trimming, and seasoning to taste.
