If you grew up in a Puerto Rican household, you know that arroz con habichuelas isn't just a side dish - it's the backbone of the plate. This is rice and beans cooked together, seasoned with sofrito, garlic paste, achiote oil, and diced ham until every single grain is deeply flavored and golden.

Arroz con Habichuelas is one of the most iconic sides in Puerto Rico and is served regularly in households throughout the island to accompany main dishes like Chuletas Fritas, Carne Guisada, or Pollo Asado. It is flavorful and aromatic, and it could be enjoyed on its own.
If you love Puerto Rican side dishes, don't miss my Arroz con Gandules, which comes out at Christmas. Arroz Mamposteao, a classic Puerto Rican leftover rice dish that's arguably similar to this recipe but composed differently. Guineitos en Escabeche is a tangy salad that can be served cold or warm.
Jump To
Why you'll love this recipe
- One pan, real flavor: the rice cooks directly in the seasoned bean broth, so every grain absorbs the sofrito, achiote, and ham from the inside out.
- Weeknight-friendly: Thirty-five minutes start to finish, most of which is hands-off simmer time.
- Works with canned or homemade beans: Use a can of pink beans (habichuelas rosadas) on a Tuesday, or pull from a batch of your own cooked beans when you have time. Both work beautifully.
- It's the rice that goes with everything: Roasted chicken, carne frita, pork chops, or a fried egg. Arroz con habichuelas makes any plate feel complete.
Ingredient Notes

