Quick Recipe Version (TL;DR)
Quick Ingredients
- 3 tbsp extra-virgin olive oil, plus 2 tbsp to finish
- 1 medium yellow onion, diced (about 1 1/4 cups)
- 2 medium carrots, diced (about 1 cup)
- 2 celery stalks, diced (about 1 cup)
- 4 garlic cloves, thinly sliced
- 1 cup (240 g) crushed tomatoes
- 1/4 tsp red pepper flakes (optional)
- 1 rosemary sprig and 1 bay leaf
- 6 cups (1.4 L) low-sodium chicken or vegetable broth
- 2 (15-oz/425 g) cans cannellini beans, drained and rinsed
- 8 oz (225 g) ditalini or other small pasta
- 2 oz (56 g) Parmesan rind
- 1 1/4 tsp kosher salt, divided; 1/2 tsp black pepper
- For serving: 1/2 cup (45 g) finely grated Parmesan; chopped parsley
Do This
- 1) Warm 3 tbsp oil in a pot over medium heat; cook onion, carrots, and celery with a pinch of salt until tender, 8 minutes.
- 2) Add garlic (30 seconds), then tomatoes and red pepper flakes (2–3 minutes). Add rosemary, bay, Parmesan rind, and broth; bring to a boil, then simmer 5 minutes (gentle 190–200°F).
- 3) Stir in beans, 3/4 tsp salt, and pepper; simmer 5 minutes.
- 4) Ladle out 1 cup of beans with liquid; mash to a rough puree and return to pot.
- 5) Add pasta; simmer, stirring often, until al dente, 8–10 minutes. Add hot water as needed to keep it soupy.
- 6) Remove rind, rosemary, and bay; adjust salt with remaining 1/2 tsp as needed. Rest 2 minutes. Serve with olive oil drizzle, Parmesan, and parsley.
Why You’ll Love This Recipe
- Creamy without cream: mashing some beans gives a velvety, brothy stew.
- One-pot comfort: everything simmers together for big flavor with minimal cleanup.
- Pantry-friendly: canned beans, short pasta, and a Parmesan rind make magic.
- Flexible: keep it vegetarian or add pancetta; swap the pasta shape with what you have.
Grocery List
- Produce: 1 yellow onion, 2 carrots, 2 celery stalks, 4 garlic cloves, 1 rosemary sprig, 1 bay leaf, flat-leaf parsley
- Dairy: Parmesan rind (about 2 oz/56 g), grated Parmesan (about 1/2 cup/45 g)
- Pantry: Extra-virgin olive oil, crushed tomatoes (1 cup from a can), red pepper flakes, low-sodium chicken or vegetable broth, 2 cans cannellini beans, ditalini pasta, kosher salt, black pepper
Full Ingredients
Soffritto & Aromatics
- 3 tbsp extra-virgin olive oil, plus more to finish
- 1 medium yellow onion, finely diced (about 1 1/4 cups / 175 g)
- 2 medium carrots, finely diced (about 1 cup / 130 g)
- 2 celery stalks, finely diced (about 1 cup / 120 g)
- 4 garlic cloves, thinly sliced
- 1/4 tsp crushed red pepper flakes (optional)
- 1 fresh rosemary sprig
- 1 bay leaf
Tomatoes, Broth & Umami
- 1 cup (240 g) crushed tomatoes or passata
- 6 cups (1.4 L) low-sodium chicken or vegetable broth
- 2 oz (56 g) Parmesan rind
Beans & Pasta
- 2 (15-oz/425 g) cans cannellini beans, drained and rinsed
- 8 oz (225 g) ditalini or other small pasta (small shells, tubetti, elbows)
Seasoning & Finish
- 1 1/4 tsp kosher salt, divided, plus more to taste
- 1/2 tsp freshly ground black pepper
- 1/2 cup (45 g) finely grated Parmesan, for serving
- 2 tbsp extra-virgin olive oil, for drizzling
- 2 tbsp chopped flat-leaf parsley (optional)

