There is something undeniably regal about shahi paneer — golden cubes of pan-fried cheese swimming in a velvety sauce perfumed with saffron, cardamom, and a whisper of rose water. This batch-prep version captures every bit of that Mughlai indulgence, with a luscious cream-and-yogurt sauce thickened with almond flour instead of the cashew paste and sugar found in restaurant versions. Each bite delivers that signature warmth from whole spices, a gentle sweetness from slow-cooked onions, and the unmistakable floral depth that only real saffron can provide.

With 46 grams of fat and just 7 grams of net carbs per generous serving, this shahi paneer is tailor-made for a ketogenic diet. The paneer itself contributes a solid 21 grams of protein, while the ghee, heavy cream, and yogurt keep your fat macros firmly in the ideal range. There are no hidden starches, no flour-based thickeners, and no added sugar — just real, whole-food ingredients doing what they do best.

Best of all, this recipe is designed for batch cooking. Make one pot on Sunday evening and you have four satisfying dinners portioned and ready to reheat throughout the week. The sauce actually improves as it sits, letting the saffron and cardamom deepen over a few days in the fridge. Serve it over cauliflower rice, alongside keto garlic naan, or simply eat it straight from the bowl — it is that good on its own.

Ingredients (serves 4)

For the saffron cream base:

  • 1/2 cup (120ml) heavy whipping cream
  • A generous pinch of saffron threads (about 20 strands)
  • 1/4 cup (60g) full-fat plain yogurt (no added sugar)
  • 2 tablespoons (14g) almond flour

For the shahi paneer:

  • 14 oz (400g) paneer, cut into 1-inch cubes
  • 2 tablespoons (28g) ghee, divided
  • 1 small yellow onion (about 80g), finely diced
  • 3 cloves garlic, minced
  • 1-inch piece fresh ginger, finely grated
  • 1 tablespoon (16g) tomato paste
  • 1 teaspoon garam masala
  • 1/2 teaspoon ground cardamom
  • 1/2 teaspoon ground cumin
  • 1/4 teaspoon ground white pepper
  • 1/4 teaspoon ground nutmeg
  • 1/2 teaspoon fine sea salt, plus more to taste
  • 1/4 cup (60ml) warm water
  • 1/2 teaspoon rose water (optional but traditional)

For garnish:

  • 2 tablespoons (14g) sliced almonds, toasted
  • Fresh cilantro leaves
  • A few extra saffron threads

Instructions

  1. Bloom the saffron. Warm 2 tablespoons of the heavy cream in a small bowl in the microwave for 15 seconds, or in a tiny saucepan over low heat. Add the saffron threads, stir once, and set aside for at least 10 minutes. The cream will turn a vivid golden-orange — this is your flavor base, so don't skip the blooming time.

  2. Prepare the cream mixture. In a small bowl, whisk together the remaining heavy cream, yogurt, almond flour, and the bloomed saffron cream until smooth. Set aside.

  3. Pan-fry the paneer. Heat 1 tablespoon of ghee in a large, deep skillet or Dutch oven over medium-high heat. Add the paneer cubes in a single layer — work in batches if needed to avoid crowding. Fry for 2 to 3 minutes per side until golden on at least two faces. Transfer to a plate and set aside. The golden crust is essential for both texture and flavor.

  4. Cook the aromatics. Reduce heat to medium and add the remaining 1 tablespoon of ghee to the same pan. Add the diced onion and cook, stirring occasionally, for 5 to 6 minutes until softened and just beginning to turn golden at the edges. Add the garlic and ginger, stirring constantly for 60 seconds until fragrant.

  5. Build the sauce. Stir in the tomato paste, garam masala, cardamom, cumin, white pepper, nutmeg, and salt. Cook for 1 minute, stirring to coat the onions evenly with the spice mixture. The paste will darken slightly and become very aromatic.

  6. Add the cream mixture. Pour the saffron cream mixture into the pan and stir well, scraping up any browned bits from the bottom. Add the warm water and stir to combine. Bring to a gentle simmer — do not let it boil vigorously or the yogurt may split. Reduce heat to medium-low and let the sauce simmer for 5 to 6 minutes, stirring occasionally, until it thickens enough to coat the back of a spoon.

  7. Finish with paneer. Gently fold the pan-fried paneer cubes into the sauce. Simmer on low heat for 3 to 4 minutes so the paneer absorbs some of the sauce's flavor. Stir in the rose water if using — just a tiny amount adds an authentic Mughlai fragrance without tasting soapy.

  8. Taste and adjust. Check the seasoning. Add more salt if needed. The sauce should be creamy, deeply spiced, and slightly sweet from the slow-cooked onions and saffron.

  9. Garnish and serve (or portion for meal prep). Top with toasted sliced almonds, fresh cilantro, and a few saffron threads. If batch prepping, let the curry cool completely before dividing into four airtight containers. Refrigerate for up to 5 days.

  10. Reheat gently. When ready to eat, reheat a portion in a covered skillet over medium-low heat for 4 to 5 minutes, adding a splash of water or cream if the sauce has thickened too much. Alternatively, microwave for 90 seconds, stirring halfway through.

