Osso Buco (Osso Buco alla Milanese) — Milanese Braised Veal Shanks
Osso buco alla Milanese is a Lombard braise of cross-cut veal shanks cooked slowly with onion, wine, and stock until the marrow-rich bones perfume the sauce. It is traditionally finished with bright gremolata and served with risotto alla Milanese.

Printable Recipe Card
Servings: 4 · Total: 145 min · Difficulty: medium
Ingredients (quick list)
- 4 veal shanks (cross-cut, about 4 cm thick and 340 g each)
- 8 g fine sea salt
- 1 tsp black pepper (freshly ground)
- 40 g all-purpose flour
- 30 g unsalted butter
- 30 ml extra-virgin olive oil
- 1 yellow onion (about 180 g, finely chopped)
- 1 carrot (about 90 g, finely chopped)
- 1 stalk celery (about 60 g, finely chopped)
- 250 ml dry white wine
- 500 ml veal stock (unsalted chicken stock may also be used)
- 1 leaf bay leaf
+ 4 more in the full ingredients section below.
Steps (summary)
- Pat the veal shanks completely dry with paper towels, then tie each one around the middle with kitchen twine so the meat holds…
- Heat a heavy Dutch oven over medium-high heat and add the butter and olive oil. When the butter foams and the fat is hot, brown…
- Transfer the browned shanks to a plate and reduce the heat to medium. Add the onion, carrot, and celery to the same pot and coo…
- Pour in the white wine and bring it to a lively simmer, scraping up the browned bits from the base of the pot. Cook for 5 minut…
- Return the veal shanks to the pot in a single layer and add the stock, bay leaf, and thyme. The liquid should come about halfwa…
- Cover the pot, reduce the heat to low, and simmer very gently for 90 to 110 minutes. Turn the shanks every 30 minutes and keep…
+ 2 more steps in the full instructions section below.
Cultural Background
A signature dish of Milan and Lombardy, osso buco celebrates cucina regionale through economical bone-in cuts transformed by patient braising. Its classic partner, saffron risotto, makes it a beloved Sunday and winter celebration meal.
Equipment
💡 Tips
- Choose veal shanks cut from the hind shank when possible, because they have a generous marrow bone and enough connective tissue to make a naturally silky sauce.
- Keep the braise below a boil; a bare simmer gives the cleanest flavor and the most tender texture.
- Add the gremolata only at the end so the parsley stays fresh, the lemon remains fragrant, and the garlic does not turn harsh.
⚠️ Common Mistakes
❌ Boiling the braise aggressively
✅ Fix: Lower the heat until the liquid barely trembles, because gentle cooking keeps the veal tender and the sauce clear.
❌ Using too much flour on the shanks
✅ Fix: Dredge lightly and shake well, since excess flour can make the sauce pasty rather than glossy.
❌ Adding gremolata early
✅ Fix: Mix and add it just before serving so the lemon zest, parsley, and garlic stay vivid.
🧊 How to Store
Cool leftovers within 2 hours, then refrigerate the shanks and sauce together in an airtight container for up to 3 days. Reheat gently in a covered pan with 30 ml stock until hot, and add fresh gremolata only after reheating.
📅 Make Ahead
Braise the shanks 1 day ahead and refrigerate them in their sauce. Reheat gently, reduce the sauce as needed, and prepare the gremolata fresh just before serving.
🍽️ Pairs Well With
- Risotto alla Milanese
- soft polenta
- mashed potatoes
- sautéed spinach
- crusty bread.
Regional Variations
- The most restrained Milanese versions are cooked in bianco, without tomato, emphasizing wine, stock, onion, and gremolata.
- Some modern Lombard and restaurant versions add a small amount of tomato paste or chopped tomato for color and sweetness.
- Outside Lombardy, beef shank or pork shank may replace veal, producing a heavier but satisfying braise.
Ingredients
- 4veal shanks (cross-cut, about 4 cm thick and 340 g each)
- 8 gfine sea salt
- 1 tspblack pepper (freshly ground)
- 40 gall-purpose flour
- 30 gunsalted butter
- 30 mlextra-virgin olive oil
- 1yellow onion (about 180 g, finely chopped)
- 1carrot (about 90 g, finely chopped)
- 1 stalkcelery (about 60 g, finely chopped)
- 250 mldry white wine
- 500 mlveal stock (unsalted chicken stock may also be used)
- 1 leafbay leaf
- 3 sprigfresh thyme
- 2 tsplemon zest (finely grated)
- 12 sprigflat-leaf parsley (leaves finely chopped)
- 1 clovegarlic (very finely minced)
🔄 Substitutions
- veal shanks→ beef shanks
- dry white wine→ 250 ml unsalted chicken stock plus 15 ml white wine vinegar
- all-purpose flour→ rice flour
Instructions
- 1
Pat the veal shanks completely dry with paper towels, then tie each one around the middle with kitchen twine so the meat holds its shape during the long braise. Season the shanks on all sides with the measured salt and pepper, then dredge them lightly in the flour and shake off every visible excess.
- 2
Heat a heavy Dutch oven over medium-high heat and add the butter and olive oil. When the butter foams and the fat is hot, brown the veal shanks for about 4 minutes per side until deeply golden, working in batches if needed so the pan is not crowded.
- 3
Transfer the browned shanks to a plate and reduce the heat to medium. Add the onion, carrot, and celery to the same pot and cook for 8 minutes, scraping the bottom often, until the vegetables are soft and lightly golden but not browned hard.
- 4
Pour in the white wine and bring it to a lively simmer, scraping up the browned bits from the base of the pot. Cook for 5 minutes, or until the wine is reduced by about half and the raw alcohol aroma has softened.
- 5
Return the veal shanks to the pot in a single layer and add the stock, bay leaf, and thyme. The liquid should come about halfway up the shanks, so use a snug pot and avoid fully submerging the meat.
- 6
Cover the pot, reduce the heat to low, and simmer very gently for 90 to 110 minutes. Turn the shanks every 30 minutes and keep the braise at a quiet tremble, because boiling will toughen the veal and cloud the sauce.
- 7
When the meat is fork-tender but still attached to the bone, transfer the shanks to a warm platter and remove the twine. Simmer the sauce uncovered for 8 to 12 minutes if it needs thickening, then discard the bay leaf and thyme stems.
- 8
Mix the lemon zest, parsley, and garlic together just before serving to make the gremolata. Spoon the sauce over the veal, scatter the gremolata on top, and serve immediately while the marrow is warm and the sauce is glossy.
🪪 Recipe Passport
Cultural Background
A signature dish of Milan and Lombardy, osso buco celebrates cucina regionale through economical bone-in cuts transformed by patient braising. Its classic partner, saffron risotto, makes it a beloved Sunday and winter celebration meal.
Regional Variations
Researched from multiple sources and validated by the Zaffaron editorial team. Every recipe is tested for accuracy, measurements, and cultural authenticity.
📚 Sources & Cultural References
- Marcella Hazan — Essentials of Classic Italian Cooking — (1992)
- Accademia Italiana della Cucina — La Cucina: The Regional Cooking of Italy — (2009)
Sources cited by the Zaffaron editorial team during recipe research. Cultural and culinary references supporting authenticity claims.
Nutrition per serving
Pairs well with
If you enjoyed this recipe, here are a few related Zaffaron recipes to try next.
- Risotto alla Milanese (Risotto alla Milanese) — Saffron-Rich Milanese Rice
- Spaghetti Carbonara (Spaghetti alla Carbonara) — Roman Pasta with Eggs, Pecorino, and Guanciale
- Tiramisu (Tiramisù) — Classic Coffee-Mascarpone Layered Dessert
- Eggplant Parmesan (Melanzane alla Parmigiana) — Southern Italian Baked Eggplant
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

Spaghetti Carbonara (Spaghetti alla Carbonara) — Roman Pasta with Eggs, Pecorino, and Guanciale
Italian · Main Courses · 30 min

Eggplant Parmesan (Melanzane alla Parmigiana) — Southern Italian Baked Eggplant
Italian · Main Courses · 100 min

Risotto alla Milanese (Risotto alla Milanese) — Saffron-Rich Milanese Rice
Italian · Rice Dishes · 43 min

Swedish Potato Pancakes with Pork (Raggmunk med fläsk) — Crispy Husmanskost with Lingonberries
Swedish · Main Courses · 55 min

Chips and Egg Omelet (Chipsi Mayai) — Tanzanian Street-Food Classic
Tanzanian · Main Courses · 50 min

Chicken Souvlaki (Κοτόπουλο Σουβλάκι) — Greek Lemon-Oregano Grilled Skewers
Greek · Kebabs · 30 min

Beef Bourguignon (Bœuf Bourguignon) — Burgundy Red Wine Beef Stew
French · Stews · 255 min

Tiramisu (Tiramisù) — Classic Coffee-Mascarpone Layered Dessert
Italian · Desserts · 35 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.