Mushroom meatballs are a plant-based alternative to traditional meatballs — made from finely chopped mushrooms, breadcrumbs, parmesan, egg, and herbs, pan-fried until browned and then simmered in marinara sauce until everything comes together.
They hold their shape better than most vegetarian meatball recipes because the mushrooms provide both moisture and a meaty texture that other vegetables can’t quite replicate.
Serve them over pasta, in a sub, or straight from the pan with bread on the side — they work in any of those formats.

Ingredients
Makes: about 24 meatballs (serves 4–6)
For the meatballs:
- 500g (about 1 lb) cremini or portobello mushrooms, finely chopped
- 1/2 cup breadcrumbs (panko or regular)
- 1/2 cup grated parmesan
- 2 eggs, beaten
- 3 cloves garlic, minced
- 1/4 cup fresh parsley, finely chopped
- 1 teaspoon Italian seasoning
- 1/2 teaspoon smoked paprika
- 1/2 teaspoon onion powder
- 1/2 teaspoon salt
- 1/4 teaspoon black pepper
- 2 tablespoons olive oil for frying
For the marinara sauce:
- 1 can (28 oz) crushed tomatoes
- 3 cloves garlic, minced
- 1 tablespoon olive oil
- 1 teaspoon dried basil
- 1/2 teaspoon dried oregano
- 1/2 teaspoon sugar (optional, to balance acidity)
- Salt and pepper to taste
- Crusty bread
Why You Must Try This Mushroom Meatballs Recipe
Mushroom meatballs work where a lot of vegetarian meatball recipes fall short because mushrooms have enough structural integrity to hold a ball shape and enough umami to taste genuinely savory rather than just starchy or beany.
The key is cooking the mushrooms properly before they go into the mixture — raw mushrooms have too much water and will make the meatballs wet and fragile. Once the moisture is driven out and the mushrooms are browned and concentrated, the mixture binds well and produces meatballs that brown properly in the pan and hold together through simmering in sauce.
The parmesan and egg tie the whole thing together. The finished result is something that works on pasta night without anyone feeling like they’re eating a substitute.
Cook the Mushrooms First
This step is what makes or breaks mushroom meatballs and most people either skip it or don’t do it thoroughly enough. Finely chop the mushrooms — you want small, even pieces rather than chunks.
Heat a tablespoon of olive oil in a large pan over high heat and add the mushrooms. Cook without stirring for 2 to 3 minutes, then stir and cook for another 3 to 4 minutes until all the liquid has evaporated and the mushrooms look dry, slightly browned, and reduced in volume.
Add the garlic and cook for another minute. Season with salt. Remove from the heat and spread on a plate to cool completely before mixing with the other ingredients. If you skip the cooling step, the heat from the mushrooms will partially cook the egg when you add it, which affects the texture of the finished meatball.
Mix and Shape
Transfer the cooled mushroom mixture to a large bowl. Add the breadcrumbs, parmesan, beaten eggs, parsley, Italian seasoning, smoked paprika, onion powder, salt, and pepper.
Mix well until everything is evenly combined. The mixture should hold together when pressed in your palm — if it’s too wet to shape, add breadcrumbs a tablespoon at a time. If it’s too dry and crumbly, add a small amount of olive oil.
Refrigerate the mixture for 15 to 20 minutes before rolling — this firms it up and makes the meatballs easier to shape cleanly. Roll each portion into a ball using lightly oiled hands, pressing firmly to compact them. A tablespoon-sized scoop gives you meatballs that cook evenly and are easy to eat.
Brown in the Pan
Heat olive oil in a large non-stick or cast iron skillet over medium-high heat. Add the meatballs in a single layer with space between each one — work in batches if your pan isn’t large enough.
Let them cook without moving for 2 minutes until the bottom is browned, then turn gently and brown on another side. Continue turning until they’re browned on most surfaces — about 6 to 8 minutes total.
Don’t try to flip them before they’re ready — a meatball that hasn’t formed a crust will break apart when you try to move it. The browning step isn’t just cosmetic — it adds flavor and helps the meatball hold its structure when it goes into the sauce.
Make the Marinara and Simmer
In the same pan used for the meatballs, add a tablespoon of olive oil over medium heat. Add the garlic and cook for 90 seconds. Pour in the crushed tomatoes, add the basil, oregano, sugar if using, salt, and pepper.
Stir and bring to a simmer. Nestle the browned meatballs into the sauce, spooning some sauce over each one. Reduce heat to low, partially cover, and simmer for 15 minutes. During this time the meatballs absorb the tomato flavor and the sauce thickens slightly. The meatballs will also soften slightly in the sauce — this is expected and makes them more tender rather than compromising their structure.
Plate and Finish
Serve the meatballs and sauce over cooked spaghetti or any pasta you have. Spoon extra sauce from the pan over the top. Scatter fresh parsley or torn basil leaves over the surface, and grate parmesan directly over each bowl.
The meatballs are also good served in a toasted sub roll with sauce and melted mozzarella on top — that version works well as a weeknight sandwich. If you’re serving them as a party appetizer, serve them in the pan with toothpicks and the sauce alongside for dipping.
How To Make This Mushroom Meatballs Recipe Better
These changes improve the base recipe or push it in a different direction:
Use a mix of mushrooms. Combining cremini with a smaller amount of dried porcini — rehydrated and finely chopped — adds a deeper, earthier flavor to the meatballs. The porcini soaking liquid can also be added to the marinara for extra depth.
Add lentils for extra structure. Stir 1/3 cup of cooked brown lentils into the mushroom mixture before shaping. They add protein, help bind the meatballs, and give each one more substance without changing the flavor significantly.
Bake instead of pan-fry. Place shaped meatballs on an oiled baking sheet and bake at 400°F for 20 to 22 minutes, turning once halfway, until browned on the outside. Then simmer in the sauce as directed. Baking is less hands-on than pan-frying and works well if you’re making a large batch.
Make them spicy. Add 1/4 teaspoon of red pepper flakes to the meatball mixture and use an arrabbiata-style sauce instead of plain marinara — crushed tomatoes with extra garlic and chili. The heat works well with the earthiness of the mushrooms.
Swap the marinara for a creamy tomato sauce. Add 1/4 cup of heavy cream or coconut cream to the finished marinara and stir through. The sauce becomes richer and slightly sweet, which pairs particularly well with the mushrooms.
Storage
Store cooked meatballs in sauce in an airtight container in the fridge for up to 4 days. They reheat well on the stovetop over low heat — add a splash of water or extra crushed tomatoes if the sauce has thickened. The meatballs also freeze well for up to 2 months, either in sauce or without.
Freeze in sauce for the most convenient reheating — thaw overnight in the fridge and reheat gently on the stovetop. Uncooked shaped meatballs can be frozen on a tray then transferred to a bag — cook directly from frozen in the oven at 400°F for 25 to 28 minutes before simmering in sauce.
Why Do My Mushroom Meatballs Fall Apart?
Mushroom meatballs fall apart for two main reasons. The first is excess moisture in the mushrooms — if the mushrooms aren’t cooked until completely dry before mixing, the water they release during baking or frying makes the mixture too wet to hold together.
Cook them on high heat until all the liquid evaporates and they look dry and slightly browned. The second reason is not enough binder — the egg and parmesan together are what hold the mixture together, and if the ratio is off or the mixture is too loose, the meatballs won’t set properly when they cook.
Adding breadcrumbs a tablespoon at a time fixes a mixture that’s too wet. Chilling the shaped meatballs before cooking also helps them firm up and reduces the chance of them breaking apart in the pan.
Can You Make Mushroom Meatballs Vegan?
Yes, with two substitutions. Replace the eggs with flax eggs — mix one tablespoon of ground flaxseed with three tablespoons of water per egg and leave for 5 minutes until gel-like. Two flax eggs replace the two regular eggs in this recipe. Replace the parmesan with nutritional yeast — use the same quantity.
Nutritional yeast adds a similar savory, slightly cheesy flavor without dairy. The vegan meatballs may be slightly more fragile than the original version since eggs bind more effectively than flax eggs, so handle them carefully when browning and make sure the mushroom mixture is very dry before shaping. Baking rather than pan-frying is easier for the vegan version since it puts less stress on the meatballs during cooking.
Mushroom meatballs are one of those vegetarian recipes that doesn’t ask anyone to compromise. They brown, they hold together in sauce, and they taste like something you’d order rather than something you settled for. Cook the mushrooms dry, chill the mixture before rolling, and the rest follows.

