Main Courses
This Filipino upo recipe with egg delivers crispy celery crowns floating atop poached eggs in a luscious, herb-infused velvety base—where homey comfort meets vibrant flavor.
I first discovered this dish during a family gathering where my tita served it with a side of tangy patis and fresh calamansi, proving how simple ingredients can create something extraordinary.
The secret lies in the slow simmering of the fish (or seafood) until it's tender, then transforming the broth into a creamy, aromatic foundation that cradles the delicate eggs.
The beauty of this recipe is its adaptability—whether you're using cod, shrimp, or even tofu for a vegetarian twist, the technique remains the same. We start by steaming the fish until it's flaky, then blending the broth with garlic, ginger, and fresh herbs to create that signature creamy texture.
The crispy celery crowns add a satisfying crunch, while the poached eggs bring rich, runny yolks that tie everything together. It's the kind of dish that feels both nostalgic and modern, perfect for weeknight dinners or special gatherings.
What makes this recipe truly special is how it balances simplicity with depth of flavor. The velvety base is infused with aromatic herbs and a touch of creaminess, while the crispy celery crowns provide texture that keeps every bite exciting.
Served with a squeeze of calamansi and a drizzle of patis, it captures the essence of Filipino comfort food—warm, flavorful, and impossible to resist. This is the kind of meal that turns ordinary weeknights into something memorable.
Ready to bring a taste of the Philippines to your table? The process is straightforward, and the result is a dish that feels like a hug in a bowl. Let's get started—your kitchen is about to smell like home.
Ingredients for upo recipe with egg
The heart of Filipino comfort—crispy celery crowns, velvety broth, and runny eggs in one bowl.
| Ingredient | Amount | Notes |
|---|---|---|
| Fresh Celery Stems 🧅 | 4 whole | Thick stems for crispy crowns |
| Large Eggs 🥚 | 4 whole | Fresh, room temperature |
| White Fish Fillets 🐟 | 1 lb | Cod or tilapia preferred |
| Garlic Cloves 🧄 | 6 cloves | Minced for velvety base |
| Fresh Ginger 🌿 | 1 ½ tbsp | Grated, aromatic variety |
| Fresh Thai Basil Leaves 🌿 | ½ cup | Packed, stems removed |
| Fresh Cilantro Leaves 🌿 | ¼ cup | Chopped, for garnish |
| Heavy Cream 🥛 | ½ cup | Full-fat for richness |
| Fish Sauce 🍶 | 1 tbsp | Red Boat preferred |
| Soy Sauce 🍶 | 1 tbsp | For umami depth |
| White Vinegar 🍶 | 1 tbsp | For poaching liquid |
| Salt 🧂 | 1 tsp | Kosher or sea salt |
| Black Pepper 🌶️ | ½ tsp | Freshly ground preferred |
| Olive Oil 🫒 | 2 tbsp | For crispy celery |
| Lemon Juice 🍋 | 1 tbsp | Freshly squeezed |
The fish is the foundation—cod or tilapia work best for their mild flavor and flaky texture. Asian markets usually carry the best quality, but your local seafood counter will do. If you can't find fresh fish, frozen fillets thawed overnight work too. The celery stems need to be thick—avoid the stringy inner stalks—and the basil should be Thai basil if you can find it, but regular basil in a pinch. I always grab extra celery because half gets chopped for the broth and the other half becomes those crispy crowns.
No Thai basil? Regular basil plus a pinch of cinnamon mimics the flavor. Short on fish sauce? Soy sauce plus a splash of Worcestershire gets you close. Want extra creaminess? Add another tablespoon of heavy cream—trust me, it's worth it. The celery crowns need to be fried just until golden—don't overcrowd the pan or they'll steam instead of crisp. And for the eggs? Room temperature eggs poach perfectly every time, while cold ones turn rubbery.
The broth keeps for 3 days in the fridge—freeze extras for up to 3 months. Celery crowns stay crisp for 2 days if stored separately in a paper towel-lined container. I always make double the broth because it's perfect over rice or noodles the next day. The eggs are best served fresh, but you can poach them ahead and reheat gently in the broth. This dish tastes even better the second day—all those flavors meld together like a hug in a bowl.
Why You'll Love This Recipe
- I swear by this rule: if it’s not celery, garlic, or ginger, I’m not stressing. That crisp celery stalk and fresh ginger? They’re the secret weapons—minimal chopping, maximum flavor. The fish and eggs do the rest.
- I’ll be real: most fish dishes turn sad overnight. Not this. The broth thickens just enough, the eggs reheat like they’re fresh, and the ginger keeps it bright. Three days in the fridge? Still a win. (Yes, even on a Tuesday night.)
Step-by-step instructions for crispy celery crowns over poached eggs
Here's how to create that perfect balance of crispy celery and silky eggs in a velvety sauce.
Prepare the Crispy Celery Crowns
First, trim the bottoms of the 4 whole fresh celery stems to create flat surfaces. Using a sharp knife, make horizontal cuts about ½-inch apart around each stem to create rings. Then make vertical cuts about ¼-inch apart to create the crown shape. You want the pieces to remain attached at the base.
Heat 2 tablespoons olive oil in a large skillet over medium-high heat until shimmering. Arrange the celery crowns in a single layer in the pan, cut-side down. Cook for 4-5 minutes until the bottoms are golden brown and crispy. Flip carefully and cook for another 3-4 minutes until both sides are perfectly crisp. Transfer to a paper towel-lined plate to drain excess oil.
Poach the Eggs to Perfection
Bring a small pot of water to a gentle simmer - you want tiny bubbles breaking the surface, not a rolling boil. Add 1 tablespoon white vinegar to help the whites set properly. Crack each of the 4 whole large eggs into a small bowl first, then gently slide them into the simmering water using a spoon.
Poach for exactly 3 minutes for runny yolks or 4 minutes for firmer yolks. You'll know they're done when the whites are set but the yolks are still vibrant. Use a slotted spoon to transfer the poached eggs to a paper towel to drain any excess water.
Create the Creamy Herb Base
In the same skillet (no need to clean it), reduce heat to medium and add 2 tablespoons olive oil. Add the 6 cloves minced garlic and 1.5 tablespoons grated fresh ginger, cooking for 1 minute until fragrant but not browned. Pour in 1 tablespoon fish sauce and 1 tablespoon soy sauce, stirring to combine.
Gradually whisk in 0.5 cup heavy cream, then add 0.5 cup packed fresh Thai basil leaves and 0.25 cup chopped fresh cilantro leaves. Simmer gently for 2-3 minutes until the basil wilts and the sauce thickens slightly to a velvety consistency. Season with 1 teaspoon salt and 0.5 teaspoon black pepper.
Assemble the Upo Dish
Return the crispy celery crowns to the skillet with the sauce and toss gently to coat. Add the poached eggs and spoon sauce over them. Stir in 1 tablespoon freshly squeezed lemon juice and cook for just 30 seconds to let the flavors meld together.
Divide the celery crowns and poached eggs among 4 plates, ladling the creamy herb sauce over each serving. Garnish with additional chopped cilantro if desired. Serve immediately while the celery is still crisp and the eggs are warm.
Pro Tips For Making Upo Recipe With Egg
- Cook Eggs in Stages: Crack the eggs directly into the hot broth—not the pan—so they poach gently without sticking. If your broth isn’t hot enough, they’ll turn to scrambled rubber; if it’s boiling, they’ll shatter. Aim for a simmer where bubbles break the surface but don’t rage. I used to rush this and ended up with sad, waterlogged yolks every time.
- Blanch Celery First: Toss chopped celery in boiling water for 30 seconds before adding it to the upo broth. This softens the fibrous stems so they don’t turn to mush or taste bitter. Skip this, and you’ll spend the whole simmer fishing out chewy bits—trust me, it’s not worth it.
- Salt the Broth Late: Wait until the fish is nearly done to season the broth with salt. Adding it early makes the fish fillets absorb too much moisture, turning them dull and watery. A pinch of salt at the end lets the flavors meld without overpowering the delicate fish.
- Use Cold Fish, Hot Pan: Pat the white fish fillets bone dry and let them sit in the fridge for 15 minutes before cooking. When the pan is screaming hot, sear them skin-side down for 20 seconds—this locks in moisture and gives them a crisp edge. Cold fish + hot pan = foolproof doneness every time.
Common mistakes when making great upo recipe with egg
Overcooking Celery
Celery crowns are all about that satisfying crunch, so overcooking them is the fastest way to ruin the dish. I’ve seen this happen when people get distracted or don’t monitor the pan closely. The moment they turn golden brown, they’re done—any longer and they’ll turn soggy.
Keep the heat at medium-high and flip them carefully to avoid crowding the pan. If you notice the celery losing its crispness, it’s time to remove them immediately. 🌟
Poaching Eggs Wrong
Poached eggs can turn rubbery or break apart if you don’t control the water temperature. The key is a gentle simmer, not a rolling boil—tiny bubbles are your goal.
I’ve learned this the hard way: once, I used boiling water and ended up with eggs that looked like deflated balloons. Also, room-temperature eggs poach better than cold ones, so let them sit out for 10-15 minutes before cooking.
And for heaven’s sake, don’t overcrowd the pot—give each egg space to set properly.
Skipping the Vinegar
That 1 tablespoon of white vinegar in the poaching water isn’t just for flavor—it helps the egg whites coagulate faster and hold their shape. Without it, the whites can turn stringy or fall apart.
I’ve tried making this dish without vinegar, and while it’s not a dealbreaker, the eggs just don’t have that same clean, silky texture. If you’re avoiding vinegar, try a splash of lemon juice instead, but it won’t be quite the same.
Underseasoning the Base
The creamy herb base is where the magic happens, but it’s easy to underseason it if you’re not careful. The fish sauce and soy sauce add depth, but you still need to taste as you go. I always add the salt and pepper gradually, tasting between each addition.
The herbs should be fragrant, not overpowering, and the cream should be rich but not heavy. If it tastes bland, a pinch of sugar or an extra splash of fish sauce can balance it out. Trust your taste buds—this isn’t the time to be shy with seasoning!
Using the Wrong Fish
While this dish works with many types of fish, cod or tilapia are the stars because of their mild flavor and flaky texture. Using something too strong, like salmon or tuna, can overpower the delicate herb base.
If you’re using frozen fish, make sure it’s thawed completely before cooking—partially frozen fish won’t steam properly and can turn out tough. And if you’re feeling adventurous, shrimp or even tofu can work, but adjust the cooking time accordingly. 🐟
Not Resting the Celery
After frying the celery crowns, it’s tempting to dive right into assembling the dish, but letting them rest for 2-3 minutes on a paper towel-lined plate makes all the difference.
This step helps them stay crispy longer and prevents them from absorbing too much of the creamy sauce, which can make them soggy. I’ve seen people skip this, and while it’s not a disaster, the texture just isn’t as satisfying. Patience here pays off in the best way!
Nutrition facts
Frequently asked questions
Can I make this recipe without fish?
While traditional Filipino upo uses fish, you can easily adapt this recipe with shrimp, tofu, or even chicken. For tofu, use extra-firm blocks and press them well to remove excess water before cooking. If using shrimp, reduce the cooking time to 2-3 minutes to avoid overcooking. The creamy herb base will still shine with any protein!
How do I keep the celery crowns crispy?
The secret is twofold: high heat and quick cooking. Fry the celery crowns in medium-high heat for just 4-5 minutes per side until golden brown. After frying, let them rest on a paper towel-lined plate for 2-3 minutes to absorb excess oil. Never overcrowd the pan or they’ll steam instead of crisp!
What’s the best way to reheat leftovers?
Reheat the creamy herb base gently in a saucepan over low heat until warmed through. For the celery crowns, warm them in a dry skillet for 1-2 minutes to restore crispiness. Poached eggs are best served fresh, but you can reheat them gently in the warm sauce for 30 seconds max—just don’t let them sit too long or they’ll turn rubbery.
Can I substitute Thai basil?
Yes! If you can’t find Thai basil, use regular basil plus ¼ teaspoon ground cinnamon for warmth. For a different twist, try Italian parsley or cilantro, but the dish will have a slightly different flavor profile. The key is balancing the herbs—don’t skip the ½ cup packed leaves in the base for that signature aroma.
Why does my sauce turn out watery?
Watery sauce usually means the herbs weren’t cooked long enough or the cream wasn’t incorporated properly. Simmer the base for 2-3 minutes until the basil wilts and the sauce thickens slightly. If it’s still too thin, stir in 1 teaspoon cornstarch mixed with 1 tablespoon water and cook for 1 more minute. The cream should coat the back of a spoon when done.
