This firni recipe sets six shallow bowls of rice flour pudding in whole milk, scented with 0.1 g of saffron — around 50 threads — plus cardamom and a little rosewater. Twenty-five minutes of stirring at the stove, then three hours in the fridge. It thickens considerably as it cools.
What makes firni different from other milk puddings?
The rice is ground. That is the whole distinction, and it changes everything about the texture. Kheer is made with whole grains simmered until they collapse, so you eat it and feel the rice; firni uses rice flour whisked into cold milk as a slurry, so it sets as one smooth, silky mass with no grain at all.
It is served cold, in shallow bowls rather than deep ones, which is not fussiness. A wide, shallow surface cools faster, sets more evenly, and gives you more room for the pistachios and rose petals that go on top. In Afghan homes it turns up at Eid, at weddings and through Ramadan.
Saffron here is not a novelty addition — unlike a panna cotta or a brulee, this is a dish that has been made with saffron for a very long time. Rice flour and milk are a mild, almost blank base, and saffron plus cardamom is what turns them into something worth chilling for three hours.
How much saffron does firni need?
0.1 g, about 50 threads, for a quart of milk feeding six. Firni is sweet and rich but not fatty in the way a cream custard is, so saffron comes through more readily and you do not need to overdose it. Fifty threads gives you clear colour and a scent you notice as the bowl comes towards you.
Take 2 tablespoons of the milk out of the measured quart, warm it to about 150°F (65°C) — steaming, no bubbles — and pour it over the threads in a small cup. Cover and leave for 15 to 20 minutes. Using milk from the batch means you are not adding liquid or diluting the set.
Stir that bloom in at the very end, once the pan is off the heat. Saffron added at the start spends twenty-five minutes over a burner and arrives at the table as colour with the aroma boiled out of it. Add it last and you get both. The same principle applies to the rosewater, which is even more fragile. If you are unsure whether your threads are still good, a bloom that stays pale after twenty minutes is the tell — how to spot fake saffron covers the other signs, and our Herat threads are sorted by hand from a single harvest.
What will you need on hand?
- 4 cups (950 ml) whole milk, divided
- 0.1 g saffron (about 50 threads)
- 1/3 cup (50 g) fine white rice flour
- 1/2 cup (100 g) granulated sugar
- 1/2 tsp ground cardamom, from about 8 green pods
- A pinch of fine sea salt
- 1 tbsp rosewater
- 2 tbsp shelled pistachios, slivered
- 1 tbsp blanched almonds, slivered
- Dried rose petals, to finish (optional)
How is it cooked?
- Bloom the saffron. Warm 2 tbsp of the milk to about 150°F (65°C) and pour it over the threads in a small cup. Cover and set aside for 15 to 20 minutes. It should turn a deep orange.
- Make the slurry. Whisk the rice flour into 1 cup of the cold milk until completely smooth, with no lumps clinging to the sides of the bowl. Cold milk is essential: rice flour hitting hot milk seizes into pellets.
- Heat the rest of the milk. Bring the remaining milk to a bare simmer in a heavy 3-quart saucepan over medium heat, stirring now and then so the bottom does not catch. A thin pan scorches, and that burnt taste goes right through the pudding.
- Whisk in the slurry. Turn the heat to low. Pour the slurry in a thin stream into the simmering milk, whisking constantly. Keep whisking for the first two minutes, until the mixture is uniform and just starting to thicken.
- Cook it down. Cook on low for 12 to 15 minutes, stirring the whole time with a flat-edged spatula and scraping the corners of the pan. It is ready when it coats the spatula and falls in a thick ribbon — roughly the body of double cream. Stop there. It will set much firmer in the fridge.
- Sweeten. Stir in the sugar, cardamom and salt and cook for 3 minutes more, until the sugar has completely dissolved and the pudding loosens slightly then thickens again.
- Finish off the heat. Take the pan off the heat. Stir in the saffron milk with its threads and the rosewater. Taste it now, while it is warm, remembering that cold will mute the sweetness by a noticeable margin.
- Chill in shallow bowls. Pour into six shallow bowls, about 1 inch deep, and let them cool at room temperature for 30 minutes. If you dislike the skin that forms, press cling film onto the surface. Refrigerate at least 3 hours.
- Garnish and serve. Scatter with slivered pistachios, almonds and a few rose petals just before serving. Adding nuts before chilling softens them. Firni keeps two days covered in the fridge.
Why does firni turn out lumpy or grainy?
Because the rice flour met hot milk. There is no recovery from this once it happens — the starch gelatinises on contact and forms tight pellets. Always make the slurry with cold milk, whisk it smooth, and pour it into the pan in a steady stream while whisking rather than tipping it in at once.
Scorching is the other common ruin. Milk sugars settle and catch at the join between the base and the side of the pan, which is exactly where a spoon tends not to reach. Use a heavy-bottomed pan, keep the heat low once the slurry is in, and use a flat-edged spatula that scrapes the corners.
Overcooking is subtler. Firni thickens a great deal as it chills, so a pudding that looks correct in the pan will be stiff and pasty in the bowl. Pull it while it still pours easily off the spatula. If it has gone too far, whisk in a splash of warm milk before it cools.
And do not boil after the rosewater goes in. Two minutes of heat will take a floral top note and turn it soapy. The same is true of the saffron, which is why both go in with the burner already off. Our list of common saffron mistakes has more on where good threads get wasted.
Frequently asked questions
What is the difference between firni and kheer?
Firni is made with ground rice or rice flour and sets smooth and silky, served cold in shallow dishes. Kheer uses whole rice grains simmered in milk until they break down, so it stays looser and you can feel the rice. They share the same seasonings, but the texture and serving temperature differ.
Can I use cornstarch instead of rice flour?
It will thicken, but it is a different dessert. Cornstarch sets glossy and slightly bouncy, where rice flour gives the soft, slightly chalky body that makes firni what it is. If you have no rice flour, grind 1/3 cup of raw basmati in a spice grinder and sieve it — that is how it was made before packet flour existed.
Does firni have to be served cold?
It is traditionally chilled and eaten cold, and the texture is at its best that way. Warm firni is pleasant but loose, closer to a thick custard. If you want it warm, cook it two minutes longer and accept that the saffron and rosewater will smell stronger and taste less distinct.
Can I make it with a plant milk?
Oat milk works best of the alternatives, since it has enough body to carry the starch. Almond milk is thin and gives a watery set, so add another tablespoon of rice flour. Coconut milk sets well but its own flavour will sit in front of the saffron, which rather defeats the point of spending fifty threads.
Read next
- Saffron halwa, the other end of the Afghan sweet table.
- Saffron pistachio ice cream, the same flavour family, frozen.
- Inside the Herat saffron harvest, on where these threads come from.
- Grinding saffron properly, for when you want powder rather than threads.



