Soups & Stews
This bean-heavy chili recipe delivers smoky, hearty flavor without relying on meat, making it perfect for vegetarians and plant-based eaters alike.
The secret lies in a blend of traditional chili spices—cumin, chili powder, and smoked paprika—that create deep, warming notes while black beans and kidney beans provide rich texture and protein.
I developed this recipe after discovering how much depth slow simmering brings to beans, transforming them into a satisfying, restaurant-quality dish.
The beauty of this chili is its versatility and simplicity. With just 10 ingredients and a single pot, you’ll create a dish that’s packed with flavor but requires minimal effort. The beans soften perfectly during the 2-hour simmer, absorbing the spices and creating a thick, hearty broth.
This recipe also adapts effortlessly to vegan diets—simply omit any optional dairy toppings for a fully plant-based meal.
By the time you’re done, you’ll have a bold, smoky chili with tender beans, a rich sauce, and layers of spice that make every bite satisfying. The aroma alone will fill your kitchen with warmth, while the texture—soft beans, slightly thickened broth—makes it ideal for cold evenings or meal prep.
Serve it with cornbread, avocado, or a dollop of sour cream for the perfect balance of heat and creaminess.
This chili isn’t just a meal—it’s a comforting, flavorful experience that proves vegetarian dishes can be just as hearty and delicious as traditional recipes. Whether you’re cooking for one or feeding a crowd, this recipe delivers restaurant-quality results with minimal fuss. Let’s get started!
Ingredients for bean heavy chili
Ten ingredients, two hours, restaurant-quality chili without the meat. Smoky, hearty, and packed with protein.
| Ingredient | Amount | Notes |
|---|---|---|
| Black Beans 🫘 | 1 ½ cups | Drained and rinsed, canned or cooked |
| Kidney Beans 🫘 | 1 ½ cups | Drained and rinsed, canned or cooked |
| Diced Tomatoes 🍅 | 2 cups | San Marzano preferred, no juice |
| Onion 🧅 | 1 medium | Diced, yellow or red |
| Garlic Cloves 🧄 | 4 cloves | Minced, fresh preferred |
| Chili Powder 🌶️ | 2 tbsp | Smoked variety for depth |
| Ground Cumin 🌿 | 1 ½ tbsp | Toasted for richer flavor |
| Smoked Paprika 🌶️ | 1 tbsp | For authentic smoky taste |
| Vegetable Broth 💧 | 2 cups | Low-sodium preferred |
| Tomato Paste 🍅 | 2 tbsp | Squeeze tube or canned |
| Bay Leaves 🌿 | 2 whole | Fresh preferred, remove before serving |
| Salt 🧂 | 1 tsp | Diamond Crystal kosher salt |
| Black Pepper 🌶️ | ½ tsp | Freshly ground preferred |
| Olive Oil 🫒 | 1 tbsp | Extra-virgin for richness |
The beans are the foundation—black and kidney give you that classic chili texture. Trader Joe's has the best canned beans (no funny aftertaste), but any good-quality canned beans work. If you're using dried, soak them overnight—double the amount and simmer until tender. The onions and garlic? Sauté them in olive oil until soft and translucent—this builds the flavor base. For the spices, Penzeys or bulk bins at Whole Foods are your best bet. Smoked paprika is non-negotiable here—it's what gives that authentic smoky depth. Toast your cumin seeds in a dry pan for 30 seconds before grinding if you want to take it to the next level.
No smoked paprika? Regular paprika plus a pinch of liquid smoke works in a pinch. Short on kidney beans? Pinto or cannellini beans hold up well too. The tomato paste can be that squeeze tube from Trader Joe's—it's perfect for this recipe and lasts forever. Vegetable broth? Low-sodium is key—otherwise, you'll need to adjust the salt at the end. Fresh bay leaves add complexity, but dried works if that's what you've got. The San Marzano tomatoes? Worth the splurge for that sweet, meaty flavor, but regular diced tomatoes work fine if that's what you've got on hand.
This chili tastes even better the next day—make a double batch and freeze half. Keeps in the fridge for 5 days and freezes for 3 months. I always portion mine into containers for easy lunches. The spices mellow out over time, so if it's too strong after reheating, just add a splash of broth. For extra richness, stir in a spoonful of nutritional yeast at the end—it adds that umami kick without dairy.
Why You'll Love This Recipe
- I swear by this trick: just use pre-diced tomatoes and canned beans. Toss them in raw with the onions and garlic, let the pot do the work. By the time the beans soften, everything’s broken down perfectly—no knife skills required.
- No-Chop Shortcut: I swear by this trick: just use pre-diced tomatoes and canned beans. Toss them in raw with the onions and garlic, let the pot do the work. By the time the beans soften, everything’s broken down perfectly—no knife skills required.
- Deep, Earthy Richness: Black beans and kidney beans together? That’s where the magic happens. The kidney beans add a meaty texture while the black beans bring that creamy, almost buttery depth. Honestly, the first time I tasted this, I thought, “Why don’t I make this more often?”
- Meal Prep MVP: This chili tastes better the next day—yes, really. I make a big batch on Sundays, portion it out, and freeze half. Reheating it with a splash of water revives that smoky, hearty flavor. Perfect for lazy nights or when you’ve got a houseful to feed.
Step-by-step instructions for bean heavy chili recipe
This smoky, hearty chili delivers deep flavor and satisfying texture without any meat.
Sauté Aromatics Until Fragrant
Heat the 1 tablespoon olive oil in a large Dutch oven over medium heat. Add the 1 medium onion and cook for 5 minutes until softened and translucent. Here's the thing—you want the onion to become almost caramelized at the edges, which builds sweetness that carries through the entire chili.
Stir in the 4 cloves garlic cloves and cook for 30 seconds until fragrant. Don't let the garlic brown—just until you can smell that warm, toasty aroma. This quick cooking preserves the garlic's sweetness rather than turning it bitter. If it starts to sizzle too aggressively, reduce the heat slightly to maintain gentle cooking.
Toast Spices for Maximum Flavor
Add the 2 tablespoons chili powder, 1.5 tablespoons ground cumin, and 1 tablespoon smoked paprika to the pot. Stir constantly for 1 minute until the spices become fragrant and the oil takes on a rich, reddish hue. This toasting step unlocks the spices' full potential—raw spices won't deliver the same depth of flavor.
I press the spices into the onion mixture with a wooden spoon to ensure even distribution. This creates a flavorful paste that coats every bean later. If you notice any dark, burnt spots developing, immediately reduce the heat to medium-low to prevent scorching. The spices should smell warm, earthy, and slightly smoky by the time you're done.
Build the Chili Base
Stir in the 2 tablespoons tomato paste and cook for 2 minutes until it darkens slightly and blends completely with the spices. This step forms the flavor foundation of your chili. Next, add the 2 cups diced tomatoes (with their juices) and 2 cups vegetable broth, scraping up any browned bits from the bottom of the pot.
Bring the mixture to a gentle simmer, then add the 2 whole bay leaves, 1 teaspoon salt, and 0.5 teaspoon black pepper. Here's where it gets good—the bay leaves infuse subtle herbal notes that elevate the entire dish. Let the mixture simmer uncovered for 10 minutes to allow the flavors to meld and the liquid to reduce slightly.
Add Beans and Simmer Slowly
Add the 1.5 cups black beans and 1.5 cups kidney beans, stirring to combine. The beans should be fully submerged in the liquid. Bring the chili to a boil, then immediately reduce the heat to low and let it simmer uncovered for 30 minutes, stirring occasionally.
This slow cooking transforms the beans into the heart of your chili. You'll notice the flavors deepening and the texture becoming velvety rather than grainy. The chili should thicken slightly as it simmers, but it shouldn't reduce to a paste—you want a thick, spoonable consistency with plenty of liquid to keep the beans tender. Taste occasionally and adjust seasoning if needed.
Finish and Rest for Perfect Texture
Remove the 2 whole bay leaves and let the chili sit off the heat for 5 minutes. This resting period allows the flavors to fully develop and the beans to absorb any remaining liquid. The chili should be thick enough to coat the back of a spoon but still have some body to it.
For serving, you can keep the chili as-is for a rich, hearty bowl, or thin it slightly with additional broth if you prefer a looser consistency. The beans should be tender but still hold their shape, and the sauce should cling to them beautifully. This chili tastes even better the next day as the flavors continue to meld together—perfect for meal prep!
Pro Tips For Making Bean Heavy Chili
- SOAK THE BEANS FIRST: I learned this the hard way—skipping the soak turns your chili into a mushy, waterlogged mess. Rinse black and kidney beans, then soak for at least 2 hours (or overnight if you're patient). Drain and rinse again before cooking to cut down on gassy flavors and uneven texture.
- SWEAT THE ONIONS LOW: High heat = burnt onions, bitter chili. Cook your onions over medium-low until they’re translucent and just starting to caramelize—about 8-10 minutes. This builds flavor without turning your pot into a smoky disaster. (Yes, even if you’re impatient like me.)
- CRUSH HALF THE GARLIC: Whole garlic cloves disappear into bean chili, leaving you guessing if they even worked. Crush half the cloves flat before adding—this releases more flavor while keeping the texture intact. Save the other half for later layers if you’re worried about overpowering the dish.
- ADD TOMATOES LAST: Diced tomatoes break down fast, turning your chili into soup if you toss them in too early. Stir them in during the final 15 minutes of cooking to keep their shape and bright acidity. If using canned tomatoes, drain most of the liquid first—you don’t want a watery bean stew.
Pro cooking tips for great bean heavy chili
Spice Toasting Technique
The secret to unlocking maximum flavor in your chili is toasting your spices in the pot before adding liquids. Heat the chili powder, cumin, and smoked paprika in the Dutch oven over medium heat for 1 minute while stirring constantly.
This step develops their aromatic oils and prevents them from tasting raw. I always press the spices into the onion mixture with a wooden spoon to create a flavorful paste that coats every bean. 🌶️
Low-and-Slow Simmer
After adding the beans, maintain a gentle simmer at low heat for 30 minutes uncovered. This slow cooking process transforms the beans into the heart of your chili, allowing them to absorb the spices and develop velvety texture.
The key is patience—don't rush this step or the beans will turn mushy. Stir occasionally to prevent sticking, and taste the broth before adding beans to ensure proper seasoning. ⏰
Bay Leaf Infusion
Add 2 whole bay leaves during the initial simmer to infuse subtle herbal notes that elevate the entire dish. These leaves should remain in the chili for the full 10-minute simmer before adding beans.
Remove them before serving to avoid any unpleasant texture. Fresh bay leaves add more complexity than dried, but either works in a pinch. 🌿
Tomato Paste Trick
Cook the 2 tablespoons tomato paste for 2 minutes until it darkens slightly and blends completely with the spices. This step forms the flavor foundation by concentrating the tomato's sweetness and deepening its color.
Don't skip this—it's what gives authentic chili its rich, meaty depth without any actual meat. The paste should be fully incorporated before adding liquids. 🍅
Bean Texture Control
For perfect bean texture, ensure they're fully submerged in liquid during simmering. If your chili seems too thick after adding beans, stir in ¼ cup vegetable broth to maintain proper consistency.
The beans should be tender but still hold their shape—overcooking leads to mushy texture. I always taste the beans after 20 minutes of simmering to check for doneness. 🫘
Resting Period
Let the finished chili rest off the heat for 5 minutes before serving. This resting period allows flavors to fully develop and beans to absorb any remaining liquid, resulting in a more cohesive texture.
The chili should be thick enough to coat the back of a spoon but still have some body. This simple step makes a noticeable difference in the final product. ✨
Nutrition facts
Frequently asked questions
Can I use dried beans instead of canned?
Yes, but you'll need to soak them first! Use 1 cup dried black beans and 1 cup dried kidney beans (about 3 cups total before soaking). Soak overnight in water with a pinch of salt, then simmer until tender (1-1.5 hours). Dried beans give a slightly firmer texture but require more prep time. Double the cooking liquid to account for water absorption during soaking.
How can I make this chili spicier?
Add ½ teaspoon cayenne pepper or 1 chopped chipotle pepper in adobo sauce when toasting the spices. For heat control, use ½ teaspoon chipotle powder instead. Remember: chili powder already contains some heat, so adjust gradually. Always taste before serving—you can reduce heat with a splash of broth if needed.
What's the best way to reheat leftovers?
Reheat gently on the stovetop over low heat with 2 tablespoons broth to prevent drying. Stir frequently and add more broth as needed to maintain thickness. Microwave reheating works too—use 50% power for 2 minutes, then stir and check consistency. Never reheat to a boil, as this can make the beans mushy and the sauce separate.
Can I make this chili in a slow cooker?
Sauté the onions, garlic, and spices first, then transfer everything to your slow cooker. Add all remaining ingredients and cook on low for 6-7 hours or high for 3-4 hours. The slow cooker's gentle heat enhances the bean texture and flavor development. Just skip the initial 10-minute simmer—everything cooks together in one step.
What's the best way to store leftovers?
Let the chili cool completely, then transfer to airtight containers. Store in the fridge for up to 5 days or freeze for 3 months. Portion into single servings for easy reheating. For freezing, leave ½ inch headspace in containers to prevent ice crystals. Thaw overnight in the fridge before reheating—never microwave from frozen.
