Herbed Italian meatballs smell like the kind of dinner that makes people drift into the kitchen without being called. Garlic, parsley, grated onion, and Parmesan hit the bowl first, and the whole room gets that warm, savory edge that says a pot of tomato sauce is not far behind.
These herbed Italian meatballs like Nonna used to make are soft in the middle, browned on the outside, and sturdy enough to sit in sauce without turning to mush. The trick is not fancy. It’s bread soaked in milk, a light hand with the mixture, and enough simmer time for the sauce to turn glossy and cling to every bite.
I trust a meatball recipe only when the first bite feels plush, not bouncy. Dry meatballs are a waste of good sauce.
This version leans Italian-American, which means the meat is seasoned from the inside, the herbs are fresh enough to smell green, and the tomato sauce gets a little help from a Parmesan rind if you’ve got one hanging around. It’s the sort of pot that can land on spaghetti, tuck into a roll, or sit beside roasted peppers and salad without looking lost. Once you’ve made it, the rhythm starts to feel natural. Then you stop measuring by memory and start measuring by smell.
Why These Italian Meatballs Taste Like Sunday Dinner
The story here is not about one exact village recipe, because meatballs rarely live in a museum. They live in family kitchens, in bowls that get scraped clean, in sauce pots that sit on the back burner while somebody sets the table and somebody else steals one from the pan.
What makes this style special is the balance. The meat is rich but not heavy, the herbs are bright without tasting grassy, and the sauce is deep enough to taste like it simmered longer than it actually did. Some families call it sauce, some call it gravy, and honestly the skillet does not care.
A lot of old-school meatball recipes get one thing wrong: they act as if the meat alone should carry the whole dish. It shouldn’t. The bread-and-milk panade, the grated onion, and the Parmesan are doing quiet work in the background. That’s the difference between a meatball that feels tight and one that gives a little under your fork.
The other piece people miss is the sear. A pale meatball floating in tomato sauce can be fine. A browned meatball with a thin crust is better. The browned bits that stick to the pan turn into flavor when you build the sauce, and that’s one reason this version tastes fuller than the plain boil-and-go approach.
Why You’ll Love These Meatballs
-
Tender in the middle: The milk-soaked bread and grated onion keep the centers soft even after a 20-minute simmer.
-
Browned, not greasy: A quick sear gives the meatballs a thin crust that stands up to sauce instead of dissolving into it.
-
Sauce that actually clings: Tomato paste, a short simmer, and a Parmesan rind give the sauce enough body to coat every bite.
-
Built for leftovers: These meatballs taste even better after a night in the fridge because the herbs settle into the sauce and the flavor gets rounder.
-
Easy to scale up: Double the batch and freeze half; the shape and browning method stay the same, which makes a big pot feel manageable.
-
Flexible at the table: Serve them with spaghetti, rigatoni, polenta, or a crusty roll, and they still taste like the same dinner.
What You Need and How Long It Takes
A full batch makes enough for a real dinner, not a sad little side dish. You’ll get about 18 to 20 medium meatballs, which comfortably feeds 6 people with pasta and salad, or 4 very hungry people who plan to go back for seconds.
Yield: Serves 6 | Makes 18 to 20 meatballs
Prep Time: 30 minutes
Cook Time: 50 minutes
Total Time: 1 hour 20 minutes
Difficulty: Intermediate — the steps are straightforward, but the mixing, shaping, and browning need a little attention so the meatballs stay tender.
Chill/Rest Time: 10 to 15 minutes optional if the mixture feels soft
Best Served: Warm, after a 5-minute rest in the sauce
For the Meatballs:
- 1 cup fresh breadcrumbs made from 3 slices day-old Italian bread, torn into pieces — the bread gives the meatballs their soft, plush interior.
- 1/2 cup whole milk — soaks into the bread and keeps the texture tender.
- 1 lb ground beef, preferably 85/15 — enough fat to stay juicy after simmering.
- 1 lb ground pork — adds richness and helps the meatballs stay soft.
- 2 large eggs — hold the mixture together without making it stiff.
- 1/2 cup finely grated Parmigiano-Reggiano — adds salt, depth, and that savory edge.
- 1/3 cup finely chopped flat-leaf parsley — brings the fresh herb flavor Nonna-style meatballs need.
- 2 tablespoons finely chopped fresh basil — a little sweetness and a green note.
- 1 small yellow onion, grated and lightly squeezed dry — adds moisture and sweetness without chunks.
- 4 cloves garlic, minced — enough garlic to show up without taking over.
- 1 teaspoon dried oregano — gives the mixture that familiar Italian smell.
- 1 3/4 teaspoons kosher salt — seasons the meat inside the bowl, not only in the sauce.
- 1/2 teaspoon freshly ground black pepper — adds bite.
- 1/4 teaspoon red pepper flakes, optional — a faint warm finish.
- 2 tablespoons olive oil, for browning — helps the crust form fast.
For the Tomato Sauce:
- 2 tablespoons olive oil — for softening the onion.
- 1 small yellow onion, finely diced — builds the sauce from the bottom up.
- 3 cloves garlic, minced — keeps the tomato sauce fragrant.
- 2 tablespoons tomato paste — deepens the color and makes the sauce taste cooked.
- 2 (28-ounce) cans crushed tomatoes — the body of the sauce.
- 1 cup low-sodium chicken stock or water — loosens the tomatoes so they simmer smoothly.
- 1 bay leaf — gives the sauce a quiet herbal note.
- 1 Parmesan rind, optional — melts a little richness into the sauce.
- 1 teaspoon kosher salt — starts the sauce seasoning.
- 1/2 teaspoon black pepper — keeps the tomato flavor sharp.
- 1 teaspoon sugar, optional — softens acidic tomatoes if needed.
- 1/4 cup chopped fresh basil or parsley, for finishing — brightens the final pot.
For Serving:
- 1 pound spaghetti or 12 ounces rigatoni, cooked al dente — catches sauce in different ways.
- Extra grated Parmesan — for the table.
- Crusty bread, for serving — because nobody really wants to leave sauce in the bowl.
Why Each Ingredient Pulls Its Weight
The Meat Blend
What to use: 1 lb ground beef and 1 lb ground pork. The beef gives the meatballs structure; the pork brings fat and a softer bite.
Preparation: Keep both meats cold until you’re ready to mix, then break them into smaller pieces with your fingers so the seasonings can spread quickly and evenly.
Substitutions: All beef works if it’s 85/15, and a beef-veal mix makes a more delicate meatball. Turkey can work, but it needs extra care because lean meat dries out faster.
Tips: Don’t chase ultra-lean meat here. A little fat melts into the pan and into the sauce, and that’s what keeps the whole dish from feeling stern.
The Panade and Binder
What to use: 1 cup fresh breadcrumbs and 1/2 cup whole milk, plus 2 large eggs. This is the soft center that keeps the meatballs from tightening up.
Preparation: Let the bread soak in the milk for a few minutes until it looks shaggy and swollen, not dry and crumbly. Beat the eggs lightly before adding them so they spread through the mixture without streaks.
Substitutions: Panko can stand in if you use 3/4 cup and add a splash more milk. For a dairy-free version, use unsweetened oat milk; the result is a little less rich, but still workable.
Tips: The mixture should look moist, almost like seasoned stuffing, before the meat goes in. If it looks dry in the bowl, it will feel dry after cooking.
Herbs, Onion, and Garlic
What to use: 1/3 cup parsley, 2 tablespoons basil, 1 grated onion, 4 cloves garlic, and 1 teaspoon dried oregano. These are the flavors that make the meatballs taste alive.
Preparation: Grate the onion on the large holes of a box grater, then squeeze it lightly in your hand if it seems watery. Mince the garlic fine so no one bites into a raw chunk later.
Substitutions: Flat-leaf parsley is best, but curly parsley will work. If basil is scarce, use a little more parsley and add a pinch of dried marjoram or oregano.
Tips: Grating the onion is one of those annoying details that pays rent in tenderness. It disappears into the mix and keeps the meat moist without leaving hard little pieces behind.
Cheese and Seasoning
What to use: 1/2 cup finely grated Parmigiano-Reggiano, 1 3/4 teaspoons kosher salt, 1/2 teaspoon black pepper, and optional red pepper flakes.
Preparation: Grate the cheese very fine so it melts into the mixture instead of sitting in hard shards. Taste your Parmesan before you season the meat too heavily; some wedges are saltier than others.
Substitutions: Pecorino Romano makes a sharper, saltier meatball, which is fine if you like a brinier finish. If you use Pecorino, ease back on the salt by about 1/4 teaspoon.
Tips: Season the meat mixture before shaping. If you wait until after the meatballs are browned, the seasoning stays on the surface instead of working through the middle.
The Tomato Sauce
What to use: 2 tablespoons tomato paste, 2 cans crushed tomatoes, 1 cup stock or water, 1 bay leaf, and an optional Parmesan rind. This gives you a sauce that tastes cooked, not canned.
Preparation: Have everything measured before the onion goes into the pan; tomato paste burns fast, and once it scorches, the sauce tastes bitter.
Substitutions: Whole peeled tomatoes crushed by hand give a looser sauce with a little more texture. Passata makes a smoother sauce if that’s your preference.
Tips: Cook the tomato paste until it darkens a shade or two. That tiny step creates a deeper, sweeter sauce and keeps the finished pot from tasting sharp.
The Finish and Serving Layer
What to use: Fresh basil or parsley, pasta, Parmesan, and bread. The sauce does the heavy lifting, but the finish makes the bowl look and taste complete.
Preparation: Chop the herbs right before serving so they stay bright. Cook the pasta to al dente; it will keep a little bite when it meets the sauce.
Substitutions: If you don’t want pasta, serve the meatballs with polenta, mashed potatoes, or roasted vegetables. A good roll works just as well as spaghetti when you want something less formal.
Tips: Add fresh herbs off the heat. Basil turns dark and tired if it sits in a rolling simmer for too long.
The Tools That Make the Batch Easier