Nutrition per Serving

Nutrient Amount
Calories ~540 kcal
Fat ~46g
Protein ~21g
Total Carbs ~9g
Fiber ~2g
Net Carbs ~7g

Nutrition values are approximate and based on the stated ingredients and portions. Actual values may vary depending on specific brands and ingredient sizes used.

Tips & Variations

Toast your almonds properly. Spread the sliced almonds in a dry skillet over medium-low heat and shake the pan frequently for 2 to 3 minutes until they turn light golden and smell nutty. They go from perfect to burnt in seconds, so stay close. Toasted almonds add a crucial textural contrast to the silky sauce, and they hold up well through several days of storage.

Use block paneer, not crumbled. For this recipe, firm block paneer works far better than soft or crumbled varieties. Look for brands that hold their shape when fried — Indian grocery stores typically carry the firmest options. If your paneer is very soft, press it between paper towels under a heavy plate for 15 minutes before cubing. Firm paneer gives you those satisfying golden edges that are the hallmark of a great shahi paneer.

Watch for hidden carbs in store-bought spice blends. Some pre-mixed garam masala brands add sugar, flour, or maltodextrin as fillers. Always check the label — a proper garam masala should contain only whole ground spices. If in doubt, make your own by grinding equal parts cinnamon, cardamom, cloves, black pepper, and cumin. This small step can save you 1 to 2 grams of hidden carbs per serving.

Turn it into a complete keto dinner bowl. Serve each portion over 1 cup of cauliflower rice (adds roughly 3g net carbs) with a side of sautéed spinach in ghee. You can also pair it with keto garlic naan for a more indulgent meal. For extra fat, stir a teaspoon of butter into each reheated portion — it melts into the sauce beautifully.

Make it richer with a mekhani twist. For an even more decadent version, replace the warm water in step 6 with an additional quarter cup of heavy cream. This pushes the fat content higher and creates a sauce so thick and luxurious it barely moves when you tilt the pan. Keep in mind this adds about 50 calories and 5 grams of fat per serving, which is perfectly fine if your daily macros allow it.

Frequently Asked Questions

Is shahi paneer really keto-friendly? Traditional recipes seem high in carbs.
Traditional shahi paneer recipes are often loaded with hidden carbs from cashew paste, sugar, and sometimes even khoya (reduced milk solids). Restaurant versions can easily hit 15 to 20 grams of net carbs per serving. This recipe eliminates all of those by using almond flour as the thickener, skipping added sugar entirely, and relying on heavy cream and yogurt for richness. The result is just 7 grams of net carbs — well within keto limits — while tasting every bit as indulgent as the original. The saffron and cardamom do all the heavy lifting for flavor, not sugar.
Can I use a different cheese instead of paneer?
Halloumi is the closest substitute — it has a similar firm texture and fries beautifully without melting. The macros are comparable, though halloumi tends to be slightly saltier, so reduce the added salt by half. Extra-firm tofu works if you want a dairy-free protein, but you would lose the authentic paneer texture and would need to press it thoroughly before frying. Cottage cheese or ricotta are not suitable here as they are too soft and will dissolve into the sauce rather than holding their shape.
How well does this hold up for meal prep, and how should I store it?
This curry is an excellent meal-prep candidate. The sauce actually tastes better after a day or two as the saffron and spices continue to develop. Store individual portions in airtight glass or BPA-free containers in the refrigerator for up to 5 days. The sauce will thicken as it chills — this is completely normal. When reheating, add a tablespoon of water or cream and warm gently over medium-low heat. Avoid freezing if possible, as the paneer can become grainy and rubbery after thawing. If you must freeze, do so for no more than two weeks and thaw overnight in the refrigerator before reheating.
How can I make this vegan keto?
Replace the paneer with extra-firm tofu, pressed and cubed. Swap the ghee for coconut oil, the heavy cream for full-fat coconut cream, and the yogurt for unsweetened coconut yogurt. The saffron blooms beautifully in warmed coconut cream, so that step remains the same. The overall flavor profile shifts slightly toward coconut, but the spices are bold enough to keep it tasting authentically Indian. Check your coconut yogurt for added sugars — many brands sneak in cane sugar or tapioca starch that can spike the carb count significantly.
My sauce split or looks grainy — what went wrong?
The most common cause is overheating the sauce after adding the yogurt and cream mixture. Dairy-based sauces will curdle if they hit a rolling boil, especially when yogurt is involved. Always keep the heat at medium-low and simmer gently. If your sauce does split, remove the pan from heat immediately, add a tablespoon of cold heavy cream, and whisk vigorously for 30 seconds — this often brings it back together. Using room-temperature yogurt rather than cold yogurt straight from the fridge also reduces the risk of splitting, as the temperature shock is less dramatic.