Filipino bopis stir-fried red with annatto, served with white rice, lime and chilies
Prep30 min
Cook1 hr 15 min
Serves4 servings
CuisineFilipino

Bopis Recipe: Filipino Sour Offal Stir-Fry with Pork Lung and Heart

How to make Filipino bopis in a home kitchen: pork lung and heart simmered, finely diced, and cooked with annatto oil, vinegar, aromatics and chili. Includes substitutes when lung is hard to find, chopping, reducing, storage and menu ideas.

Total: 1 hr 45 minLevel: Intermediate

Cooking flow

Cooking steps

STEP 11 / 6

Simmer the offal and meat

35 min

Simmering pork heart and pork with ginger and bay leaves
Simmer gently over low heat, cooking offal through to the center to remove the odor

Put 1.5 L water, 25 g ginger, 2 bay leaves and 2 tsp salt in a pot over medium heat. When it boils, add the pork lung, pork heart and pork shoulder; when it returns to a boil, lower to low heat and keep it gently bubbling. Simmer for about 30 minutes, and take the meat out when no red juice remains at the center of the heart, a skewer goes in easily, and the shoulder has changed color through the center. Keep only 250 ml of the simmering broth.

STEP 22 / 6

Chop into 5 mm dice

10 min

Chopping simmered pork heart and pork into 5 mm dice
Chop the meat into 5 mm dice and cook off the moisture before frying so the grains stay distinct

Let the simmered meat cool for 10 minutes and pat the surface dry. Cut the lung and shoulder into 5 mm dice; slice the heart thin along the grain, then cut into 5 mm dice. Too large and the offal smell is strong in each bite; too small and it crumbles into mince. Spread the chopped meat on a sieve or wide plate to let steam and extra moisture go.

STEP 33 / 6

Fry the aromatics in annatto oil

8 min

Frying garlic, onion, ginger and bell pepper in red annatto oil
Bring out the annatto color over low heat, then fry the aromatics over medium heat until translucent

Put 2 tbsp rice bran oil and 1 tbsp annatto in a frying pan and warm over low heat for 3 minutes. When the oil turns red-orange and small bubbles form around the seeds, take out the seeds. Raise to medium heat, add the garlic, onion and ginger, and cook for 4 minutes. When the onion turns translucent and fragrant, add the red bell pepper, carrot and green chilies and cook for just 1 minute. The aim is red oil coating the vegetables, not burnt brown.

STEP 44 / 6

Add the meat and vinegar and simmer

15 min

Adding coconut vinegar to the chopped meat and boiling over medium heat
Boil the vinegar over medium heat to drive off its sharp acid, then simmer with the broth

Add the 5 mm diced meat and cook over medium heat for 3 minutes to coat it with the oil. Add 1 tbsp tomato paste and cook for 30 seconds, then pour in 60 ml coconut vinegar. Right after adding the vinegar, do not stir too much; boil over medium heat for 2 minutes to drive off the sharp acid. Add the patis, soy sauce, 250 ml simmering broth, black pepper and sugar; when it boils, lower to medium-low and cook for 10 minutes. The cue is the liquid turning reddish brown and the flavor starting to enter each grain of meat.

STEP 55 / 6

Cook off the liquid so the grains stand

10 min

Stir-braising bopis until the liquid is gone and a spatula track remains
Cook off moisture over medium to medium-high heat, reducing until red oil seeps at the edge

Take the lid off and raise from medium to medium-high heat. Scrape the bottom with a wooden spatula as you stir-braise, and once the liquid has reduced to less than half, stir more often so it does not scorch. When the track of the spatula stays visible for about 2 seconds, a little red oil seeps at the edge of the pan and the grains of meat are glossy, lower the heat. If it stays watery the flavor blurs on white rice, so finish only the last part over slightly stronger heat.

STEP 66 / 6

Adjust sourness and heat and serve

3 min

Bopis finished with green chili and citrus
Add citrus after turning off the heat, and adjust sourness and heat at the table

