Fish Bhuna (Bengali-Style Fried Fish in Onion and Tomato Curry)

A change of pace from your usual fish dinner, this is great served alongside rice and a simple cucumber salad.

A ceramic plaet holding a serving of fish bhuna with a cucumber and red onion salad and white rice.

Serious Eats / Vicky Wasik

Why This Recipe Works

  • Cutting the fish into steaks ensures that it stays moist.
  • Frying the fish first gives it a crispy exterior.
  • Vinegar balances the sweetness from the onions and the heat of the chili powder.

When I was a kid, I would never turn down anything my mother smothered in a tomato and onion gravy called bhuna. Bhuna is a type of South Asian curry that’s thick and paste-like, in contrast with the usual saucy korma or makhani. It has a subtle heat from a generous dose of Kashmiri red chili powder, and a touch of acidity from tomato and vinegar.

Here, I’ve made my favorite bhuna, smothering fried fish steaks in the tomato and onion curry. The acidity of the sauce works perfectly with seafood, but the great thing about bhuna is that it works with anything. Once you get a grasp of the basic ingredients, steps, and flavors, you can swap out the fish for whatever else is in your fridge, for a flavorful dinner on the fly. It’s versatile enough to smother sweet wedges of roasted winter squash for a hearty vegetarian main, or it can even be the base for a braise of collagen-rich lamb shanks. When my fridge is looking especially bare, bhuna with hard-boiled eggs over rice can make a quick and satisfying meal.

To make the bhuna, I start by preparing the fish. Here, I’ve used dorade, but catfish works especially well; its meaty flesh can stand up to the bold curry. I like to keep smaller fish whole, deeply scoring the flesh and rubbing the seasoning into the cuts. When I have larger fish, like these, I cut them into fat, one-inch steaks. A sturdy chef’s knife or cleaver makes it easy to cut through the spine. Keeping the fish bone-in ensures that it stays moist during the cooking.

I then generously season the fish with a mixture of kosher salt, turmeric, and Kashmiri red chile powder before shallow-frying the steaks. Frying the fish gives it a crisp texture and blooms the spices, so it all ends up with a sunset glow. The fish is already mighty tasty at this stage, so I usually eat the fried head, un-smothered, as a sneaky cook's snack. Once the fish is all fried, I set it aside while I make the bhuna in the same pan. I pour off the excess oil, reserving just enough to cook the sauce.

Sautéing onions, blooming spices in oil, adding tomatoes, finishing tomato curry with fish.

Serious Eats / Vicky Wasik

I start by cooking the sliced onions until they're speckled brown. Because I’m not interested in a jammy caramelized onion, I sauté them over high heat, so they brown while still maintaining some structural integrity. This develops some of the onions' sweetness while maintaining a little of their bite.

After that, I add the spices and cook until they bloom and become aromatic before adding the diced tomatoes. I cook down the tomatoes until the curry becomes thick, then add a touch of vinegar for extra acidity before returning the fish to the pan, submerging it in the sauce.

A side view of a plate of fish bhuna with cucumber salad.

Serious Eats / Vicky Wasik

I serve up the smothered steaks over fluffy white rice alongside a simple cucumber and onion salad. Fish bhuna was always a favorite of mine growing up, but, as I said before, you can bhuna anything—charred cabbage wedges, snappy shell-on shrimp, or you can even use it as an upgrade to everyday roasted chicken thighs. Once you’ve made one bhuna, you can make them all.

A top-down shot of two plates of fish bhuna with rice and cucumber salad.

Serious Eats / Vicky Wasik

June 2018

Recipe Details

Fish Bhuna (Bengali-Style Fried Fish in Onion and Tomato Curry)

Active 45 mins
Total 45 mins
Serves 4 to 6 servings