Step-by-Step Instructions
Step 1: Build the soffritto
Heat 3 tbsp olive oil in a heavy soup pot or Dutch oven over medium heat. Add the onion, carrots, and celery with a small pinch of salt. Cook, stirring occasionally, until the vegetables are tender and lightly golden at the edges, about 8 minutes. Keep the heat moderate so they soften without scorching; this gentle sweat builds a sweet, savory base.
Step 2: Layer in garlic, tomatoes, and herbs
Add the sliced garlic and cook until fragrant, 30–60 seconds. Stir in the crushed tomatoes and red pepper flakes (if using) and cook 2–3 minutes to concentrate their flavor. Add the rosemary sprig, bay leaf, and Parmesan rind. Pour in the broth, bring to a boil, then reduce to a gentle simmer (small, steady bubbles, about 190–200°F / 88–93°C) for 5 minutes.
Step 3: Add the beans to season the broth
Stir in the cannellini beans along with 3/4 tsp of the kosher salt and the black pepper. Simmer 5 minutes to let the beans and aromatics season the broth and the Parmesan rind begin to release its savory richness.
Step 4: Mash a portion for creaminess
Ladle out about 1 cup of the soup—beans and liquid—and mash it in a bowl with a fork or potato masher to a rustic puree. Return the mash to the pot and stir. This thickens the soup naturally, giving it a silky, creamy body without any dairy.
Step 5: Cook the pasta in the pot
Add the ditalini and maintain a steady simmer, stirring often so the pasta doesn’t settle and stick. Cook until al dente, 8–10 minutes (check your package). If the soup gets thicker than you like, add hot water a splash at a time (up to 1 cup) to keep it soupy. Taste and add the remaining 1/2 tsp salt if needed.
Step 6: Finish and serve
Fish out and discard the Parmesan rind, rosemary, and bay leaf. Let the soup rest 2–3 minutes; it will continue to thicken slightly. Ladle into warm bowls and finish each with a generous drizzle of extra-virgin olive oil, a shower of grated Parmesan, and parsley. Serve hot.
Pro Tips
- Stir frequently once the pasta is in to prevent sticking and to release starches that make the broth creamy.
- Control thickness by adding hot water or broth near the end. Pasta continues to absorb liquid as it sits, so aim a touch looser than your ideal at the stove.
- For deeper flavor, do not oversalt early—Parmesan rind and broth add salt as they simmer. Season to taste at the end.
- Cooked-from-dry bean option: Soak 1 cup (200 g) dried cannellini overnight. Drain, cover with 6 cups water, add a bay leaf, and simmer until tender, 60–90 minutes. Salt to taste near the end. Use 3 cups cooked beans plus 2 cups of their cooking liquid in place of some broth.
- No rind on hand? Add 1–2 tsp white miso off heat for umami, or finish with an extra 2 tbsp grated Parmesan.
Variations
- Smoky pancetta: Render 3 oz (85 g) diced pancetta in 1 tbsp oil until crisp. Remove and reserve. Cook the soffritto in the fat, then return pancetta at the end.
- Tomato-forward: Use a full 14.5-oz (400 g) can of crushed tomatoes and increase broth to 7 cups. Finish with torn basil instead of parsley.
- Gluten-free: Use a small gluten-free pasta and cook gently; check early for doneness.
Storage & Make-Ahead
Refrigerate leftovers in an airtight container for up to 4 days. The pasta will continue to absorb liquid; thin with hot water or broth when reheating. For best texture if making ahead, cook the soup without pasta, cool, and refrigerate or freeze (up to 3 months). Boil pasta separately and add to bowls when serving. Reheat soup over medium heat until steaming throughout (at least 165°F / 74°C), then add pasta and finish with olive oil and Parmesan.
Nutrition (per serving)
Approximate: 415 calories; 14 g protein; 56 g carbohydrates; 13 g fat; 9 g fiber; 790 mg sodium (varies with broth and added salt).


Leave a Reply