- Rice: The rice of choice in Puerto Rico is medium-grain. I prefer Jazmine rice, because I enjoy the floral aroma and flavor it brings to any dish. Feel free to use whichever grain you prefer.
- Pink beans (habichuelas rosadas): The traditional choice for this dish. If you're using canned, drain and rinse them. If you're cooking from dry, make sure they're fully tender before adding them to the pot. The rice cook time is not long enough to finish raw or undercooked beans.
- Diced ham: Ham adds a smoky, salty depth that seasons the whole dish as it renders. You could use pre-diced ham for convenience, but any fully cooked ham works. Cut it into small pieces so you get a little bit in every spoonful.
- Sofrito: This is the soul of Puerto Rican cooking. I use my own homemade sofrito, but a good -quality jarred sofrito works. Don't skip it, it's what separates arroz con habichuelas from plain yellow rice with beans.
See my recipe card below for a complete list of the ingredients with measurements.
What gives Arroz con Habichuelas it's beautiful color?
Every country has its choice of spice used for coloring. Spain, Italy, and France use saffron (not that other countries don't use saffron, but these three lead the way). India and Asian countries use Turmeric and Curry blends. But in Puerto Rico, we love Achiote. Tiny hard seeds, the Taino used for coloring their food, bodies, and pottery. We still use it today in the form of Achiote Oil. Achiote oil is used regularly in Puerto Rican kitchens. Check out my post on how to make this colorful oil and its uses.
Variations and Substitutions
- Make it vegetarian/vegan: Leave out the ham and use vegetable broth. The sofrito and achiote oil still carry enormous flavor.
- Swap the beans: White beans, pinto, or kidney beans also work for this recipe.
- Use summer sausage or chorizo: These will add a smoky flavor to the dish. However, I recommend making sure the sausages get nice and crispy before adding the vegetables and sofrito.
- No premade sofrito? Sofrito is basically a mix of finely mixed onion, green bell pepper, garlic, and fresh culantro (cilantro if culantro-recao is not available). Add these vegetables at the same time as onions to the recipe, and omit the sofrito in the steps.
Top Tip
The ratio is everything: 1 cup rice, 1 cup beans, and 1 cup liquid. Too much liquid and you get emplegostao, a sticky, wet, gummy rice. Not enough, and the bottom scorches before the top cooks through. Stick to the ratio, don't lift the lid during the steam, and you'll get loose, separate, perfectly cooked grains every time.
How to make arroz con habichuelas
Before you start, rinse your rice under cold water until the water runs clear, then set at aside. Measure out your broth and have all your ingredients prepped. This recipe moves quickly once the ham hits the pan.

- Brown the ham: Heat a drizzle of oil in a wide, heavy-bottomed pan over medium heat. Add the diced ham and cook, stirring occasionally, until it picks up some color and the fat begins to render, about 3-4 minutes. The fond (the brown bits sticking to the pan) is flavor, don't discard it.

- Add the onions: Add the diced onion to the pan with the ham and saute together until the onions are translucent and soft, about 4-5 minutes. They'll absorb all the rendered ham fat and start to smell incredible.

- Add the beans: Drain the beans and add them directly to the pan, stirring them into the ham and onion mixture. Let them sit in the pan for a minute or two so they can absorb the fond on the bottom.

- Season the beans: Add the sofrito, garlic paste, and adobo. Stir everything together and cook for 2-3 minutes so the sofrito has a chance to bloom in the hot pan and cook off its raw edge.

- Add the rice and achiote oil: Add the rinsed rice and the achiote oil to the pan. Stir and toss to coat the rice grains in the oil and distribute everything evenly. You'll see the rice start to take on that golden color immediately.

- Measure your broth: Use a 1:1:1 ratio of rice to beans to liquid; for every cup of rice, you'll need 1 cup of liquid. Have it measured and ready before the rice goes in so you're not scrambling.

- Add the broth and bring to a boil: Pour in the broth. Stir once to combine, then bring to a boil over medium-high heat. Let it boil uncovered for about 5 minutes. Do not stir. You're waiting for most of the liquid to absorb down to the level of the rice.

- Reduce the heat and cover: Once the liquid has reduced to just below the surface of the rice, reduce the heat to the lowest setting, cover tightly, and let it steam for 15 minutes. Do not lift the lid during this time; the steam is doing the work.

- Check for doneness: After 15 minutes, remove the lid. The rice should be fully cooked, with no visible liquid remaining. If there's still liquid, cover and cook for another 3-5 minutes. The rice at the bottom may form a slight crust, that's the pegao, and in Puerto Rico, it's a prize.

- Fluff and serve: Use a fork (never a spoon) to gently fluff the rice from the bottom up. This separates the grains without mashing them. Serve immediately, garnished with sliced avocado if you like.

Expert Tips
- Pan choice matters: The traditional pot of choice for rice in Puerto Rico is el caldero. I don't have a caldero, so I use my Tramontina sauce pot or a Lodge Dutch Oven when I want to make larger quantities.
- Don't skip browning the ham first: That initial sear creates fond on the bottom of the pan that seasons everything that follows. If you add all the ingredients at once, it creates steam, and the ham and vegetables will not develop fond and caramelization, which deepens the flavors.
- Use broth whenever possible: Water always works, but broth is noticeably better. Chicken broth is the most neutral and complementary, but vegetable broth is excellent for a vegetarian version.
- Storage:
- Store leftover arroz con habichuelas in an airtight container in the refrigerator for up to 4 days. Reheat in a covered pan with a splash of broth or water to restore moisture. To reheat in the microwave, transfer to a microwave-safe bowl, add a splash of water or broth, cover with a damp paper towel, and heat in 1-minute intervals, stirring between each, until warmed through.
- Arroz con habichuelas freezes well for up to 2 months. Freeze in individual portions for easy weeknight meals. Thaw overnight in the refrigerator, then reheat, covered with a little liquid added, on the stovetop or in the microwave as above.
Recipe FAQs
Both are Puerto Rican rice dishes cooked in one pot, but they use different legumes. Arroz con habichuelas uses pink or red beans (habichuelas), while arroz con gandules uses pigeon peas (gandules). Arroz con gandules is traditionally the rice of the holidays, Christmas and Three Kings Day, while arroz con habichuelas is the everyday table staple.
Sticky rice usually comes down to too much liquid, stirring during cooking, or lifting the lid before the steam has finished. Stick to the 1:1:1 ratio, resist the urge to stir once the lid is on, and let the rice steam undisturbed for the full 15 minutes.
Yes, and that's what I use most of the time. Drain and rinse a 15-ounce can of pink or red beans. One can of beans is roughly 1.5 cups, perfect for 1-2 cups of rice. If you're using homemade cooked beans, use 1 to 1.5 cups, depending on how much you have.
If the rice isn't cooked after 15 minutes, fluff gently with a fork to check, then add a quarter cup of water or broth, cover, and cook on low for another 5-10 minutes.
Before You Go . . .
Cooked it and loved it? Rate it. Review it. Share it. Your feedback helps others and keeps this blog cooking.
More Rice, Grains, and Pasta Recipes
- Gandules (Pigeon Peas)
- Stuffed Pasta Shells with Meat Sauce
- Arroz Con Gandules Recipe (Puerto Rican Rice and Pigeon Peas)
- Mamposteao, a Puerto Rican Leftover Rice Comfort Food
📖 Recipe

Arroz con Habichuelas, Puerto Rican Rice with Beans
Equipment
- 1 Dutch oven A saucepot or Caldero would work too.
Ingredients
- ½ oz ham diced
- 1 tablespoon olive oil
- 1 small onion peeled and diced
- 2 tablespoon sofrito
- 1 tablespoon garlic paste
- 1 cup rehydrated beans
- 2 teaspoon adobo seasoning sazon packet also works
- 1 cup rice washed and drained
- 2 tablespoon achiote oil
- 1 cup broth any flavor broth or water
Instructions
- Before you start, rinse your rice under cold water until the water runs clear, then set it aside. Measure out your broth and have all your ingredients prepped. This recipe moves quickly once the ham hits the pan.
- Brown the ham. Heat a drizzle of oil in a wide, heavy-bottomed pan over medium heat. Add the diced ham and cook, stirring occasionally, until it picks up some color and the fat begins to render, about 3-4 minutes. The fond (the brown bits sticking to the pan) is flavor, don't discard it.½ oz ham, 1 tablespoon olive oil
- Add the onions. Add the diced onion to the pan with the ham and saute together until the onions are translucent and soft, about 4-5 minutes. They'll absorb all the rendered ham fat and start to smell incredible.1 small onion
- Add the beans. Add the beans directly to the pan and stir them into the ham and onion mixture. Let them sit in the pan for a minute or two so they can absorb the fond on the bottom.1 cup rehydrated beans
- Season the beans. Add the sofrito, garlic paste, and adobo. Stir everything together and cook for 2-3 minutes so the sofrito has a chance to bloom in the hot pan and cook off its raw edge.2 tablespoon sofrito, 1 tablespoon garlic paste, 2 teaspoon adobo seasoning
- Add the rice and achiote oil. Add the rinsed rice and the achiote oil to the pan. Stir and toss to coat the rice grains in the oil and distribute everything evenly. You'll see the rice start to take on that golden color immediately.1 cup rice, 2 tablespoon achiote oil
- Measure the broth. Use a 1:1:1 ratio of rice to beans to liquid. The rule is for every cup of rice, use a cup of liquid. Have it measured and ready before the rice goes in so you're not scrambling.1 cup broth
- Add the broth and bring to a boil. Pour in the broth. Stir once to combine, then bring to a boil over medium-high heat. Let it boil uncovered for about 5 minutes. Do not stir. You're waiting for most of the liquid to absorb down to the level of the rice.
- Reduce the heat and cover. Once it has reduced to just below the surface of the rice, reduce the heat to the lowest setting, cover tightly, and let it steam for 15 minutes. Do not lift the lid during this time; the steam is doing the work.
- Check for doneness. After 15 minutes, remove the lid. The rice should be fully cooked, with no visible liquid remaining. If there's still liquid, cover and cook for another 3-5 minutes at low heat. The rice at the bottom may form a slight crust, called pegao, and in Puerto Rico, it's the craze.
- Fluff and serve. Use a fork (never a spoon) to gently fluff the rice from the bottom up. This separates the grains without mashing them. Serve immediately, garnished with sliced avocado if you like.
Notes
- The ratio is everything: 1 cup rice, 1 cup beans, and 1 cup liquid. Too much liquid and you end up with sticky, wet, gummy rice. Not enough, and the bottom scorches before the top cooks through. Stick to the ratio, don't lift the lid during the steam, and you'll get loose, separate, perfectly cooked grains every time.
- Pan choice matters: The traditional pot of choice for rice in Puerto Rico is el caldero. I don't have a caldero, and I like to use my Tramontina sauce pot or a Lodge Dutch Oven when I want to make larger quantities.
- Don't skip browning the ham first: That initial sear creates fond on the bottom of the pan that seasons everything that follows. If you add all the ingredients at once, it creates steam, and the ham and vegetables will not develop fond and caramelization, which deepens the flavors.
- Use broth whenever possible: Water always works, but broth is noticeably better. It would be the same as using a bouillon cube. Chicken broth is the most neutral and complementary, but vegetable broth is excellent for a vegetarian version.
- Storage:
- Store leftover arroz con habichuelas in an airtight container in the refrigerator for up to 4 days. Reheat in a covered pan with a splash of broth or water to restore moisture.
- Freezing: Arroz con habichuelas freezes well for up to 2 months. Freeze in individual portions for easy weeknight meals. Thaw overnight in the refrigerator, then reheat, covered, with a little liquid added.









