Ingredients (~10 servings)
Meatballs
- 1 1/2 slices white bread, crusts removed and torn into small pieces (~1 cup)
- 2 1/2 Tbsp whole milk
- 1 small yellow onion, grated (~1/2 cup)
- 1 large egg, lightly beaten
- 2/3 cup grated Pecorino Romano cheese
- 1/2 cup chopped fresh Italian parsley
- 1 1/4 tsp kosher salt
- Pinch freshly-ground black pepper
- 2/3 lb ground beef (85/15)
- 2/3 lb ground pork
Soup
- 2 1/2 Tbsp olive oil
- 1 1/4 cups diced yellow onion (1/4 inch dice)
- 1 1/4 cups diced carrot (1/4 inch dice)
- 1 cup diced celery (1/4 inch dice)
- 15 cups chicken broth
- 1 large Parmigiano Reggiano rind
- 1 cup dried acini di pepe pasta
- 1 1/4 lbs escarole, washed well and roughly chopped
- Kosher salt and freshly-ground black pepper to taste
Make the Meatball Mix
In a large bowl, combine the torn bread and milk; let it sit for ~5 minutes until the bread absorbs the liquid.
Mash this panade with a fork until it forms a smooth paste.
Stir in the grated onion, egg, Pecorino Romano, parsley, salt, and black pepper until well combined.
Add the ground beef and pork, mixing just until combined – don’t overwork it or the meatballs will be tough.
Cook a small spoonful of the mixture in a skillet to taste for seasoning; adjust salt, cheese, or pepper as needed.
The mixture should be well-seasoned since it’s going into a large pot of broth.
Shape and Brown the Meatballs
Portion the mixture into 1 1/2 tsp portions – they’ll be about 3/4 inch diameter.
Dampen your hands with water before rolling to keep the mixture from sticking to your fingers.
Heat the olive oil in a large Dutch oven over medium-high heat until shimmering.
Brown half the meatballs for ~2-3 minutes per side – they don’t need to cook through completely.
Remove to a plate and repeat with the remaining meatballs.
The browning adds flavor to both the meatballs and the soup base.
Build the Soup Base
Drain off all but 2 Tbsp of fat from the pot.
Add the diced carrot, onion, and celery with a pinch each of salt and pepper.
Cook, stirring frequently, until the vegetables start to soften – about ~6-8 minutes.
You want them to release their moisture and start to caramelize slightly.
Pour in the chicken broth, scraping up any browned bits from the bottom of the pan.
Add the meatballs back with any accumulated juices, plus the Parmigiano rind.
Finish the Soup
Bring to a boil and stir in the acini di pepe pasta.
Reduce heat to a simmer, partially cover, and cook for ~12-15 minutes until the pasta is tender.
Remove and discard the cheese rind.
Add the chopped escarole and simmer uncovered until wilted and tender – about ~5 minutes.
The escarole will cook down significantly, so don’t worry if it looks like too much at first.
Skim any excess fat from the surface with a spoon.
Taste and adjust seasoning with salt and pepper as needed.
Serve hot with crusty Italian bread and extra grated Parmesan if you like.

Italian Wedding Soup
Ingredients
Meatballs
- 1 1/2 slices white bread ~1 cup, crusts removed and torn into small pieces
- 2 1/2 Tbsp whole milk
- 1 small yellow onion ~1/2 cup, grated
- 1 large egg lightly beaten
- 2/3 cup grated Pecorino Romano cheese
- 1/2 cup chopped fresh Italian parsley
- 1 1/4 tsp kosher salt
- Pinch freshly-ground black pepper
- 2/3 lb ground beef 85/15
- 2/3 lb ground pork
Soup
- 2 1/2 Tbsp olive oil
- 1 1/4 cups diced yellow onion 1/4 inch dice
- 1 1/4 cups diced carrot 1/4 inch dice
- 1 cup diced celery 1/4 inch dice
- 15 cups chicken broth
- 1 large Parmigiano Reggiano rind
- 1 cup dried acini di pepe pasta
- 1 1/4 lbs escarole washed well and roughly chopped
- Kosher salt and freshly-ground black pepper to taste
Instructions
- Combine torn bread and milk in large bowl, let sit 5 minutes, then mash into smooth paste.
- Stir in grated onion, egg, Pecorino Romano, parsley, salt, and pepper.
- Add ground beef and pork, mixing just until combined.
- Shape mixture into 3/4 inch meatballs using dampened hands.
- Heat olive oil in Dutch oven over medium-high heat and brown meatballs in batches, 2-3 minutes per side. Remove to plate.
- Drain all but 2 Tbsp fat, add diced carrot, onion, celery, salt, and pepper. Cook 6-8 minutes until softened.
- Pour in chicken broth, scraping up browned bits. Return meatballs and add Parmigiano rind.
- Bring to boil and add acini di pepe pasta.
- Reduce to simmer, partially cover, and cook 12-15 minutes until pasta is tender.
- Remove and discard cheese rind.
- Add chopped escarole and simmer uncovered 5 minutes until wilted.
- Skim excess fat from surface, taste and adjust seasoning.
- Serve hot with crusty bread and extra Parmesan.