- Large mixing bowl — big enough to fold the meat without pressing it into a paste.
- Microplane or box grater — perfect for the Parmesan and the onion; a fine grate keeps the texture soft.
- Rimmed baking sheet lined with parchment — a place to park the shaped meatballs before browning.
- 12-inch cast-iron skillet or heavy stainless sauté pan — gives you a good crust without hot spots.
- Wide Dutch oven or deep skillet with a lid — best for simmering the sauce and meatballs together.
- Tongs or a fish spatula — helps you turn the meatballs without tearing them apart.
- Instant-read thermometer — the cleanest way to know when the centers hit 165°F.
- Measuring cups and spoons — the panade and salt need actual measurements; guessing here is how meatballs drift off course.
Mixing the Meatball Base Without Making It Tough
Do not knead this mixture like bread. That’s the fastest way to get meatballs with the texture of little rubber balls.
Make the Panade and Seasoning Base
- Put the breadcrumbs in a large mixing bowl and pour the milk over them. Stir lightly with a fork and let the mixture sit for 5 minutes, until the bread looks swollen and soft and the milk is mostly absorbed.
- Add the eggs, Parmesan, parsley, basil, grated onion, garlic, oregano, salt, black pepper, and red pepper flakes if you’re using them. Stir until the mixture looks evenly seasoned and damp, almost like a loose stuffing.
Fold in the Meat
3. Add the ground beef and ground pork to the bowl. Use your fingertips to fold the mixture from the outside in until the meat is evenly distributed, about 30 to 45 seconds. Stop as soon as the bowl no longer shows dry streaks — overmixing makes the meatballs dense and springy.
4. If the mixture feels very sticky, cover it and let it rest in the fridge for 10 to 15 minutes. It should still feel soft, but it needs enough structure to hold a round shape without slumping.
Browning, Saucing, and Finishing the Pot
What if the sauce is cooking and the meatballs still look pale? Good. That means you did the browning in the right order, instead of trying to cram every step into one pan.
Shape and Sear
5. Set a parchment-lined sheet pan next to the bowl. Lightly oil your hands, then portion the mixture into roughly 2-tablespoon portions and roll each one into a 2-inch ball. You should get 18 to 20 meatballs. Don’t compact them hard; coax them into shape and leave them a little loose.
6. Heat 2 tablespoons olive oil in a 12-inch skillet over medium to medium-high heat until it shimmers. Add the meatballs in a single layer, leaving space between them, and brown them in batches for 6 to 8 minutes total, turning every 1 to 2 minutes so they color on several sides. They do not need to cook through yet.
7. Transfer the browned meatballs to a plate and keep going with the rest. If the pan starts smoking, lower the heat a touch; if it looks dry, add another teaspoon of oil.
Build the Tomato Sauce
8. In a wide Dutch oven, heat the remaining 2 tablespoons olive oil over medium heat. Add the diced onion and cook for 5 to 7 minutes, stirring now and then, until it turns soft, glossy, and lightly golden at the edges. Stir in the garlic and tomato paste and cook for 1 minute, until the paste darkens and smells sweet instead of raw.
9. Add the crushed tomatoes, stock or water, bay leaf, Parmesan rind if using, salt, black pepper, and sugar if the tomatoes taste sharp. Bring the sauce to a gentle simmer, then cook uncovered for 10 minutes until it thickens a little and tastes less tinny.
10. Nestle the browned meatballs into the sauce. Cover partially and simmer on low for 20 to 25 minutes, turning the meatballs once halfway through if you can do it gently. They’re done when the centers reach 165°F and the sauce has turned glossy and brick red.
11. Turn off the heat and stir in the basil or parsley. Let the pot sit for 5 to 10 minutes before serving so the sauce settles and the meatballs stay juicy when you cut into them.
How I’d Put Them on the Table
Presentation: Spoon a shallow layer of sauce into wide bowls, then set 3 or 4 meatballs over spaghetti so the sauce slides around the pasta instead of burying it. A little extra Parmesan and a scatter of chopped parsley make the bowl look finished without fuss. If you’re serving them as a main without pasta, use a shallow platter and let the sauce pool around the meatballs instead of drowning them.
Accompaniments: Garlic bread is the obvious move, but a crusty loaf with a cracked, chewy interior is better because it can mop up sauce without collapsing. A simple salad with shaved fennel, arugula, or romaine gives the plate some sharpness. Roasted broccoli rabe, sautéed spinach, or green beans with olive oil all fit the tomato-and-herb lane without arguing with it.
Portions: Plan on 3 meatballs per adult if pasta is on the plate, or 4 if the meatballs are the main event with bread and salad. If you’re serving a crowd, keep the sauce loose enough to spoon over extra pasta at the end; it should feel generous, not dry and crowded. For smaller appetites, 2 meatballs over polenta with a spoon of sauce is enough to feel like dinner.
Beverage Pairing: A medium-bodied red with enough acidity to handle tomato works best — Chianti, Barbera, or a dry Lambrusco all make sense here. If you want something nonalcoholic, sparkling water with lemon or a bitter orange soda keeps the palate clean between bites.
Small Moves That Make a Big Difference
Flavor Enhancement: A Parmesan rind in the sauce is worth the drawer space. It doesn’t make the sauce cheesy in a heavy way; it just rounds the edges and leaves the tomato tasting deeper. If you want one extra finish, stir in 1 tablespoon of cold butter right before serving. It softens sharp tomatoes without turning the sauce creamy.
Time-Saver: Mix the sauce while the first batch of meatballs browns. The pan is already hot, and the whole dish comes together faster when one hand is building sauce while the other is turning meatballs. I also like to grate the onion straight over the bowl — fewer dishes, and the juice goes where it should.
Cost-Saver: Use supermarket ground beef and pork, not the pricey specialty stuff. The panade and herbs do the heavy lifting, and a good tomato sauce gives the meat enough support that you don’t need a fancy grind. Buy crushed tomatoes in the larger cans; they usually taste better than the smallest bargain tins.
Make-It-Yours: If you want a warmer, sausage-like flavor, add 1/2 teaspoon of fennel seed to the meat mixture and crush it between your fingers before it goes in. If you like a brighter finish, add a little more basil at the table instead of cooking it all in the pot. Tiny herb adjustments change the mood fast.
Where Meatballs Go Wrong