A change of pace from your usual fish dinner, this is great served alongside rice and a simple cucumber salad.


  • 2 small whole head-on dorade or other flavorful white-fleshed fish, cleaned (about 3 pounds total once cleaned; 1.4kg); see note

  • 2 teaspoons (8g) Diamond Crystal kosher salt, plus more to taste

  • 2 teaspoons (4g) ground turmeric

  • 3 teaspoons (6g) Kashmiri red chile powder (or 1 teaspoon cayenne pepper), divided

  • Neutral oil, such as canola, safflower, or peanut, for frying

  • 1 medium yellow onion, thinly sliced (about 10 1/2 ounces; 300g)

  • One 2-inch piece ginger, peeled and grated (about 15g)

  • 1 bay leaf

  • 1 tablespoon (8g) ground cumin

  • 2 teaspoons (4g) ground coriander

  • 1 1/2 cups cored and diced skin-on fresh tomatoes (12 ounces; 340g), from about 3 small tomatoes

  • 1 tablespoon (15g) distilled white vinegar

  • Freshly ground black pepper

  • Chopped fresh cilantro leaves and tender stems, for garnish


  1. Remove heads from fish and cut bodies into 1-inch-thick steaks (or ask your fishmonger to do this for you; see note). In a small bowl, combine kosher salt, turmeric, and 2 teaspoons (4g) Kashmiri red chili powder. Sprinkle salt mixture all over fish.

    A three-image collage. The top left image shows a small glass bowl holding a mix of spices. The bottom left image shows a fish steak being seasoned with spices. The rightmost image shows whole, sliced fish being seasoned with spices.

    Serious Eats / Vicky Wasik

  2. Add enough oil to a large sauté pan to fill it 1/4 inch deep and heat over high heat until shimmering. Working in batches if needed, add seasoned fish steaks and cook until browned on both sides, about 10 minutes. Using a slotted spatula, transfer cooked steaks to a plate, tray, or dish and set aside.

    A stainless steel pan holding the seasoned fish steaks being fried in oil.

    Serious Eats / Vicky Wasik

  3. Drain off all but 2 tablespoons oil from sauté pan. Continuing to work over high heat, add onion and cook until browned in spots, about 5 minutes; lower heat at any point if onion threatens to burn.

    Sliced onions being fried in a stainless steel pan.

    Serious Eats / Vicky Wasik

  4. Lower heat to medium and add ginger, bay leaf, remaining 1 teaspoon (2g) chili powder, cumin, and coriander, cooking until the spices bloom, about 3 minutes. Add diced tomatoes and cook until some of the liquid has cooked off and you have a thick, paste-like curry, about 5 minutes. Finish the gravy with vinegar and season with salt and pepper to taste.

    The tomato and onion bhuna curry in a stainless steel pan.

    Serious Eats / Vicky Wasik

  5. Nestle the fried fish steaks into the curry, gently tossing to coat in the sauce. Garnish with chopped cilantro and serve.

    The seared, sliced pieces of fish tossed with the bhuna curry inside of the stainless steel pan.

    Serious Eats / Vicky Wasik

Special Equipment

Chef's knife, stainless steel sauté pan


If you don't have dorade, any other fish can work well in this dish as long as it's cut into steaks. Keeping the fish bone-in prevents it from drying out in this two-step cooking process. Good substitutes for dorade include catfish, snapper, and striped bass. You can ask your fishmonger to clean, scale, and cut the fish into steaks if you don't want to do it yourself (but keep the heads—they're a delicious snack once fried).

Nutrition Facts (per serving)
319 Calories
20g Fat
10g Carbs
25g Protein
Show Full Nutrition Label Hide Full Nutrition Label
Nutrition Facts
Servings: 4 to 6
Amount per serving
Calories 319
% Daily Value*
Total Fat 20g 26%
Saturated Fat 2g 9%
Cholesterol 42mg 14%
Sodium 597mg 26%
Total Carbohydrate 10g 3%
Dietary Fiber 2g 8%
Total Sugars 4g
Protein 25g
Vitamin C 14mg 71%
Calcium 75mg 6%
Iron 2mg 11%
Potassium 759mg 16%
*The % Daily Value (DV) tells you how much a nutrient in a food serving contributes to a daily diet. 2,000 calories a day is used for general nutrition advice.
(Nutrition information is calculated using an ingredient database and should be considered an estimate.)