Ingredients
Method
- Heat 1 tablespoon olive oil in a large pan over high heat. Add finely chopped mushrooms and cook without stirring 2–3 minutes, then stir and cook 3–4 more minutes until all liquid has evaporated and mushrooms look dry and browned. Add garlic, cook 1 minute. Season with salt. Spread on a plate and cool completely.
- Combine cooled mushrooms with breadcrumbs, parmesan, beaten eggs, parsley, Italian seasoning, smoked paprika, onion powder, salt, and pepper. Mix until combined. If too wet, add breadcrumbs 1 tablespoon at a time. Refrigerate 15–20 minutes. Roll into balls using lightly oiled hands — about 1 tablespoon of mixture per ball.
- Heat remaining olive oil in a large skillet over medium-high heat. Add meatballs with space between each. Cook without moving 2 minutes until browned on the bottom. Turn gently and brown on remaining sides — 6–8 minutes total. Work in batches. Set aside.
- In the same pan, heat olive oil over medium heat. Add garlic and cook 90 seconds. Add crushed tomatoes, basil, oregano, sugar if using, salt, and pepper. Stir and bring to a simmer.
- Nestle browned meatballs into the sauce. Spoon sauce over each one. Reduce heat to low, partially cover, and simmer 15 minutes.
- Serve over cooked pasta with extra parmesan, fresh herbs, and crusty bread alongside.
Notes
- Cook mushrooms until completely dry before mixing — wet mushrooms cause meatballs to fall apart
- Cool the mushroom mixture fully before adding eggs — heat will partially cook them otherwise
- Chill shaped meatballs before frying — it helps them hold together in the pan
- Don’t flip too early — wait until a crust forms or they will break
- Bake option: 400°F for 20–22 minutes turning once, then simmer in sauce
- Vegan version: use 2 flax eggs (1 tbsp ground flax + 3 tbsp water each) and nutritional yeast instead of parmesan
- Freeze cooked meatballs in sauce for up to 2 months
- Keeps in the fridge for up to 4 days — reheat gently on the stovetop