Most bad meatballs fail for the same few reasons, and every one of them shows up in the texture.
-
Overmixing the meat: The symptom is a tight, bouncy bite that feels more like sausage casing than tender meat. Fix it by folding the mixture only until the ingredients disappear into each other; if you can still see a tiny streak of bread, that’s fine.
-
Skipping the panade: Dry, crumbly meatballs are usually the result of meat mixed with seasoning and nothing else. Fix it by soaking the bread in milk and letting the mixture sit until it looks soft before the meat goes in.
-
Rolling them too tightly: If you pack the balls like snowballs, they come out dense and stubborn. Fix it by shaping gently with oiled hands and leaving the meat a little loose; they should hold together without looking polished.
-
Crowding the skillet: Pale meatballs with weak flavor often come from a crowded pan that steams instead of sears. Fix it by browning in batches and leaving space around each piece so the surface can color.
-
Boiling the sauce hard: A rolling boil can break the crust you built and make the sauce taste harsh. Fix it with a low simmer; the sauce should bubble lazily, not churn.
-
Underseasoning the mix: If the sauce tastes fine but the meatballs themselves taste flat, the seasoning never made it into the meat. Fix it by seasoning the mixture before shaping and tasting a tiny pinch of the raw mix on a spoon before rolling the whole batch.
Ways to Make the Recipe Your Own
Baked Sunday Tray: Shape the meatballs, place them on a parchment-lined sheet pan, brush lightly with olive oil, and bake at 425°F for 15 to 18 minutes until browned and cooked through. Then simmer them in the sauce for 10 to 15 minutes. This version keeps the stove cleaner and works well when you’re making a double batch.
All-Beef Red-Sauce Batch: Use 2 pounds of 85/15 ground beef instead of the beef-pork mix. Add 1 extra tablespoon of milk and 1 extra teaspoon of olive oil to keep the texture supple, because beef alone can lean firmer. The flavor is a little cleaner and less rich, which is good if pork isn’t your thing.
Turkey, Basil, and Ricotta: Swap the meat for 2 pounds of ground turkey and stir in 1/4 cup ricotta to soften the texture. Turkey needs a gentler hand and a lighter sear, so keep the heat moderate and don’t overcook it before the sauce stage. This version tastes brighter and a little lighter, but it still wants a rich tomato sauce.
Calabrian Heat: Add 1 tablespoon chopped Calabrian chiles to the sauce, or stir 1 teaspoon red pepper flakes into the meat if you want the heat baked in. The result is still family-style, just with more bite. It’s especially good with rigatoni because the ridges catch the spicy tomato sauce.
Gluten-Free Panade: Use 1 cup gluten-free breadcrumbs or crushed gluten-free crackers in place of the bread. Keep the milk the same, and let the mixture rest for the full 5 minutes so the crumbs soften fully. The texture stays close to the original, and the sauce covers any tiny difference.
Keeping Leftovers Tender
Cooked meatballs in sauce keep well, but only if you don’t let them dry out in the fridge. Store leftovers in an airtight container with enough sauce to coat the meatballs, and they’ll hold for 3 to 4 days refrigerated. At room temperature, don’t leave them out longer than 2 hours.
Freezing works best when the meatballs are already in sauce. Let the pot cool, transfer portions to freezer-safe containers or bags, and freeze for up to 2 months. If you want to freeze them before cooking, brown them first, cool completely, then freeze on a tray before bagging them; that keeps them from sticking together in one sad lump.
Reheat gently on the stovetop over low heat with the lid on, adding a splash of water or stock if the sauce has tightened up in the fridge. Ten to 15 minutes usually brings the whole pot back to life. The microwave works in a pinch, but use 50% power and cover the bowl so the meatballs don’t dry out at the edges.
The sauce can be made 1 to 2 days ahead on its own, and the meatball mixture can be mixed and shaped a day ahead if you keep it cold. In fact, the flavors settle a little overnight, which is one of those happy kitchen accidents that makes the next-day pot smell even better.
Questions People Ask Before the First Bite

