Pasta Fagioli
This tomato-based pasta fagioli is a chunky soup with cannellini beans, kidney beans, diced tomatoes, and spinach in an orange-red broth. Mashing a few beans gives the broth body while leaving it loose enough to ladle.
The ditalini cooks separately and goes into each bowl at serving time. That keeps the pasta distinct instead of letting it swell and absorb the broth—especially useful when there will be leftovers. The recipe serves 6.
Ingredients for Pasta Fagioli

- 2 tablespoons olive oil
- 1 medium yellow onion, diced (about 1 1/2 cups; 225g)
- 2 medium carrots, diced (about 1 cup; 130g)
- 2 celery ribs, diced (about 3/4 cup; 90g)
- 4 garlic cloves, minced
- 2 tablespoons tomato paste
- 1 teaspoon dried Italian seasoning
- 1/4 teaspoon red pepper flakes
- 1 can (14.5 ounces) diced tomatoes, undrained
- 5 cups vegetable broth, plus more as needed
- 1 can (15 ounces) cannellini beans, drained and rinsed
- 1 can (15 ounces) kidney beans, drained and rinsed
- 1 cup dry ditalini pasta (about 170g)
- 4 packed cups fresh baby spinach, roughly chopped (about 120g)
- Kosher salt and black pepper, to taste
- Up to 1/2 cup grated Parmesan, for serving (optional)
How to Make Pasta Fagioli

