Khoresht-e Mahi (خورشت ماهی) — Persian Sour Fish Stew with Dried Lime
A bright Southern Iranian fish stew built on tomatoes, garlic, dried lime, and a sweet-sour balance of lemon juice and vinegar. Firm white fish gently poaches in the tangy sauce and is best served with saffron basmati rice.

Printable Recipe Card
Servings: 4 · Total: 70 min · Difficulty: medium
Ingredients (quick list)
- 600 g Firm white fish fillets (cod, haddock, halibut, or grouper), skinless (cut into 5 cm pieces; pat very dry)
- 6 g Fine sea salt (divided)
- 1 tsp Ground black pepper (divided)
- 1 tsp Turmeric powder (for seasoning the fish and sauce)
- 15 g All-purpose flour (optional, for lightly dusting fish to help it hold together)
- 60 ml Olive oil (divided)
- 250 g Yellow onion (finely chopped)
- 18 g Garlic (about 6 cloves, minced)
- 500 g Tomatoes (ripe, grated or finely crushed)
- 30 g Tomato paste (for deeper color and body)
- 1.5 tsp Dried thyme
- 2 tsp Ground dried lime (limoo amani powder) (add more to taste at the end)
+ 4 more in the full ingredients section below.
Steps (summary)
- Prepare the fish: pat pieces very dry. Season with 3 g salt, 1/2 tsp black pepper, and 1/2 tsp turmeric. If using flour, dust l…
- Build the base: heat 45 ml olive oil in a wide pot over medium heat. Add onion and cook 10–12 minutes, stirring, until soft and…
- Cook the tomatoes: stir in grated tomatoes and tomato paste. Cook 8–10 minutes over medium-high, stirring often, until the mixt…
- Season sour and sweet: add ground dried lime, sugar, vinegar, lemon juice, remaining 3 g salt, and 360 ml water. Bring to a gen…
- Sear the fish (recommended): heat remaining 15 ml olive oil in a nonstick skillet over medium-high. Sear fish in a single layer…
- Poach gently: slide fish into the simmering sauce in one layer. Reduce heat to the lowest setting so the surface barely tremble…
+ 1 more steps in the full instructions section below.
Cultural Background
Sour fish stews are associated with Iran’s southern coastal cooking, where seafood and bright, acidic flavors are common. Dried limes are a hallmark ingredient in many Persian stews, valued for their distinctive tart, slightly earthy aroma. This dish is often served with rice to balance the lively sauce.
Equipment
💡 Tips
- Choose firm, low-fat white fish; very delicate fish can break during simmering.
- Grating tomatoes creates a smooth sauce without needing a blender; canned crushed tomatoes can replace fresh when out of season.
- Ground dried lime varies in intensity; add most early for depth, then fine-tune at the end for aroma.
- Keep the stew at a bare simmer once fish is added; vigorous boiling makes fish tough and causes it to fall apart.
- For a thicker sauce, simmer the tomato base a few minutes longer before adding water.
⚠️ Common Mistakes
❌ Boiling the stew after adding the fish
💡 Why: High heat makes fish tough and causes it to break apart in the sauce.
✅ Fix: Keep the pot at a bare simmer; cover and cook gently, moving the pot by shaking rather than stirring.
❌ Adding all the dried lime at the end
💡 Why: It can taste harsh and powdery without time to bloom and integrate.
✅ Fix: Add most during the simmer so it mellows, then adjust with a small amount at the end for aroma.
❌ Using watery tomatoes and not reducing the base
💡 Why: The stew can end up thin and flat rather than glossy and concentrated.
✅ Fix: Cook tomatoes and paste until the mixture darkens and oil separates, then add water and simmer to the desired thickness.
❌ Skipping drying the fish
💡 Why: Moisture prevents good searing and can dilute the sauce near the fish, making it more likely to fall apart.
✅ Fix: Pat fish thoroughly dry; if needed, rest uncovered in the fridge 20 minutes before cooking.
🧊 How to Store
Cool quickly and refrigerate in an airtight container for up to 2 days. Reheat gently over low heat until just hot; avoid boiling to prevent the fish from breaking and drying out. Freezing is not ideal because the fish can become grainy, but it can be frozen up to 1 month if necessary.
📅 Make Ahead
You can cook the sauce (without fish) up to 2 days ahead and refrigerate. Reheat to a gentle simmer, then add fish and poach fresh just before serving for the best texture.
🍽️ Pairs Well With
- Saffron-infused basmati rice
- Fresh herbs (mint
- basil
- cilantro) and radishes
- Pickled vegetables or a simple cucumber salad
Regional Variations
- Bushehr and Persian Gulf coastOften kept boldly sour with extra citrus and served with plenty of fresh herbs; some cooks use very firm local fish and keep the sauce relatively thin for spooning over rice.
- Hormozgan (Bandar-style)May lean more aromatic with additional dried herbs and a slightly sweeter balance to round the acidity, especially when tomatoes are very tart.
Ingredients
- 600 gFirm white fish fillets (cod, haddock, halibut, or grouper), skinless (cut into 5 cm pieces; pat very dry)
- 6 gFine sea salt (divided)
- 1 tspGround black pepper (divided)
- 1 tspTurmeric powder (for seasoning the fish and sauce)
- 15 gAll-purpose flour (optional, for lightly dusting fish to help it hold together)
- 60 mlOlive oil (divided)
- 250 gYellow onion (finely chopped)
- 18 gGarlic (about 6 cloves, minced)
- 500 gTomatoes (ripe, grated or finely crushed)
- 30 gTomato paste (for deeper color and body)
- 1.5 tspDried thyme
- 2 tspGround dried lime (limoo amani powder) (add more to taste at the end)
- 8 gGranulated sugar (balances acidity; adjust to taste)
- 30 mlWhite vinegar
- 45 mlFresh lemon juice (about 1–2 lemons, to taste)
- 360 mlWater (plus a little more if needed)
🔄 Substitutions
- Ground dried lime (limoo amani powder)→ Finely grated lime zest (1 tsp) + extra lemon juice (15–30 ml)
- White vinegar→ Apple cider vinegar
- Fresh tomatoes→ Canned crushed tomatoes (500 g)
Instructions
- 1
Prepare the fish: pat pieces very dry. Season with 3 g salt, 1/2 tsp black pepper, and 1/2 tsp turmeric. If using flour, dust lightly with 15 g flour and shake off excess. Rest 10 minutes at room temperature while you start the stew base.
- 2
Build the base: heat 45 ml olive oil in a wide pot over medium heat. Add onion and cook 10–12 minutes, stirring, until soft and light golden. Add garlic and cook 60–90 seconds until fragrant, keeping heat moderate so the garlic does not brown.
- 3
Cook the tomatoes: stir in grated tomatoes and tomato paste. Cook 8–10 minutes over medium-high, stirring often, until the mixture darkens slightly and the oil begins to separate at the edges. Add dried thyme, remaining 1/2 tsp turmeric, and remaining 1/2 tsp black pepper; cook 30 seconds.
- 4
Season sour and sweet: add ground dried lime, sugar, vinegar, lemon juice, remaining 3 g salt, and 360 ml water. Bring to a gentle boil, then reduce to low and simmer uncovered 15 minutes, stirring occasionally, until lightly thickened and glossy. Taste; it should be pleasantly tart but balanced.
- 5
Sear the fish (recommended): heat remaining 15 ml olive oil in a nonstick skillet over medium-high. Sear fish in a single layer for 60–90 seconds per side, just until lightly golden (not cooked through). Transfer immediately to a plate; this helps the fish stay intact during simmering.
- 6
Poach gently: slide fish into the simmering sauce in one layer. Reduce heat to the lowest setting so the surface barely trembles. Cover and cook 8–10 minutes, depending on thickness, until the fish flakes easily and reaches 63°C/145°F in the center. Avoid stirring; gently shake the pot instead.
- 7
Finish and adjust: turn off heat and rest covered 5 minutes. Taste the sauce and adjust with up to 1 tsp more ground dried lime for deeper tang, 5–10 ml more lemon juice for brightness, or 2–4 g more sugar if overly sharp. Serve hot with saffron basmati rice.
🪪 Recipe Passport
Cultural Background
Sour fish stews are associated with Iran’s southern coastal cooking, where seafood and bright, acidic flavors are common. Dried limes are a hallmark ingredient in many Persian stews, valued for their distinctive tart, slightly earthy aroma. This dish is often served with rice to balance the lively sauce.
Regional Variations
Researched from multiple sources and validated by the Zaffaron editorial team. Every recipe is tested for accuracy, measurements, and cultural authenticity.
Nutrition per serving
Pairs well with
If you enjoyed this recipe, here are a few related Zaffaron recipes to try next.
- Khoresht Karafs (خورش کرفس) — Persian Celery and Herb Stew (Miniature Style)
- Khoresht Nokhod Aloo (خورش نخود آلو) — Persian Lamb & Chickpea Stew with Dried Lime
- Kofta Tarkhan (کوفته ترخون) — Persian Tarragon-Stuffed Meatballs in Saffron Tomato Broth
- Khoresht Gojeh Sabz (خورش گوجه سبز) — Persian Green Plum & Herb Stew
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