Turn off the heat and stir in 1 tbsp lime or sudachi-type citrus juice. Taste: if the saltiness is weak, add 1 tsp patis; if the sourness is sharp, add a pinch of sugar. Do not settle the heat in the pot; put sliced chilies (1 mm wide) and vinegar on the table separately so everyone can adjust. Spoon over hot white rice and squeeze a little citrus on top to bring the umami of the offal and the sourness together.

0 / 0
Ingredients

Ingredients

1 / 2

For the simmer

Ingredient Amount Substitutes & notes
Pork lung (cleaned) 250 g If you cannot get it, replace with 200 g pork shoulder
Pork heart 300 g Open it in half and remove blood clots and thick vessels
Pork shoulder 150 g Without lung, make the total 350 g
Ginger 25 g Sliced thin
Bay leaves 2 Laurel leaves
Salt 2 tsp For the simmer
Water 1.5 L Enough to cover the meat
2 / 2

For the stir-braise and finish

Ingredient Amount Substitutes & notes
Rice bran oil 2 tbsp Vegetable oil is fine
Annatto (achuete) seeds 1 tbsp If using powder, 1 1/2 tsp
Garlic 4 cloves Finely chopped
Onion 1 (180 g) 5 mm dice
Ginger 15 g Finely chopped
Red bell pepper 1/2 (80 g) 5 mm dice
Carrot 80 g 5 mm dice
Green chili peppers 2 Sliced thin. 1 if you want less heat
Tomato paste 1 tbsp With tomato sauce, 3 tbsp
Coconut vinegar 60 ml 40 ml rice vinegar + 20 ml apple cider vinegar
Patis (Filipino fish sauce) or fish sauce 1 tbsp With salt, start with 1/2 tsp
Soy sauce 2 tsp Do not darken the color too much
Simmering broth or water 250 ml To add partway through
Black pepper 1/2 tsp Coarsely ground
Sugar 1 tsp Rounds the edge of the sourness
Lime or sudachi-type citrus juice 1 tbsp Stands in for calamansi
Hot white rice 4 bowls For the table
0 / 0

In a Pot Full of Vinegar, Chopped Offal Becomes a Rice Dish

When you cook Filipino food, the way vinegar is used keeps surprising you. Adobo (in Japanese), simmered in soy sauce and vinegar. Sinigang, a sour soup. The spicy vinegar served beside grilled chicken. Bopis belongs to the same line. It does not simply cook offal until it is rich; vinegar cuts the odor, the red oil of annatto draws out the appetite, and the whole thing leans toward a plate of white rice.

Bopis is a Filipino dish of finely chopped pork or beef lung and heart, stir-braised with garlic, onion, chili, vinegar and annatto. In the Philippines it is eaten as pulutan, a snack with drinks, and as a main dish over white rice. In the Pampanga context it is sometimes called pulutok, and a drier style with distinct grains is favored.

The hard part outside the Philippines is pork lung. In some places you can ask a butcher or an Asian grocery, but ordinary supermarkets almost never stock it. This recipe takes the authentic route when pork lung is available, and also shows a home version with pork heart and pork shoulder. So that it does not become just a rich pork stir-fry that borrows the name, keep four things at its core: chop finely, boil the vinegar, fry the aromatics in red annatto oil, and cook off moisture so the grains suit white rice.

Among Filipino chopped-pork dishes, sisig is a sizzling-plate dish eaten with browned edges and citrus, while bopis is an offal stir-fry reduced with vinegar and annatto. For a celebration platter, lechon; for charcoal aroma, chicken inasal. Putting them side by side shows how Filipino cooking uses sourness in different ways.

About the name

Bopis is a dish name seen across the Philippines. It is sometimes presented as Kapampangan bopis / pulutok, and what they share is that lung and heart are chopped and stir-fried hot and sour. This article uses the spelling "bopis" throughout, as it is easy to search for.


Ingredients (serves 4): If There Is No Lung, Use Heart and Shoulder