- Cook the pasta separately: Bring a medium saucepan of well-salted water to a boil. Cook the ditalini according to the package directions until al dente, about 8 to 10 minutes. Drain without rinsing and set aside. Start the soup while the pasta cooks.
- Soften the vegetables: Heat the olive oil in a 5- to 6-quart Dutch oven or heavy soup pot over medium heat. Add the onion, carrots, celery, and a pinch of salt. Cook, stirring occasionally, for 7 to 9 minutes; start checking after 6 minutes. The onion should be translucent, and the carrots and celery should be softened. Add the garlic, Italian seasoning, and red pepper flakes and cook for 1 minute, until fragrant.
- Cook the tomato paste: Stir in the tomato paste and cook for 1 to 2 minutes, stirring constantly, until it darkens slightly and coats the vegetables without scorching.
- Simmer the soup: Add the diced tomatoes with their juices, the vegetable broth, and both kinds of beans. Bring just to a boil, then reduce the heat to medium-low. Simmer gently, partially covered or uncovered, for 15 to 20 minutes, stirring every few minutes. Look for small bubbles rather than a rolling boil.
- Give the broth body: After 15 minutes of simmering, taste the broth and check its consistency. If it seems thin, simmer uncovered for a few more minutes. Mash about 1 cup of beans against the side of the pot with a spoon or potato masher, then stir them into the broth. Most of the beans should remain whole. Add a splash of broth if the soup becomes too thick.
- Wilt the spinach: Stir in the spinach and cook over low heat for 2 to 3 minutes, just until wilted and dark green. Season with kosher salt and black pepper to taste. Remove the pot from the heat and let it stand for 5 minutes.
- Serve: Divide the ditalini among bowls and ladle the hot soup over it. Top with Parmesan if desired. If serving the whole batch immediately, you can stir the pasta into the soup just before ladling; otherwise, keep it separate.
How to Keep the Soup Brothy
The finished broth should lightly coat a spoon but still pour freely, with whole beans, diced tomatoes, and greens visible throughout. Mashing only a portion of the beans thickens it without turning the soup into a puree. If it thickens as it stands, stir in a little broth or water.
Cooked pasta absorbs liquid even after it leaves the heat. Adding it to individual bowls keeps the soup brothy and prevents the pasta from becoming soft and swollen in leftovers.
Bean, Pasta, and Broth Swaps
Great Northern beans can replace cannellini beans. If ditalini is unavailable, use elbow macaroni or small shells and cook them separately until al dente. Chicken broth works in place of vegetable broth if a vegetarian base is not needed. Dried beans are not a direct swap: they require a different cooking time and liquid plan.
For a meatier version, brown 8 ounces of Italian sausage or pancetta in the soup pot first, draining excess fat if needed. Cook the vegetables as directed, then return the meat during the final simmer. A small Parmesan rind can be added with the broth for more savory depth; remove it before serving. For frozen spinach, use 10 ounces, thawed and squeezed dry, and add it during the final 2 to 3 minutes.
Storage, Reheating, and Freezing
Cool leftovers promptly and refrigerate the soup and pasta in separate airtight containers for 2 to 3 days. Reheat the soup gently over medium-low heat, adding broth or water until it is brothy again. Add pasta to an individual portion only long enough to warm through.
The soup base can be made 2 to 3 days ahead; cook the pasta when needed. To freeze, cool and freeze the soup without pasta. Thaw and reheat it gently, adding broth if needed, and serve with freshly cooked pasta.
Nutrition
Approximate per serving, based on 6 servings and excluding optional Parmesan and other additions: 290 calories, 12g protein, 5g fat, and 49g carbohydrates. Approximate per 100g of prepared soup with pasta: 55 calories, 2g protein, 1g fat, and 9g carbohydrates. Values vary with the broth, canned beans, and final amount of liquid.
Equipment
- Medium saucepan
- Colander
- 5- to 6-quart Dutch oven or soup pot
- Potato masher or spoon
Ingredients
For the Soup
- 2 tablespoons olive oil
- 1 medium yellow onion, diced (about 1 1/2 cups; 225g)
- 2 medium carrots, diced (about 1 cup; 130g)
- 2 celery ribs, diced (about 3/4 cup; 90g)
- 4 garlic cloves, minced
- 2 tablespoons tomato paste
- 1 teaspoon dried Italian seasoning
- 1/4 teaspoon red pepper flakes
- 1 can (14.5 ounces) diced tomatoes, undrained
- 5 cups vegetable broth, plus more as needed
- 1 can (15 ounces) cannellini beans, drained and rinsed
- 1 can (15 ounces) kidney beans, drained and rinsed
- 4 packed cups fresh baby spinach, roughly chopped (about 120g)
- Kosher salt and black pepper, to taste
For Serving
- 1 cup dry ditalini pasta (about 170g)
- Up to 1/2 cup grated Parmesan, optional
Instructions
- Bring a medium saucepan of well-salted water to a boil. Cook the ditalini according to package directions until al dente, about 8 to 10 minutes. Drain without rinsing and set aside.
- Heat the olive oil in a 5- to 6-quart Dutch oven or heavy soup pot over medium heat. Add the onion, carrots, celery, and a pinch of salt; cook, stirring occasionally, until softened and the onion is translucent, 7 to 9 minutes.
- Add the garlic, Italian seasoning, and red pepper flakes. Cook for 1 minute, until fragrant.
- Stir in the tomato paste and cook, stirring constantly, until slightly darkened and coating the vegetables, 1 to 2 minutes.
- Add the diced tomatoes with their juices, vegetable broth, cannellini beans, and kidney beans. Bring just to a boil, then reduce the heat to medium-low.
- Simmer gently, partially covered or uncovered, for 15 to 20 minutes, stirring every few minutes.
- Mash about 1 cup of beans against the side of the pot with a spoon or potato masher, then stir them into the soup. Add a splash of broth if the soup is too thick.
- Stir in the spinach and cook over low heat until wilted and dark green, 2 to 3 minutes. Season with salt and black pepper, then remove from the heat and let stand for 5 minutes.
- Divide the cooked ditalini among bowls and ladle the soup over it. Top with Parmesan, if desired.
Tips
- Cook the pasta separately to keep it from absorbing too much broth, especially for leftovers.
- Maintain a gentle simmer with small bubbles rather than a rolling boil.
- Mash only some of the beans to thicken the broth while keeping the soup chunky.
- Add broth or water if the soup thickens as it stands.
- If serving the entire batch immediately, stir the pasta into the soup just before ladling.
Variations
- Bean and Pasta Swaps: Use Great Northern beans instead of cannellini beans, or substitute elbow macaroni or small shells for ditalini; cook any pasta separately until al dente.
- Meaty Pasta Fagioli: Brown 8 ounces of Italian sausage or pancetta in the soup pot first, drain excess fat if needed, and return the meat during the final simmer.
- Parmesan Rind Version: Add a small Parmesan rind with the broth for extra savory depth, then remove it before serving.
- Frozen Spinach Version: Use 10 ounces frozen spinach, thawed and squeezed dry, and add it during the final 2 to 3 minutes.
- Chicken Broth Version: Use chicken broth in place of vegetable broth if a vegetarian soup is not needed.
