Hearty homemade meatballs seasoned with Italian herbs, garlic, and parsley get tossed in a rich, umami-packed tomato sauce and served over tender spaghetti. This vegan take on the Italian-American classic is every bit as comforting as the original.
Spaghetti and meatballs is one of those dishes that instantly pulls you back to simpler days. This version is entirely plant-based, but it carries the same dose of nostalgia: hearty, meaty meatballs loaded with Italian herbs, garlic, and parsley, smothered in an umami-rich marinara, and served over tender spaghetti. Comforting and genuinely familiar.
It also works year-round. Grate on some vegan cheese in winter, or finish with fresh chopped basil once the weather warms up.
As for how these compare to the real thing: next to pork or beef meatballs, these are a touch more tender, closer in texture to a hamburger steak than a firm, dense meatball. They’re still genuinely meaty, a little chewy, and satisfyingly juicy.
Why This Recipe Works
A completely plant-based classic
Plenty of vegan spaghetti and meatball recipes lean on quinoa, lentils, or chickpeas as a base. Those work fine on their own, but if you’re after a genuinely chewy, meaty bite, they tend to fall short.
This recipe wasn’t built to trick meat-eaters, though it wouldn’t be a bad side effect. The real goal was a dish vegans and non-vegans can both sit down and actually enjoy together, and that’s exactly what it delivers.
It started from a base vegan meatball recipe, retested multiple times until the texture and seasoning checked every box. The result holds together well enough to pan-fry, stays slightly chewy, and delivers a genuinely satisfying bite. It does contain textured vegetable protein and vital wheat gluten, but you would never guess either is in there from taste alone.
Ingredient Details
TVP
TVP shows up in a lot of recipes on this site, including high-protein vegan burgers, vegan fish fillets, and even vegan roast pork. Here, it brings most of the chewiness and meatiness to the meatballs.
Recommendation: almost any TVP works. Chunks, strips, and slices have all been tested with great results. Soy curls are a slightly less processed alternative made from whole soybeans rather than defatted soy flour, and they work here too, just follow the same basic technique either way.
White beans
Cooked white beans add tenderness and help build structure. Canned beans work perfectly fine, no need to cook them from scratch. Since they’re blended with a good amount of aromatics, there’s no beany flavor left in the final meatballs. Black beans, red kidney beans, or black-eyed peas all substitute well.
Herbs and aromatics
A simple but effective combo of dried thyme, bay leaf, and Italian seasoning forms the base, with smoked paprika, onion powder, and black pepper adding depth. A handful of parsley finishes it off with freshness. Flat-leaf parsley gives the best texture; curly parsley works too, but can turn slightly gritty.
Soy sauce
A splash of soy sauce boosts savoriness and depth. A few drops of dark soy sauce is optional if you want a darker color on the finished meatballs.
Vital wheat gluten
This is what holds the mixture together and gives the meatballs their meaty, slightly chewy bite, so it’s not one to skip. All-purpose flour has been tested as a substitute, and while the meatballs technically hold together, the texture turns dense and sticky rather than chewy. Vital wheat gluten really is the better call here.
Tomato sauce
A jar of store-bought tomato sauce keeps this simple, though homemade works too if you prefer. Marinara or basil tomato sauce are the go-to picks; swap in arrabbiata for a spicier version.
Spaghetti
Any long noodle works here: fettuccine, linguine, or tagliatelle are all fair game if spaghetti isn’t what you have on hand.
How It’s Done
1. Make the meatballs
2. Combine
Tips
Variations
Want more texture in the sauce? Stir in chopped sun-dried tomatoes, olives, corn, or marinated artichoke hearts. The options here are genuinely wide open.
Play with the seasonings. Italian seasoning is the default here, but any dried herb blend you like works. Processing the beans with a handful of fresh basil also adds a nice hit of freshness.
Serving Suggestions
Fresh chopped basil is the go-to garnish on warmer days. Since this is genuinely an all-season dish, grated vegan mozzarella or parmesan makes it heartier for cooler months, and a pinch of red pepper flakes adds a spicy kick whenever you want one.
Storing and Freezing
Cooked meatballs and sauce keep in an airtight container in the fridge for up to 3 to 4 days. For longer storage, steam the meatballs and refrigerate them separately for up to 4 days, then shallow-fry and toss in sauce right before serving. The meatballs also freeze well once cooked; thaw before reheating for the best texture.
Frequently Asked Questions
Is this recipe gluten-free?
No, and it’s not really adaptable to be. Both the TVP and vital wheat gluten are essential to the texture here, so there isn’t a reliable gluten-free substitution to recommend.
Can I bake the meatballs instead of steaming or pan-frying?
Baking has been tested, but the results came out too hard on the outside compared to pan-frying or air-frying. Stick with one of those methods for the best texture.
Can I make the meatballs ahead and store them uncooked?
Steam the meatballs and refrigerate for up to 4 days. When ready to eat, shallow-fry them and toss straight into the sauce.
And there you have it, a flavor-packed dish perfect for a cozy weekend dinner. Hope you love it as much as we do.
More Pasta Recipes to Try
Creamy Caramelized Onion Pasta · Easy Leek Pasta · Creamy Kimchi Pasta · Easy Vegan Pasta Stir-Fry
Vegan Spaghetti and Meatballs
Ingredients
For the meatballs
- 2 cups (200g) TVP chunks or strips
- 1 cup (240ml) hot vegetable broth, for rehydrating
- 1 can (15 oz) white beans, drained and rinsed
- 3 cloves garlic, minced
- ⅓ cup (75g) vital wheat gluten
- 2 tbsp soy sauce
- 1 tsp dried thyme
- 1 bay leaf, crumbled (or ½ tsp ground bay leaf)
- 1 tbsp Italian seasoning
- 1 tsp smoked paprika
- 1 tsp onion powder
- ½ tsp black pepper
- ⅓ cup (15g) chopped flat-leaf parsley
- 2 tbsp neutral oil, for pan-frying
For serving
- 1 jar (24 oz) marinara or basil tomato sauce
- 12 oz (340g) spaghetti
- Fresh basil or grated vegan parmesan, for garnish
- Red pepper flakes (optional)
Instructions
- Rehydrate the TVP: pour the hot vegetable broth over the TVP in a bowl and let sit 10 minutes until softened. Drain any excess liquid, then pulse in a food processor until finely textured, less than ¼ inch in size.
- Process the beans: in the same food processor, combine the white beans and minced garlic and pulse until mostly smooth.
- Combine the mixture: in a large bowl, mix the processed TVP, bean mixture, vital wheat gluten, soy sauce, thyme, bay leaf, Italian seasoning, smoked paprika, onion powder, black pepper, and parsley. Knead by hand for 1 to 2 minutes until well combined and slightly elastic.
- Shape the meatballs: form the mixture into balls about 1.5 inches wide. For the best texture, refrigerate at least 1 hour, or ideally overnight.
- Cook the meatballs: heat oil in a skillet over medium heat and pan-fry the meatballs, turning occasionally, until browned on all sides, about 8 to 10 minutes. Alternatively, air-fry at 375°F (190°C) for 12 to 15 minutes, or bake at 400°F (200°C) for 20 minutes, flipping halfway.
- Cook the spaghetti: boil according to package directions. Reserve a splash of pasta water before draining.
- Combine: warm the tomato sauce in a large pan, thinning with a splash of water or reserved pasta water if needed. Add the cooked meatballs and simmer gently for 2 to 3 minutes, just enough to coat them without turning them mushy.
- Serve: toss the spaghetti with a portion of the sauce, then top with meatballs and extra sauce. Garnish with fresh basil, vegan parmesan, or red pepper flakes as desired.
Notes
- Make ahead: shape and refrigerate the raw meatballs up to a day in advance for a meatier texture.
- Freezing: cooked meatballs freeze well. Thaw in the fridge overnight before reheating in sauce.
- Not gluten-free: both TVP and vital wheat gluten are essential to the texture and cannot be reliably substituted.