Bopis ingredients: pork heart, pork shoulder, red bell pepper, carrot, onion, garlic, ginger, annatto, vinegar, fish sauce and chilies
Bopis is built on pork lung and pork heart. If lung is hard to get, move toward a home version with heart and pork shoulder

If you can get pork lung, use it. If not, build on pork heart and make up the bite with pork shoulder. More liver brings out an iron-like smell, so do not add too much in the home version.

Allergy and food-safety notes

This dish uses pork, fish sauce and soy sauce (some products contain soy and wheat). Offal spoils easily, so simmer it soon after buying, and do not reuse the cutting board and knife that touched raw meat for the cooked ingredients. When reheating, heat all the way through, and do not leave it long at room temperature.

Ingredients and tools that cause hesitation when shopping

Shopping for bopis: annatto, coconut vinegar, fish sauce, a thermometer and chilies
Annatto gives color, coconut vinegar gives sourness, and a thermometer helps you check doneness for offal

Bopis is defined not only by the supermarket meat but by annatto and vinegar. Annatto also works in chicken inasal and lechon, so if you plan to keep cooking Filipino food, it is worth looking for first.

Rice vinegar works, but coconut vinegar gives a rounder sourness and a fermented character that fits Filipino cooking while cutting the offal's smell.

Offal is hard to judge by color alone. If you want to cook with confidence, including reheating, a thermometer removes much of the doubt.


Method: Simmer, Chop, and Reduce with Sourness

Bopis looks like a dish fried fast over strong heat, but in practice the simmering and the chopping decide most of it. Remove the odor, chop finely, properly boil the vinegar, and cook off moisture at the end. Miss these and you get a watery offal stir-fry.


Branching for a Home Kitchen: What to Keep and What to Replace

To reproduce bopis fully you need pork lung, pork heart, coconut vinegar, annatto and small local chilies. Even on days when you cannot gather everything, as long as you do not break the skeleton of the dish, the flavor is enough to say you made bopis.

Uncertain ingredient Closer to the original Realistic substitute What to keep
Lung Pork or beef lung Replace with 200 g pork shoulder Chop finely and reduce with vinegar
Heart Pork heart Pork heart first. If none, 250 g chicken hearts Keep the chew and the offal aroma
Red color Annatto, achiote Annatto seeds or powder Paprika alone gives weak aroma
Sourness Coconut vinegar, sugarcane vinegar Rice vinegar + apple cider vinegar Boil the vinegar to drive off the edge
Heat Siling labuyo Green chili, red chili Do not overdo it in the pot; add at the table

Without pork lung, the airy offal quality of the original weakens a little. In exchange, the chew of pork heart and the meatiness of shoulder make a home version that suits white rice. What matters is not leaving pork shoulder in big pieces. Chopped to 5 mm dice, vinegar, annatto and onion get into the gaps in the meat and sourness and fat mix in every bite.

Annatto is hard to replace. For color alone paprika powder comes close, but the red-orange that moves into the oil and the earthy aroma are different. If you make chicken inasal, lechon and bopis, you will use up the annatto. If you only try it once, a small packet of powder leaves less left over.

Vinegar changes the flavor depending on how it is boiled. Stir hard right after adding it and the sourness tends to jab at the whole dish. Boil it for about 2 minutes over medium heat without touching it too much, and add liquid after the sharp smell has softened; it cuts the offal smell and gives a sourness that suits white rice.


Why It Goes Wrong: Fix Watery, Smelly or Tough

Watery bopis compared with bopis reduced until glossy
Reduce the liquid until a spatula track remains, and the bopis flavor does not blur

Bopis failures come from moisture more than from the offal itself. Chopping while steam from the simmering still clings, lowering the heat right after adding vinegar, and leaving too much liquid at the end. When these three pile up, you get a sour but blurry stir-fry.

