Make the Italian Wedding Soup Recipe now: tender meatballs, tiny pasta, and bright greens in a savory broth.
In a roomy matte-grey mixing bowl, combine the ground beef and pork with the dry breadcrumbs, finely grated Parmigiano-Reggiano, one tablespoon of chopped flat-leaf parsley, the lightly beaten egg, one finely minced garlic clove, 1/2 teaspoon fine sea salt and 1/4 teaspoon freshly ground black pepper. Gently fold with a fork or by turning the mixture with your hands just until the crumbs are moistened and the proteins hold together — you want a tender, slightly tacky texture, not a dense paste. Portion out roughly two-teaspoon-sized mounds and roll into 3/4-inch (2 cm) spheres, placing them in a single layer on a clean white ceramic plate to chill briefly; chilling firms their exterior and helps them hold their shape when they hit the hot broth.

Heat a little extra-virgin olive oil until shimmering (off-camera, on the stove) and add finely diced yellow onion, carrot and celery. Cook just until the onion is translucent and the vegetables are softened and glossy but not colored — they should be softened, slightly glossy with softened edges and a plump, yielding bite. Stir in the remaining minced garlic for the last 30–60 seconds until fragrant; the mixture should smell sweet and gently aromatic, the garlic integrated but not browned. Transfer the softened mirepoix briefly into a shallow serving pan so it sits ready to join the broth.

Pour the low-sodium chicken broth into a large, heavy, matte-black stock pot (placed on the table for photography), stir in a bay leaf and thyme, and season with 1/2 teaspoon salt and 1/4 teaspoon freshly ground black pepper. Bring the clear, golden broth just to a gentle simmer off-camera; the surface should appear glossy with a few steady, small bubbles around the edges and the aromatics floating like little flecks. The pot holds a luminous, light-broth base that will cradle the meatballs — this is the calm, savory sea they will swim in.

Carefully slide the chilled, uniform small meatballs into the warm broth so each sits independently without crowding; allow them to set for two minutes before any movement so a light exterior seal forms. Maintain a gentle simmer while the meatballs cook through to an opaque, slightly firm texture (target 165°F/74°C internal), the surfaces showing a faint cooked crust but still tender. Rest a slotted spoon on the pot rim — the focus here is on evenly suspended, plump meatballs bathing in clear broth.

Once the meatballs are mostly cooked, stir in the acini di pepe (or small pastina) so it disperses evenly through the pot. Continue simmering until the tiny pasta is just al dente, with a clean bite and swollen, glossy pearls clinging to a few meatballs — the pasta should plump but not fall apart and the broth should still feel brothy, not starchy. Drain a touch of excess fat if needed, and taste to correct seasoning so the broth sings with balanced salt and pepper.
Fold in the chopped escarole or baby spinach and stir only until the greens are just wilted and vibrantly bright green — tender but with a little stem texture for contrast. Remove and discard the bay leaf, turn off the heat and let the soup rest 3–5 minutes so flavors meld and the pasta absorbs a little more broth; the finished texture should be brothy yet hearty, with distinct tender meatballs, al dente pasta, and vivid greens.
Ladle the hot soup into warmed wide, shallow soup bowls so each portion presents several meatballs, a spoonful of glossy acini di pepe and a nest of wilted greens in a golden broth. Finish each bowl with a generous grating of Parmigiano-Reggiano, a pinch of the reserved chopped parsley, and a lemon wedge at the side to brighten if desired. Serve immediately with crusty bread for dipping; to store, cool to room temperature (no more than 2 hours) then refrigerate in airtight containers for up to 3 days, adding a splash of broth or water when reheating to restore the original brothy texture.
