Skip to content
Zaffaron

Shir Polow (شیر پلو) — Persian Saffron Milk Rice

Shir Polow is a celebratory Persian rice dish simmered in milk and saffron, then layered with spiced meatballs, raisins, and pistachios. Creamy, aromatic, and jewel-like, it’s ideal for festive tables.

By Zaffaron Kitchen· Published April 2, 2026 Verified Recipe
Gluten-Free Halal
Contains: dairy, eggs, tree nuts
140 min total Prep 70m · Cook 70m 6 servings 760 cal ~$3.85/serving
↓ Jump to Recipe
Shir Polow — Persian Saffron Milk Rice - authentic persian recipe

Printable Recipe Card

Servings: 6 · Total: 140 min · Difficulty: medium

Ingredients (quick list)

  • 500 g Basmati rice (rinsed until water runs mostly clear, then soaked)
  • 2000 ml Water (for parboiling the rice)
  • 18 g Fine sea salt (about 1 tablespoon; for parboiling water)
  • 1000 ml Whole milk (room temperature if possible to reduce scorching)
  • 0.5 g Saffron threads (finely crushed, then bloomed)
  • 45 ml Hot water (for blooming the saffron (3 tablespoons))
  • 60 g Unsalted butter (melted)
  • 45 ml Vegetable oil (3 tablespoons; for the pot base and steaming)
  • 120 g Plain yogurt (for a yogurt tahdig base (optional but recommended))
  • 1 large Egg yolk (for a sturdier yogurt tahdig (optional))
  • 450 g Ground beef (15–20% fat for juicier meatballs)
  • 200 g Onion (grated on the fine side, then squeezed very dry)

+ 6 more in the full ingredients section below.