Can I bake the meatballs instead of browning them in a skillet?
Yes. Bake them on a parchment-lined sheet pan at 425°F for 15 to 18 minutes until browned and cooked through, then slide them into the simmering sauce for 10 to 15 minutes. You’ll lose a little of the skillet crust, but you’ll gain speed and a cleaner stovetop.
Can I use all beef instead of beef and pork?
You can, and the meatballs will still taste good if you use 85/15 ground beef. They’ll be a little firmer and less rich, so keep the panade in place and avoid leaner beef unless you plan to add a spoonful of olive oil to the mixture.
Why do my meatballs fall apart in the pan?
Usually the mixture is too wet, too loose, or it never got enough time to rest before shaping. Add the meat gently, let the panade absorb the milk fully, and chill the mixture for 10 to 15 minutes if it feels floppy. Also, don’t flip them too soon; let the first side set before you turn them.
Do I have to use fresh breadcrumbs?
Fresh breadcrumbs give the softest texture, but panko can work in a pinch. If you use panko, start with 3/4 cup and add a little extra milk if the mixture still looks dry. The texture will be slightly different, but the meatballs will still be tender.
Can I make these ahead for a party?
Yes, and this is one of those dishes that behaves well when you plan ahead. You can brown the meatballs and make the sauce a day in advance, then simmer everything together right before serving. If you need to save time, shape the raw meatballs and keep them covered in the fridge for up to 24 hours.
What if the sauce tastes too acidic?
Tomatoes vary, and some cans taste sharper than others. Simmer the sauce a little longer, then add the optional teaspoon of sugar or a small knob of butter to soften the edge. A Parmesan rind also helps, especially if you’ve got one simmering in there.
Can I freeze the meatballs raw?
Yes, but freeze them on a tray first so they hold their shape, then move them to a bag once they’re solid. Cook them straight from frozen by browning them a little more slowly and giving the sauce extra time. If you’re freezing for convenience, cooked meatballs in sauce are easier to reheat later.
One More Bowl at the Table
There’s a reason a pot of meatballs disappears so fast. The sauce gets better as it sits, the herbs sink into the tomato, and the meat stays soft enough to cut with the side of a fork. That’s the whole point of this style: it’s hearty without being heavy, and familiar without tasting dull.
The best part is how forgiving it is once you understand the rhythm. Soak the bread. Mix lightly. Brown the meatballs. Let the sauce do its work. After that, the only real mistake is not making enough bread for the table.
Herbed Italian Meatballs Like Nonna Used to Make — Recipe Card
Recipe Name: Herbed Italian Meatballs Like Nonna Used to Make
Description: Tender beef-and-pork meatballs with parsley, basil, Parmesan, and a milk-soaked bread panade, simmered in a simple crushed tomato sauce until soft, rich, and ready for pasta or bread.
Prep Time: 30 minutes
Cook Time: 50 minutes
Total Time: 1 hour 20 minutes
Course: Main Course
Cuisine: Italian-American
Servings: 6
Calories: About 480 kcal per serving, not counting pasta or bread
Ingredients
For the Meatballs:
- 1 cup fresh breadcrumbs made from 3 slices day-old Italian bread, torn into pieces
- 1/2 cup whole milk
- 1 lb ground beef, preferably 85/15
- 1 lb ground pork
- 2 large eggs
- 1/2 cup finely grated Parmigiano-Reggiano
- 1/3 cup finely chopped flat-leaf parsley
- 2 tablespoons finely chopped fresh basil
- 1 small yellow onion, grated and lightly squeezed dry
- 4 cloves garlic, minced
- 1 teaspoon dried oregano
- 1 3/4 teaspoons kosher salt
- 1/2 teaspoon freshly ground black pepper
- 1/4 teaspoon red pepper flakes, optional
- 2 tablespoons olive oil, for browning
For the Tomato Sauce:
- 2 tablespoons olive oil
- 1 small yellow onion, finely diced
- 3 cloves garlic, minced
- 2 tablespoons tomato paste
- 2 (28-ounce) cans crushed tomatoes
- 1 cup low-sodium chicken stock or water
- 1 bay leaf
- 1 Parmesan rind, optional
- 1 teaspoon kosher salt
- 1/2 teaspoon black pepper
- 1 teaspoon sugar, optional
- 1/4 cup chopped fresh basil or parsley, for finishing
For Serving:
- 1 pound spaghetti or 12 ounces rigatoni, cooked al dente
- Extra grated Parmesan
- Crusty bread
Instructions
-
Put the breadcrumbs in a large bowl, pour in the milk, and let the mixture sit for 5 minutes until the bread softens.
-
Add the eggs, Parmesan, parsley, basil, grated onion, garlic, oregano, salt, pepper, and red pepper flakes if using. Stir until combined.
-
Add the ground beef and pork, then fold gently with your fingertips until just mixed.
-
Cover and chill for 10 to 15 minutes if the mixture feels soft or sticky.
-
Shape the mixture into 18 to 20 meatballs, about 2 tablespoons each.
-
Heat 2 tablespoons olive oil in a skillet over medium to medium-high heat and brown the meatballs in batches for 6 to 8 minutes total.
-
Transfer the browned meatballs to a plate.
-
In a Dutch oven, heat the remaining 2 tablespoons olive oil. Cook the diced onion for 5 to 7 minutes, then add the garlic and tomato paste and cook for 1 minute.
-
Add the crushed tomatoes, stock or water, bay leaf, Parmesan rind if using, salt, pepper, and sugar if needed. Simmer uncovered for 10 minutes.
-
Nestle the meatballs into the sauce and simmer partially covered on low for 20 to 25 minutes, until the centers reach 165°F.
-
Stir in the basil or parsley, rest for 5 minutes, then serve with pasta, Parmesan, and bread.
Notes:
- Browning the meatballs first gives the sauce deeper flavor.
- If the sauce thickens too much, loosen it with a splash of water or stock.
- These meatballs freeze well in sauce for up to 2 months.







