Quick Recipe Version (TL;DR)
Quick Ingredients
- 2 tbsp extra-virgin olive oil
- 1 medium yellow onion, diced
- 2 carrots, diced; 2 celery stalks, diced
- 2 cloves garlic, minced
- 1 medium zucchini, chopped; 1 medium Yukon gold potato, diced
- 1 tbsp tomato paste; 1 can (14.5 oz) diced tomatoes
- 6 cups low-sodium vegetable broth; 1 bay leaf
- 1 tsp dried oregano; 1/2 tsp dried thyme; pinch red pepper flakes
- 1 can (15 oz) cannellini beans, drained and rinsed
- 2/3 cup (110 g) acini di pepe (small pasta pearls)
- 1/4 cup pesto, plus more to serve
- Kosher or sea salt and black pepper
- Parmesan and fresh basil for garnish (optional)
Do This
- 1. Warm oil in a large pot over medium heat; sauté onion, carrot, and celery with 1 tsp salt, 8–10 minutes.
- 2. Stir in garlic and tomato paste, 1 minute. Add tomatoes with juices; simmer 2 minutes.
- 3. Add broth, bay leaf, oregano, thyme, red pepper flakes, potato, and zucchini. Boil, then simmer 12–15 minutes.
- 4. Add acini di pepe and cannellini beans; simmer 8–10 minutes until pasta is al dente.
- 5. Off heat, stir in pesto. Adjust salt and pepper; thin with hot water if needed.
- 6. Serve hot with a swirl of pesto, grated Parmesan, and torn basil.
Why You’ll Love This Recipe
- Classic Italian comfort with a bright pesto finish that tastes restaurant-worthy.
- Balanced bowl: hearty beans, tender vegetables, and tiny pasta pearls in a tomato-herb broth.
- Weeknight friendly and pantry-flexible; swaps welcome.
- Make-ahead smart: the flavor deepens by day two.
Grocery List
- Produce: Yellow onion, carrots, celery, garlic, zucchini, Yukon gold potato, fresh basil (optional for garnish)
- Dairy: Parmesan or Pecorino for serving (optional)
- Pantry: Extra-virgin olive oil, tomato paste, canned diced tomatoes, vegetable broth (low-sodium), cannellini beans, acini di pepe (or ditalini), pesto, dried oregano, dried thyme, red pepper flakes, bay leaf, salt, black pepper
Full Ingredients
Base & Aromatics
- 2 tbsp extra-virgin olive oil (30 ml)
- 1 medium yellow onion, finely diced (about 1 cup / 225 g)
- 2 medium carrots, diced (about 1 cup / 170 g)
- 2 celery stalks, diced (about 3/4 cup / 100 g)
- 2 garlic cloves, minced (10 g)
Vegetables
- 1 medium zucchini, chopped into 1/2-inch pieces (about 225 g)
- 1 medium Yukon gold potato, peeled and diced 1/2-inch (about 225 g)
Tomatoes & Broth
- 1 tbsp tomato paste (16 g)
- 1 can (14.5 oz / 411 g) diced tomatoes with juices
- 6 cups low-sodium vegetable broth (1.4 L), plus more hot water as needed
- 1 bay leaf
- 1 tsp dried oregano (2 g)
- 1/2 tsp dried thyme (0.5 g)
- 1/4 tsp red pepper flakes (optional)
- 1 to 1 1/2 tsp fine sea salt, divided, to taste
- Freshly ground black pepper, to taste
Beans & Pasta
- 1 can (15 oz / 425 g) cannellini beans, drained and rinsed
- 2/3 cup acini di pepe (small pasta pearls), about 110 g
Finish & Garnish
- 1/4 cup basil pesto (60 g), plus extra for serving
- Freshly grated Parmesan or Pecorino Romano, for serving (optional)
- Fresh basil leaves, torn (optional)

Step-by-Step Instructions
Step 1: Prep the vegetables
Dice the onion, carrots, and celery evenly so they cook at the same rate. Chop the zucchini and potato into 1/2-inch pieces. Mince the garlic. Rinse and drain the cannellini beans. Keep everything within reach; the early steps go quickly.
Step 2: Build the soffritto
Heat a large heavy-bottomed pot or Dutch oven over medium heat. Add the olive oil, then the onion, carrot, and celery. Season with 1 teaspoon salt. Cook, stirring occasionally, until softened and lightly golden at the edges, 8–10 minutes. The vegetables should be tender but not browned aggressively—this forms the flavor base.
Step 3: Add aromatics and tomatoes
Add the garlic and tomato paste; cook 1 minute, stirring, until fragrant and the paste darkens slightly. Pour in the diced tomatoes with their juices and simmer 2 minutes to marry flavors, scraping up any fond from the bottom of the pot.
Step 4: Simmer the vegetables
Add the vegetable broth, bay leaf, oregano, thyme, red pepper flakes (if using), potato, and zucchini. Bring to a boil over medium-high heat, then reduce to a gentle simmer (about 190–200°F / 88–93°C). Cook uncovered until the potato is just tender when pierced, 12–15 minutes. Adjust heat to maintain small, steady bubbles.
Step 5: Cook pasta and warm the beans
Stir in the acini di pepe and cannellini beans. Simmer, stirring occasionally, until the pasta is al dente, 8–10 minutes. If the soup looks too thick as the pasta releases starch, add 1/2–1 cup hot water to reach your preferred consistency.
Step 6: Finish with pesto
Turn off the heat, remove the bay leaf, and stir in the pesto until the broth turns a fragrant, slightly creamy reddish-green. Taste and season with additional salt and several grinds of black pepper. The pesto is salty—balance carefully.
Step 7: Serve
Ladle into warm bowls and top with a small swirl of extra pesto, grated Parmesan, and torn basil. Serve immediately with crusty bread. The soup will continue to thicken as it stands; loosen with hot water as needed.
Pro Tips
- Salt in layers: a little with the soffritto, then adjust at the end after the pesto goes in.
- Mind the pasta: tiny shapes cook fast. Start checking at 7 minutes to prevent mushiness.
- Broth balance: if using a salted broth, start with 1 tsp salt total and add more only after tasting.
- Texture control: keep extra hot water or broth nearby to thin the soup just before serving.
- Pesto power: stir pesto off the heat to preserve its fresh basil aroma and vibrant color.
Variations
- Gluten-free: use a small gluten-free pasta or stir in 3/4 cup cooked brown rice at the end.
- Heartier: sauté 2 oz diced pancetta with the soffritto; reduce added salt accordingly.
- Seasonal swap: add chopped green beans or shredded cabbage in Step 4, or a handful of baby spinach at the end to wilt.
Storage & Make-Ahead
Refrigerate soup (with pasta) in an airtight container for up to 4 days; it will thicken—thin with water when reheating over low heat. For best texture if making ahead, store the cooked pasta separately and add to hot soup when serving. Freeze base soup (without pasta and without pesto) up to 3 months; add freshly cooked pasta and stir in pesto after reheating to a simmer.
Nutrition (per serving)
Approximate values: 340 calories; 16 g fat; 45 g carbohydrates; 9 g fiber; 12 g protein; 900 mg sodium. Values will vary with brand of broth, pesto, and cheese.
