Main Courses
This bulalo pork recipe brings the heart of Filipino comfort food to your kitchen—a rich, slow-braised beef shank stew where tender meat melts in a fragrant coconut gravy. 🌟 After years of perfecting braising techniques, I’ve developed a method that delivers restaurant-quality results at home, with deep umami flavors and melt-in-your-mouth beef.
The secret lies in the long, gentle simmer that transforms tough shanks into succulent bites while infusing the broth with layers of garlic, ginger, and coconut milk.
The beauty of bulalo pork is its simplicity—just a few key ingredients work together to create something extraordinary.
You’ll need beef shanks (the tougher the cut, the more tender it becomes), fresh vegetables like cabbage and potatoes to soak up the flavorful broth, and aromatic spices that build complexity over time.
Unlike quick stews, this dish rewards patience, with a cooking time of 3-4 hours that develops a rich, velvety sauce. The result? A dish that’s hearty enough for a family gathering but refined enough for a special occasion.
What makes this recipe truly special is how it captures the soul of Filipino home cooking—the balance of sweet, savory, and slightly tangy flavors that come together in every bite. The coconut milk adds a luxurious creaminess, while the vegetables absorb the deep, caramelized essence of the beef.
This isn’t just a stew; it’s a celebration of slow cooking, where every ingredient plays a part in creating something greater than the sum of its parts.
Serve it steaming hot over a bed of fluffy jasmine rice, garnished with fresh herbs and a sprinkle of black pepper. The leftovers? Even better the next day, as the flavors deepen and the broth becomes even more velvety.
Whether you’re cooking for a crowd or treating yourself to a taste of the Philippines, this bulalo pork recipe is a game-changer that will become a staple in your kitchen.
Ingredients for bulalo pork
Six hearty ingredients transform into melt-in-your-mouth beef shanks simmered in fragrant coconut gravy.
| Ingredient | Amount | Notes |
|---|---|---|
| Beef Shanks 🥩 | 3 lb | Bone-in for maximum flavor |
| Green Cabbage 🥬 | 1 small | Whole head, cut into wedges |
| Russet Potatoes 🥔 | 2 lb | Medium-sized, peeled and quartered |
| Garlic Cloves 🧄 | 10 cloves | Minced for depth of flavor |
| Fresh Ginger 🌿 | 2 tbsp | Grated, for aromatic warmth |
| Coconut Milk 🥥 | 2 cans | Full-fat for richness (13.5 oz each) |
| Onion 🧅 | 1 whole | Yellow, chopped into chunks |
| Tomatoes 🍅 | 2 large | Roma, diced (or 1 can crushed) |
| Bay Leaves 🌿 | 2 whole | For subtle herbal notes |
| Salt 🧂 | 1 ½ tbsp | Kosher or sea salt |
| Black Peppercorns 🌶️ | 1 tsp | Coarsely crushed |
| Soy Sauce 🍶 | 2 tbsp | For umami depth |
| Olive Oil 🫒 | 2 tbsp | For initial searing |
| Fresh Cilantro 🌿 | ¼ cup | Chopped, for garnish |
| Lime 🍋 | 1 whole | Juiced, for bright finish |
The beef shanks are non-negotiable here—bone-in cuts from the butcher section give the richest flavor. Costco or local Asian markets often have them pre-cut, but if you're buying whole, ask for the chuck or shank end. Look for good marbling and avoid anything that smells funky. The cabbage and potatoes should be firm and heavy for their size—no wilted leaves or sprouting eyes. For the coconut milk, full-fat is a must—the lighter versions just won't give that luxurious texture. I always grab two cans at Trader Joe's because they're affordable and reliable.
No fresh ginger? Powdered works at half the amount, but trust me, fresh makes all the difference. Running short on soy sauce? Coconut aminos or tamari are great swaps—they've got that same umami punch. The tomatoes can be fresh or canned (I use San Marzano if I'm splurging), but if you're using fresh, make sure they're ripe and juicy. No lime? Lemon juice works too, though it's a little more tart. The bay leaves are easy to find in the spice aisle—just grab a few extra since they're cheap and last forever. And if you're worried about the cabbage being too much, don't be—it soaks up all the flavor like a sponge.
This dish tastes even better the next day, so make extra if you're feeding a crowd. Store leftovers in the fridge for 4-5 days or freeze for 3 months—the broth actually gets richer over time. For reheating, just warm on the stove with a splash of water or coconut milk. The potatoes and cabbage will soften perfectly, and the beef stays tender. If you're prepping ahead, you can even par-cook the beef and veggies separately, then combine and simmer when ready to serve. Just don't skip the final 30 minutes of simmering—it's when all the magic happens.
Why You'll Love This Recipe
- Here’s what sold me: a whole meal for under $15, feeding four with leftovers. Beef shanks stretch forever, potatoes and cabbage fill you up, and you’re not buying fancy ingredients. It’s the kind of dish that makes you feel like you’re treating yourself—without the guilt.
- One-Pot Magic: I swear by this recipe because it’s one pot—no chopping boards, no extra pans, just beef shanks simmering with potatoes and cabbage until everything falls apart. The only prep is peeling potatoes and slicing ginger, and honestly? That’s half the battle won.
- Deep, Rich Satisfaction: Between us, this isn’t just "good"—it’s ridiculously good. The beef shanks get fork-tender with a dark, caramelized crust, while the potatoes soak up all that garlicky, ginger-spiked broth. Every bite is a mix of crispy, creamy, and savory that makes you forget to check your phone.
- Leftovers That Beg for More: I make this on Sundays and still have containers by Wednesday. The flavors only get better the next day—beef even more tender, broth richer. Pack it for lunch or reheat for dinner, and trust me, no one will complain (even my picky teenagers).
Step-by-step instructions for slow-braised beef shanks
Let's make this rich, coconut-infused Filipino classic with tender beef that falls apart.
🔥 Step 1: Sear the Beef Shanks for Deep Flavor
Pat the 3 lb beef shanks completely dry with paper towels—this helps create that signature crispy exterior. Heat 2 tbsp olive oil in a heavy Dutch oven over medium-high heat until shimmering. Working in batches if needed, add the shanks and sear for 3-4 minutes per side until they develop deep golden-brown crusts.
Don't rush this step—the crust locks in juices and builds flavor. I like to press down gently on the shanks during the first minute to prevent curling. Once all shanks are browned, remove them and set aside on a plate.
🍳 Step 2: Build the Aromatic Base
In the same Dutch oven, add the 1 whole chopped onion and cook for 5 minutes until softened. Stir in the 10 minced garlic cloves and 2 tbsp grated fresh ginger, cooking for 1 minute until fragrant—this prevents bitter flavors. Add the 2 diced large tomatoes and cook for 3 more minutes until they break down.
Here's where the magic happens: sprinkle in the 1.5 tbsp salt and 1 tsp coarsely crushed black peppercorns, then add the 2 whole bay leaves. Pour in the 2 tbsp soy sauce and scrape up all those delicious browned bits from the bottom of the pot.
🥘 Step 3: Slow Braise with Coconut Milk
Return the seared shanks to the pot and pour in the 2 cans coconut milk, stirring to combine. The mixture should come about halfway up the shanks. Bring to a gentle simmer over medium-low heat, then cover and let it cook for 1 hour 30 minutes. This slow cooking breaks down the collagen in the beef, turning it fork-tender.
I know it seems like a long time, but trust me—this is where the beef transforms from tough to melt-in-your-mouth tender. After 1 hour, check the liquid level and add ½ cup water if needed to keep the shanks submerged. The sauce should reduce slightly but remain rich and creamy.
🥘 Step 4: Add Vegetables for Perfect Texture
After the initial braising time, add the 2 lb peeled and quartered russet potatoes and 1 small green cabbage cut into wedges. The potatoes need about 45 minutes to cook through, while the cabbage will soften in the remaining time. Stir everything gently to distribute the sauce evenly.
This is the moment that matters: the vegetables should be tender but still hold their shape—no mushy potatoes here. If the sauce gets too thin, uncover and simmer for 10 minutes to reduce it slightly. The cabbage should be bright green and slightly crisp, not limp.
🍽️ Step 5: Finish and Serve with Fresh Garnishes
Once the vegetables are tender and the beef is fork-tender (a knife should slide in easily), remove the bay leaves. Stir in the juice of 1 whole lime and let it simmer for 2 minutes to brighten the flavors. Taste and adjust seasoning with more salt if needed—the coconut milk can dilute the flavors.
Serve the bulalo hot, spooning the rich coconut gravy over each portion. Garnish with 0.25 cup chopped fresh cilantro for a pop of freshness. The beef should be so tender it practically falls apart with a gentle tug, and the cabbage should still have a satisfying bite. Pair with steamed rice to soak up every last drop of that creamy sauce!
Pro Tips For Making Bulalo Pork
- Brown the Shanks First: Don’t skip the sear—get those beef shanks golden in a hot pot before adding liquid. I used to rush this, and the broth stayed pale and weak. Two minutes per side with oil and garlic makes all the difference—trust me, the flavor builds on that crust.
- Cut Potatoes in Halves: Russets break apart when boiled, so halve them lengthwise (skin on) before adding to the pot. They’ll hold shape better and absorb the broth’s richness without turning to mush. Yes, it’s less dramatic-looking, but it’s the only way they stay intact.
- Simmer Low and Slow: Bulalo isn’t a race—keep the heat at a gentle simmer (tiny bubbles, not rolling) for at least 2 hours. I learned this after one disastrous batch where I cranked the heat and ended up with chewy shanks and watery potatoes. Patience here guarantees tender meat and flavorful broth.
- Add Cabbage Late: Toss the green cabbage in only in the last 15 minutes—it wilts fast and soaks up the broth like a sponge. If you add it early, it’ll turn to sad, limp leaves instead of holding its crunch. (Your future self will thank you.)
Troubleshooting this recipe
Meat Too Tough?
If your beef shanks aren't tender enough after 3 hours of braising, extend the cooking time by 30-60 minutes—patience is key. I've found that adding ½ cup beef broth halfway through helps break down collagen faster.
For extra tenderness, try pressure cooking for 90 minutes on high pressure, then finish with 15 minutes of natural release. 💪
Sauce Too Thin?
When the coconut milk makes the sauce too thin, uncover the pot and simmer uncovered for 10-15 minutes to reduce it. For a thicker consistency, mix 1 tbsp cornstarch with 2 tbsp water, stir into the sauce, and cook for 2 minutes until it thickens.
Avoid over-reducing—you want a velvety, not gluey, texture.
Vegetables Overcooked?
Add potatoes and cabbage only in the last 45 minutes of cooking to prevent mushiness. For extra crisp-tender veggies, blanch potatoes in boiling water for 3 minutes before adding them to the stew. I also recommend using wax potatoes instead of russets—they hold their shape better during long simmers. 🥔
Flavor Too Mild?
Boost umami by adding 1 tbsp fish sauce or 1 tsp oyster sauce during the final 10 minutes of cooking. For depth, toast 1 tsp coriander seeds in a dry pan until fragrant, then grind them and stir into the sauce.
A splash of calamansi juice (or extra lime) brightens the dish beautifully.
Coconut Milk Curdling?
This happens when acidic ingredients (like tomatoes) aren't cooked enough before adding coconut milk. Always cook tomatoes and aromatics for 5 minutes before adding the milk. For extra insurance, whisk the milk with 1 tbsp flour before pouring it in.
If curdling occurs, strain the sauce through a fine-mesh sieve to remove lumps. 🥥
Pot Too Small?
If your Dutch oven feels crowded, transfer the beef to a plate after searing, then cook the aromatics and sauce in a separate pot. Combine everything in the Dutch oven only for the final 30 minutes of cooking.
For large batches, use a 6-quart Dutch oven—I swear by Le Creuset for even heat distribution.
Nutrition facts
Frequently asked questions about Filipino beef stew
Can I substitute beef shanks with another cut?
While beef shanks are traditional, you can use chuck roast or short ribs as substitutes. Cut the meat into 2-inch chunks for even cooking. However, shanks are ideal—they have more connective tissue that breaks down beautifully into tender, flavorful bites during the long braise.
How do I make this dish in a slow cooker?
Transfer the seared shanks, aromatics, and sauce to a 6-quart slow cooker. Cook on low for 8 hours or high for 5 hours. Add potatoes and cabbage in the last 2 hours to prevent overcooking. The slow cooker's gentle heat ensures tender meat without drying out the sauce.
What's the best way to reheat leftovers?
Reheat gently on the stove over low heat with a splash of water or coconut milk to restore moisture. Avoid microwaving—it can make the sauce greasy. For best results, reheat only until steaming hot (165°F), then let it sit covered for 5 minutes before serving. Leftovers taste even better the next day!
Can vegetarians adapt this recipe?
For a vegetarian version, replace beef shanks with mushrooms (portobello or king oyster) and firm tofu pressed and cubed. Use vegetable broth instead of water and add 1 tbsp soy sauce for umami. The cooking time remains the same, but check vegetables at 30 minutes to prevent overcooking.
Why does my sauce sometimes separate?
This happens when acidic ingredients (like tomatoes) aren't cooked long enough before adding coconut milk. Always simmer aromatics and tomatoes for 5 minutes first. For extra stability, whisk 1 tbsp cornstarch with the coconut milk before adding. If separation occurs, stir vigorously and strain if needed for a smooth texture.