Steps (summary)

  1. Rinse the basmati rice in several changes of cool water until mostly clear. Soak it in plenty of fresh water for 45 minutes at…
  2. Make the meatballs: combine ground beef, squeezed grated onion, salt, pepper, turmeric, and cinnamon. Knead vigorously for 2–3…
  3. Parboil the rice: bring 2000 ml water to a rolling boil, then stir in 18 g salt. Drain the soaked rice and add it to the pot. B…
  4. Simmer the rice in milk: in a wide pot, add 1000 ml whole milk and 250 ml water and bring to a gentle simmer over medium heat (…
  5. Stir in the bloomed saffron and 60 g melted butter, then cook 1–2 minutes more until the aroma is pronounced. Remove from heat.…
  6. Fry the meatballs: heat 30 ml vegetable oil in a skillet over medium-high heat. Add meatballs in a single layer and brown 6–8 m…

+ 4 more steps in the full instructions section below.

Cultural Background

Shir Polow is a festive Persian rice preparation that highlights saffron and dairy, ingredients often associated with hospitality and special-occasion cooking. It is commonly served for gatherings where a visually striking rice dish is valued alongside meat and sweet accents like raisins and nuts.

savorygently sweetbutterysaffron-forwardfluffy grainscreamy coatingcrisp tahdigjuicy meatballsplump raisinscrunchy nutssaffronwarm spicesbuttery dairytoasted nuts🌶 mild

Equipment

Fine-mesh sieveLarge pot for parboilingWide heavy-bottomed pot for milk simmerNonstick pot with lid (24–26 cm) for steamingSkillet for meatballsMicroplane or box grater for onionKitchen towel (for lid)Instant-read thermometer (recommended)

💡 Tips

  • To prevent scorching during the milk simmer, use a wide, heavy-bottomed pot and stir frequently, scraping the bottom and corners.
  • Squeeze grated onion very dry for meatballs; excess liquid makes them crack and steam instead of brown.
  • Bloom saffron in hot (not boiling) water and keep it covered; this preserves aroma and color.
  • If you prefer a lighter dish, use smaller meatballs (15–20 g) so each serving gets a few without feeling heavy.
  • For a crispier tahdig, increase the final low-steam time by 5–10 minutes, watching for a nutty aroma.

⚠️ Common Mistakes

  • ❌ Boiling the milk hard while simmering the rice

    💡 Why: High heat can scorch milk solids and cause curdling, giving bitter flavor and a grainy texture.

    ✅ Fix: Keep the pot at a gentle simmer and stir every 60–90 seconds; if it starts to boil, lower heat immediately and add a small splash of water.

  • ❌ Over-parboiling the rice before the milk step

    💡 Why: If the rice is too soft early, it breaks during stirring in milk and turns mushy.

    ✅ Fix: Drain when grains are flexible with a firm core (6–8 minutes). If unsure, err on the firmer side; steaming finishes the cook.

  • ❌ Skipping onion squeezing for meatballs

    💡 Why: Watery onion makes the mixture loose and can cause meatballs to fall apart or steam instead of brown.

    ✅ Fix: Grate onion, then squeeze firmly in a clean towel until very dry; add only the dry pulp to the meat.

  • ❌ Steaming on high heat for the full time

    💡 Why: The bottom can burn before the rice steams through, and the tahdig can turn bitter.

    ✅ Fix: Use medium heat only for the first 10 minutes to build steam, then reduce to low for the remainder.

🧊 How to Store

Cool leftovers within 2 hours. Refrigerate airtight for up to 3 days. Reheat covered with 1–2 tablespoons milk or water per portion in a microwave (2–3 minutes) or on the stovetop over low heat (8–10 minutes). Tahdig softens on storage; re-crisp in a dry nonstick pan over medium heat for 3–5 minutes.

📅 Make Ahead

Soak and parboil the rice up to 6 hours ahead; cool, cover, and refrigerate. Form meatballs up to 24 hours ahead and refrigerate covered. Bloom saffron up to 24 hours ahead and refrigerate; bring to room temperature before using. Steam the assembled dish just before serving for best tahdig.

🍽️ Pairs Well With

  • Shirazi salad (cucumber-tomato salad)
  • Plain yogurt with dried mint
  • Pickled vegetables
  • Fresh herbs and radishes

Regional Variations

  • Tehran-style banquet servingOften presented as a layered rice with small meatballs and a pronounced saffron color, with raisins and nuts added as a finishing garnish for contrast.
  • Northern Iran influenceMay include more dried fruit and a slightly sweeter balance, sometimes increasing raisins and adding a touch more warm spice to complement the dairy-rich rice.
family gatherings holiday meals celebrations weekend cooking
#celebration#saffron#milk-rice#tahdig#comfort-food#gluten-free

Ingredients

  • 500 gBasmati rice (rinsed until water runs mostly clear, then soaked)
  • 2000 mlWater (for parboiling the rice)
  • 18 gFine sea salt (about 1 tablespoon; for parboiling water)
  • 1000 mlWhole milk (room temperature if possible to reduce scorching)
  • 0.5 gSaffron threads (finely crushed, then bloomed)
  • 45 mlHot water (for blooming the saffron (3 tablespoons))
  • 60 gUnsalted butter (melted)
  • 45 mlVegetable oil (3 tablespoons; for the pot base and steaming)
  • 120 gPlain yogurt (for a yogurt tahdig base (optional but recommended))
  • 1 largeEgg yolk (for a sturdier yogurt tahdig (optional))
  • 450 gGround beef (15–20% fat for juicier meatballs)
  • 200 gOnion (grated on the fine side, then squeezed very dry)
  • 2 gBlack pepper (about 1 teaspoon, freshly ground)
  • 3 gGround turmeric (about 1 teaspoon)
  • 1 gGround cinnamon (about 1/2 teaspoon)
  • 120 gRaisins (golden or dark; rinsed and thoroughly dried)
  • 80 gPistachios (shelled, roughly chopped)
  • 0.5 gGround cardamom (about 1/4 teaspoon (optional but classic with saffron and milk))

🔄 Substitutions

  • Ground beef→ Ground lamb
  • Whole milk→ Lactose-free whole milk
  • Pistachios→ Slivered almonds

Instructions

  1. 1

    Rinse the basmati rice in several changes of cool water until mostly clear. Soak it in plenty of fresh water for 45 minutes at room temperature; this helps the grains lengthen and cook evenly. Meanwhile, crush the saffron threads to a powder and bloom with 45 ml hot water; cover and set aside.

  2. 2

    Make the meatballs: combine ground beef, squeezed grated onion, salt, pepper, turmeric, and cinnamon. Knead vigorously for 2–3 minutes until tacky and cohesive. With wet hands, form 24 small meatballs (about 25 g each). Refrigerate 15 minutes to firm up while you bring the rice water to a boil.

  3. 3

    Parboil the rice: bring 2000 ml water to a rolling boil, then stir in 18 g salt. Drain the soaked rice and add it to the pot. Boil 6–8 minutes, stirring gently once or twice, until the grains are flexible with a firm core. Drain immediately and rinse briefly with cool water to stop cooking.

  4. 4

    Simmer the rice in milk: in a wide pot, add 1000 ml whole milk and 250 ml water and bring to a gentle simmer over medium heat (do not boil hard). Stir in the parboiled rice and cook 10–12 minutes, stirring every 60–90 seconds, until most liquid is absorbed and the rice is creamy but still holds its shape.

  5. 5

    Stir in the bloomed saffron and 60 g melted butter, then cook 1–2 minutes more until the aroma is pronounced. Remove from heat. The rice should look moist, not soupy; if it seems dry, splash in 30–60 ml warm milk. If it seems wet, return to low heat and stir for 2 minutes to reduce.

  6. 6

    Fry the meatballs: heat 30 ml vegetable oil in a skillet over medium-high heat. Add meatballs in a single layer and brown 6–8 minutes total, turning to color all sides. Reduce heat to medium, cover, and cook 4–5 minutes until cooked through (about 71°C/160°F inside). Transfer to a plate.

  7. 7

    Prepare the topping: in the same skillet, melt 20 g butter over medium-low heat. Add raisins and sauté 60–90 seconds just until plump (do not burn). Stir in pistachios and cardamom and warm 30 seconds. Remove from heat; the nuts should stay green and fragrant, not toasted dark.

  8. 8

    Set up the tahdig and steam: in a nonstick pot (24–26 cm), mix yogurt and egg yolk (if using). Add 45 ml vegetable oil and 2–3 tablespoons of the milk-saffron rice to loosen, then spread evenly on the bottom. Layer in the remaining rice, then tuck meatballs throughout in 2–3 layers.

  9. 9

    Steam the rice: use the handle of a spoon to poke 5–6 holes down to the bottom for steam vents. Cover the lid with a clean towel and place on the pot. Steam over medium heat for 10 minutes to build steam, then reduce to low and steam 35–40 minutes until the tahdig sets and the rice is fluffy.

  10. 10

    Serve: turn off heat and rest 10 minutes. Spoon out the rice and meatballs onto a platter. For tahdig, loosen edges with a thin spatula, then invert onto a plate. Scatter the raisin-pistachio topping over the rice. Serve warm; the flavor is best when the saffron aroma is still vivid.

🪪 Recipe Passport

Origin: Persian Cuisine
Researched by: Zaffaron Kitchen
Published: April 2, 2026

Cultural Background

Shir Polow is a festive Persian rice preparation that highlights saffron and dairy, ingredients often associated with hospitality and special-occasion cooking. It is commonly served for gatherings where a visually striking rice dish is valued alongside meat and sweet accents like raisins and nuts.

Regional Variations

Tehran-style banquet serving: Often presented as a layered rice with small meatballs and a pronounced saffron color, with raisins and nuts added as a finishing garnish for contrast.
Northern Iran influence: May include more dried fruit and a slightly sweeter balance, sometimes increasing raisins and adding a touch more warm spice to complement the dairy-rich rice.

Researched from multiple sources and validated by the Zaffaron editorial team. Every recipe is tested for accuracy, measurements, and cultural authenticity.

Share:

Nutrition per serving

760
Calories
28g
Protein
32g
Fat
88g
Carbs
3.5g
Fiber
780mg
Sodium

Pairs well with

If you enjoyed this recipe, here are a few related Zaffaron recipes to try next.

Does your family make this differently?

Every family has their own version. Maybe your grandmother adds a secret ingredient, or your aunt has a completely different technique. Preserve your family's version — with their name on it, forever.

You Might Also Like

Reviews

—
Rated 0.0 out of 5 stars
0 reviews

Cooked this recipe?

Tap the stars to rate it — that's all it takes. A few words are welcome but optional.

Please sign in to rate this recipe.
Rated 0.0 out of 5 stars

No ratings yet. Cooked this one? Be the first to rate it — it takes one tap.