Jeweled Rice (مرصع پلو) — Festive Persian rice with saffron chicken and jeweled fruits
Persian · Rice Dishes · 135 min

Persian-Style Pizza-Chips (خوراک چیپس و پنیر) — Street-Food Chip Bake with Chicken and Mozzarella
Persian · Main Courses · 45 min

Yatimcheh (یتیمچه) — Persian Slow-Cooked Summer Vegetable Stew
Persian · Stews · 100 min

Karelian Hot Pot (Karjalanpaisti) — Finnish Oven-Braised Meat Stew
Finnish · Stews · 230 min

Uzbek Dimlama (Dimlama) — Layered Lamb and Vegetable Stew
Uzbek · Stews · 125 min

Azerbaijani Milk Rice Porridge (Südlü Sıyıq) — Creamy Breakfast Bowl
Azerbaijani · Rice Dishes · 40 min

Keshkek (Keşkek) — Creamy Ceremonial Wheat and Lamb Stew
Turkish · Stews · 240 min

Shopska Salad (Шопска салата) — Tomato-Cucumber Salad with Sirene
Bulgarian · Salads · 20 min
Reviews
Cooked this recipe?
Tap the stars to rate it — that's all it takes. A few words are welcome but optional.
No ratings yet. Cooked this one? Be the first to rate it — it takes one tap.