Problem Cause Fix
Watery Moisture after simmering; not enough reduction at the end Remove the lid and cook off over medium heat until a spatula track remains
Smells of offal Under-simmered, not enough ginger, vinegar not boiled Simmer another 10 minutes with ginger and bay leaves, then chop
Tough Short boil over strong heat; heart chopped too large Simmer another 10 minutes over low heat and re-chop to 5 mm dice
Too sour Stirred right after adding vinegar; not boiled enough Boil for 2 minutes over medium heat; add a pinch of sugar and 2 tbsp water
Flat flavor Thin annatto oil; not enough salt Add 1 tsp patis, black pepper and citrus at the end
Red in color only Made with paprika powder alone Make annatto oil and fry the aromatics first

FoodSafety.gov recommends checking safe cooking temperatures of meat with a thermometer. For pork cuts the guideline is 63°C or higher followed by a rest, and for reheating leftovers 74°C. Bopis is simmered once and then stir-braised, so a cold center rarely remains, but if you are not used to cooking offal, checking with a thermometer is reassuring.


How to Eat and What to Serve: White Rice, Vinegar, a Sour Soup

Bopis on a table with white rice, a small bowl of vinegar and cucumber
Eat bopis over white rice, cutting the fat with vinegar and citrus

Bopis is strongly flavored on its own. Spoon it over white rice, drop in a little vinegar from a small bowl partway, and squeeze citrus at the end, and the umami of the offal does not feel heavy. As a snack with drinks, set sliced cucumber, tomato and onion beside it to give the sourness and heat somewhere to go.

For a Filipino menu, serve a small bowl of sinigang. On days you add noodles, keep pancit canton modest, and if you add fried food, a few pieces of lumpiang shanghai are enough. Bopis is already rich, so it is easier to eat if the whole menu is not stacked with fried food and fat.

Unlike turning leftover lechon into sisig-style chopped pork, bopis is finely chopped and reduced from the start. The next day it goes well mixed into garlic rice, and a firmly cooked omelet beside it, rather than a fried egg, softens the heat and sourness.


Storage and Reheating

Refrigerate for up to about 2 days. After it cools, spread it in a shallow container, cover and refrigerate. Stored with lots of onion and citrus, the aroma gets stronger, so if you are making it ahead, add the juice just before eating.

A frying pan is best for reheating. Warm over medium-low heat for 2 minutes, add 2 tsp water and loosen, then finish with 1 minute over medium heat to cook off moisture. In a microwave, 1 1/2 minutes at 600 W, stir, then another 30 seconds. When it is hot through to the center, squeeze a little citrus on top to bring the aroma back.

It can be frozen, but the offal smell and the onion texture come out a little stronger. If you freeze it, spread single portions thin and use within 1 month. After thawing, cook off moisture in a frying pan and finish with citrus instead of vinegar so the sourness does not get too sharp.


Frequently Asked Questions

I cannot get pork lung. Can I still make it?

Yes. Replace the 250 g pork lung with 200 g pork shoulder and keep the 300 g pork heart. The airy texture specific to lung weakens, but if you chop finely and reduce with vinegar and annatto, you still get the direction of bopis. If you also leave out the pork heart, it moves from offal dish toward a sour pork mince.

Is it more authentic with liver?

In a home version, it is easier to eat if you do not overdo it. If you want to add aroma to make up for lung, simmer just 60 g pork or chicken liver, chop to 5 mm dice and add it. Beyond 120 g, the iron-like smell comes forward and the impression becomes liver stir-fry more than bopis sourness.

Can I make it with rice vinegar alone?

Yes. 60 ml rice vinegar alone tends to give a sharp acid, so splitting into 40 ml rice vinegar and 20 ml apple cider vinegar rounds it. In either case, right after adding the vinegar boil it over medium heat for 2 minutes to drive off the sharp smell before adding liquid.

Can I make bopis that is not spicy?

Yes. Reduce the green chilies to 1 and remove the seeds. Do not settle the heat in the pot; put chopped chili and vinegar on the table separately so those who like heat can add it. Removing all heat makes the flavor flat, so keep the black pepper.

It turned too sour after reheating.

Reheating with added vinegar makes the sourness stand out too much. Loosen leftovers with 2 tsp water, warm in a frying pan, and squeeze a little citrus at the end for a better balance. Served over white rice, adding chopped onion or cucumber softens the sourness.