A rich, fall-off-the-bone veal dish paired with creamy, golden risotto — a Milanese classic that’s luxurious and deeply satisfying.
Ossobuco alla Milanese with Saffron Risotto is the kind of dish that turns a meal into a celebration. It’s warm, soulful, and full of Italian character. While it takes some time and love, the result is absolutely worth it.
Read here best Italian food, vegetarian food in Italy, best drinks in Italy and best breakfast in Italy
Read Here Things to know before visiting Italy and how to buy a sim card in Italy.
What is Ossobuco alla Milanese?
Ossobuco literally means “bone with a hole,” referring to cross-cut veal shanks braised until tender, releasing the prized bone marrow into the sauce. It’s traditionally served with Risotto alla Milanese, a creamy saffron-infused risotto that balances the richness of the meat with its aromatic warmth.
Ossobuco alla Milanese with Saffron Risotto Ingredients – (Serves 4)

4 veal shanks, about 1.5 inches thick, tied with kitchen twine
1/2 cup all-purpose flour (for dredging)
2 tablespoons olive oil
2 tablespoons butter
1 carrot, finely diced
1 celery stalk, finely diced
1 small onion, finely diced
2 cloves garlic, minced
1/2 cup dry white wine
1 1/2 cups beef or veal broth
1 cup crushed tomatoes or passata
2 sprigs thyme
1 bay leaf
Salt and black pepper
Optional: Gremolata (for topping)
Zest of 1 lemon
1 tablespoon parsley, finely chopped
1 clove garlic, minced
Ingredients – Risotto alla Milanese:
1 cup Arborio rice
3–4 cups chicken or vegetable broth, kept warm
2 tablespoons butter
1 small shallot or onion, minced
1/4 cup dry white wine
1/4 teaspoon saffron threads, soaked in 2 tablespoons warm water
1/3 cup grated Parmigiano-Reggiano
Salt to taste
Ossobuco alla Milanese with Saffron Risotto Step-by-Step Instructions
How to Make Ossobuco
Prep the Veal
Pat shanks dry. Tie each with kitchen twine to hold their shape.
Dredge lightly in flour, shaking off excess. Season with salt and pepper.
Brown the Meat
In a heavy pot or Dutch oven, heat olive oil and butter.
Sear veal shanks until golden brown on both sides (about 3–4 minutes per side).
Remove and set aside.
Sauté the Vegetables
Add carrot, celery, onion, and garlic to the same pot.
Cook over medium heat until soft and aromatic (~8 minutes).
Deglaze & Braise
Pour in white wine, scraping the bottom of the pan.
Stir in crushed tomatoes and broth. Add thyme and bay leaf.
Return veal to the pot. Liquid should come about halfway up the sides of the meat.
Simmer Low & Slow
Cover and simmer on low heat (or 325°F oven) for 1.5 to 2 hours, turning once.
Meat is done when fall-apart tender, but still intact.
Make Gremolata (Optional but Traditional)
Mix lemon zest, parsley, and garlic. Sprinkle over the veal just before serving.
How to Make Saffron Risotto
Sauté the Aromatics
In a saucepan, melt 1 tbsp butter. Add shallot, cook until translucent.
Toast the Rice
Add Arborio rice, stirring for 1–2 minutes until edges look translucent.
Add wine and stir until absorbed.
Add Broth Gradually
Add warm broth, 1 ladle at a time, stirring constantly.
Let each addition absorb before adding the next.
Add Saffron
About halfway through, stir in saffron water.
Keep stirring and adding broth until rice is creamy and al dente (about 18–20 minutes total).
Finish with Butter and Cheese
Stir in remaining butter and Parmigiano-Reggiano.
Season with salt to taste. Let rest 1–2 minutes before serving.
To Serve
Place a scoop of saffron risotto on the plate.
Top with one veal shank, spooning over the rich tomato-wine sauce.
Finish with a sprinkle of gremolata for brightness and aroma.
Ossobuco alla Milanese with Saffron Risotto Tips for Success
Don’t skip the gremolata—it adds a fresh contrast to the richness.
Use real saffron threads, not artificial powder. Soak first for better color and flavor.
Stir risotto constantly for maximum creaminess without cream.
Tie veal shanks so they don’t fall apart during braising.
Ossobuco alla Milanese with Saffron Risotto Nutrition Info (Per Serving – 1 veal shank + risotto)
Calories: ~750
Protein: 40g
Fat: 35g
Carbs: 55g
Fiber: 3g
Sugar: 6g
Sodium: ~800mg
Wine Pairing
Red: Barolo, Barbera, Chianti Classico
White (with risotto only): Gavi, Verdicchio, Pinot Grigio
About the Author: Ruben, co-founder of Gamintraveler.com since 2014, is a seasoned traveler from Spain who has explored over 100 countries since 2009. Known for his extensive travel adventures across South America, Europe, the US, Australia, New Zealand, Asia, and Africa, Ruben combines his passion for adventurous yet sustainable living with his love for cycling, highlighted by his remarkable 5-month bicycle journey from Spain to Norway. He currently resides in Spain, where he continues sharing his travel experiences with his partner, Rachel, and their son, Han.