This vegetarian meatloaf is hearty and pleases even the most passionate meat eaters! This family favorite recipe with loads of 5 star reviews from readers.

Every now and then you come across a recipe that is a cut above the rest – one that makes everything you’ve made before pale in comparison. I present: my vegetarian meatloaf recipe!
This meatloaf is made of nuts, rice, mushrooms, herbs, and cheese. Somehow, it melds into a texture just like a meatloaf that tastes amazing – maybe even better than the meat version! It’s perfect for dinner parties, or even Thanksgiving for Christmas dinner. My mom always requests this for family dinners, and she’s a huge meat lover – so that’s saying something.
The secrets to a meaty flavor and texture
This meatloaf is incredibly hearty, the perfect vegetarian recipe for meat lovers. My mom is a huge carnivore, and she absolutely adores this recipe! She even requests to make it every time that we come home for a visit.
It’s kind of mind-boggling how tasty this vegetarian meatloaf turns out. You’d almost swear from the texture that it’s an actual meatloaf! Here are some of the secrets:
- Mushrooms: Once the meatloaf is cooked, you won’t know there are any mushrooms. But they are essential to the savory flavor and a chewy texture.
- Toasted nuts. Another secret is a mixture of cashews and walnuts that are toasted in the oven until golden and fragrant. Combined with the sautéed mushrooms, toasted nuts add a subtle meaty flavor to the dish and give this nut loaf some texture.
- Swiss cheese & cottage cheese: Swiss cheese brings a subtle meatiness and cottage cheese brings in the perfect texture complement.

5 star reader reviews
“I had to tell you how fantastic this vegetarian meatloaf was! So flavorful and easy to make! Even my son, who loves his meat, loved it!” -Karin
“This Vegetarian Meatloaf is Freaking AWESOME!! Worth the time to chop everything up. Definitely will make it again.” -Nora
Recipe overview
This vegetarian meatloaf recipe requires a bit of time to make, but the end result is totally worth it! To make this veggie meatloaf, here are the basic steps (or go to the full recipe below):
- Cook the rice: Cook the brown rice. Doing this in advance cuts down on prep time.
- Toast the nuts: Toast walnuts and cashews in the oven until golden brown.
- Sauté the onion and mushrooms: Sauté the veggies with herbs and spices.
- Mix: Combine the rice, nuts, and mushroom mixture with parsley, cottage cheese, Swiss cheese, eggs, salt, and pepper.
- Bake: Butter a loaf pan, line the bottom with parchment paper and butter again. Pour in the mixture and bake about 1 hour at 375°F or until golden brown. Allow to cool about 20 minutes before slicing.
Pro prep tip
This recipe does take a bit of time to put together. If you have a partner, friend, or child, invite them along into the fun! It will be much quicker. I only make this on weekends, days off, or holidays: it’s too involved for a weeknight in my opinion.
Storing leftovers
This vegetarian meatloaf stores very well as leftovers! Here’s what to do:
- Refrigerate. Leftovers can be stored for a 2 to 3 days in the refrigerator.
- Freeze. This vegetarian meatloaf freezes perfectly! Slice it into pieces and place it in a sealable container in the freezer. Reheat the meatloaf in a 375°F oven.
Sides to pair with meatloaf
If you’re entertaining and looking for dinner party recipes, this vegetarian meatloaf is a fantastic fit for a dinner party. Our family makes it often over the holidays, as a vegetarian Thanksgiving recipe or for Christmas dinner. It always pleases meat eaters: even my meat and potatoes grandparents!
A few side dishes that work well with meatloaf:
- Potatoes like mashed potatoes, roasted potatoes or mashed sweet potatoes are a natural pairing.
- Green vegetables like crispy Brussels sprouts, sauteed broccoli or broccolini, and green beans almondine are a nice contrast
- Crisp salads like shaved Brussels sprout salad, apple salad, or pear salad with pecans work well.
Dietary notes
This vegetarian meatloaf recipe is vegetarian and gluten free.
Frequently asked questions
Yes! You can either prepare it a day ahead and refrigerate before baking, or bake and freeze in slices. To reheat frozen slices, warm in a 375°F oven until heated through.
Yes, many commenters have successfully used cheddar, mozzarella, or Gruyere instead of Swiss cheese. The cottage cheese is important for texture but can be replaced with Greek yogurt.
Unfortunately, the nuts are essential to this recipe’s texture and structure. There’s currently no tested nut-free version.
Aim for a coarse chop, similar to the texture of panko breadcrumbs. Don’t grind them into a powder—some texture is good.
While the recipe calls for a mix of cremini and shiitake, many commenters have successfully used just cremini or button mushrooms. The mushrooms are essential to the recipe’s texture and flavor and can’t be omitted.
Vegetarian Meatloaf (Fan Favorite!)
This vegetarian meatloaf is hearty and pleases even the most passionate of meat eaters! It’s a family favorite dinner party recipe.
- Prep Time: 1 hour
- Cook Time: 1 hour
- Total Time: 2 hours
- Yield: 8 to 10
- Category: Main Dish
- Method: Baked
- Cuisine: American
Ingredients
- 1 ½ cups cooked brown rice
- 1 ½ cups walnuts
- ½ cup cashews
- 1 yellow onion
- 3 cloves garlic
- 3 ounces shiitake mushrooms
- 3 ounces baby bella mushrooms (aka cremini)
- 2 tablespoons chopped fresh flat-leaf parsley
- 2 tablespoons olive oil
- 1 teaspoon dried marjoram
- 1 teaspoon dried thyme
- 1 teaspoon dried sage
- 4 large eggs
- 1 cup cottage cheese
- 12 ounces Swiss cheese, grated
- 1 teaspoon kosher salt
- ½ teaspoon freshly ground black pepper
Instructions
- Prepare the brown rice using Stovetop Brown Rice or Instant Pot Brown Rice. (You’ll need ½ cup dry rice to yield 1 ½ cups cooked; or you cook 1 cup dry rice and save the leftovers.)
- Preheat oven to 375°F.
- Place 1 ½ cup walnuts and ½ cup cashews on a baking sheet and toast for 8-10 minutes, until lightly browned. Allow to cool.
- Meanwhile, finely chop 1 onion and mince 3 cloves garlic. Clean and finely chop the mushrooms. Finely chop the 2 tablespoons fresh parsley. When the nuts have cooled, finely chop them with a knife or in a food processor.
- In a large skillet, heat about 2 tablespoons olive oil. Add the onion and garlic and cook until translucent, about 3 minutes. Add the mushrooms, 1 teaspoon marjoram, 1 teaspoon thyme, and 1 teaspoon sage. Cook about 5 minutes, until the mushrooms are golden. Transfer to a large bowl.
- In a small bowl, lightly beat together 4 eggs.
- In the large bowl, combine the onion and mushroom mixture with the toasted walnuts and cashews, parsley, 1 ½ cups cooked rice, 1 cup cottage cheese, 12 ounces Swiss cheese, beaten eggs, 1 teaspoon kosher salt, and ½ teaspoon freshly ground black pepper.
- Butter a 9-inch loaf pan, line the bottom with parchment paper, and butter it again. Pour the mixture from the bowl into the pan.
- Bake 1 hour until golden brown. Let cool in pan for 20 minutes, then invert loaf and remove from pan. Slice into pieces and serve warm. Leftovers can be stored for a few day in the refrigerator or a few months in the freezer (cut into pieces). Reheat in a 375°F oven.
Notes
Adapted from Martha Stewart
(function(){
window.addEventListener( ‘message’, function( event ){
if ( ( ‘https://nutrifox.com’ !== event.origin && ‘https://nutrifox.test’ !== event.origin ) ||
typeof event.data !== ‘string’ ) {
return;
}
var payload = JSON.parse( event.data );
switch ( payload.event ) {
case ‘setHeight’:
var iframe = document.getElementById( ‘nutrifox-label-‘ + payload.recipeId );
iframe.style.height = payload.height + ‘px’;
break;
}
} );
}());
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/www.acouplecooks.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:””,”postId”:463};
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.smoothScroll = {
init() {
document.addEventListener( ‘click’, ( e ) => {
let anchor = e.target;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}
if ( ! anchor || ! anchor.classList.contains( ‘tasty-recipes-scrollto’ ) ) {
return;
}
const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}
e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const element = document.querySelector( selector );
if ( ! element ) {
return;
}
element.scrollIntoView( { behavior: ‘smooth’ } );
}
};
document.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}
const cookModes = document.querySelectorAll(this.cookModeSelector);
if (cookModes.length > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘input[type=”checkbox”]’).addEventListener(“change”, event => {
this.checkboxChange(event.target);
}, false);
} else {
cookMode.style.display = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = document.querySelectorAll(this.cookModeSelector + ‘ input[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
try {
this.wakeLock = await this.wakeLockApi.request(“screen”);
this.wakeLock.addEventListener(“release”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.release();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
document.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.staticTooltip = {
element: null,
tooltipElement: null,
deleting: false,
init( element ) {
if ( this.deleting ) {
return;
}
this.element = element;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}
this.deleting = true;
this.tooltipElement.classList.remove( ‘opened’ );
setTimeout( () => {
this.tooltipElement.remove();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = document.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );
const currentTooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
document.body.replaceChild( tooltipElement, currentTooltipElement );
} else {
document.body.appendChild( tooltipElement );
}
this.tooltipElement = document.getElementById( ‘tasty-recipes-tooltip’ );
},
show() {
if ( ! this.tooltipElement ) {
return;
}
const tooltipTop = this.element.getBoundingClientRect().top
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().height;
const tooltipLeft = this.element.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.element.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );
this.tooltipElement.setAttribute( ‘style’, ‘top:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );
},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.remove( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};
window.TastyRecipes.ajax = {
sendPostRequest( url, data, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.send( this.preparePostData( data ) );
xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.status === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}
failure( xhr );
};
xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( data ) {
const formData = new FormData();
for ( const key in data ) {
formData.append( key, data[key] );
}
return formData;
},
};
window.TastyRecipes.ratings = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;
this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const ratings = document.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( ratings.length {
event.preventDefault();
this.defaultRating = event.target.closest( ‘.checked’ ).dataset.rating;
this.setCheckedStar( event.target );
this.maybeSendRating( this.defaultRating, event.target );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click’, e => {
// Bailout (don’t remove the tooltip) when the clicked element is a rating star, or it’s the tooltip itself.
if ( e.target.closest( ‘.tasty-recipes-rating’ ) || e.target.classList.contains( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}
window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( rating ) {
const ratingInput = document.querySelector( ‘#respond .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = document.querySelectorAll( ‘input.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click’, currentEvent => {
const selectedRating = currentEvent.target.getAttribute( ‘value’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( rating ) {
if ( rating < this.minRating ) {
document.body.classList.remove( 'tasty-recipes-selected-minimum-rating' );
return;
}
document.body.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( rating ) {
const commentTextarea = document.getElementById( 'comment' );
if ( ! commentTextarea ) {
return;
}
if ( rating {
window.TastyRecipes.staticTooltip.changeMessage( response.data.message );
window.TastyRecipes.staticTooltip.show();
this.updateAverageText( response.data, recipeCardElement );
this.maybeFillCommentForm( response.data );
// Hide the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.data, rating );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( data, recipeCardElement ) {
if ( ! data.average ) {
return;
}
this.setRatingPercent( data );
if ( ! data.count ) {
return;
}
const quickLink = document.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, data );
this.setPartialStar( quickLink );
}
const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = data.average;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), data );
},
setTextInContainer( container, data ) {
if ( ! container ) {
return;
}
if ( data.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = data.label;
}
return;
}
const averageElement = container.querySelector( ‘.average’ );
if ( averageElement ) {
averageElement.textContent = data.average;
}
const countElement = container.querySelector( ‘.count’ );
if ( countElement ) {
countElement.textContent = data.count;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( data ) {
this.defaultRating = data.average.toFixed( 1 );
const parts = data.average.toFixed( 2 ).toString().split( ‘.’ );
this.currentRatingPercentage = parts[1] ? parts[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( target ) {
const cardRatingContainer = target.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}
const thisStar = target.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( data ) {
if ( ! data.comment || ! data.comment.content ) {
return;
}
const commentForm = document.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}
const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.value ) {
return;
}
// Add comment details for editing.
commentBox.innerHTML = data.comment.content;
if ( data.comment.name ) {
commentForm.querySelector( ‘[name=author]’ ).value = data.comment.name;
commentForm.querySelector( ‘[name=email]’ ).value = data.comment.email;
}
},
maybeResetTooltip( recipeCardElement, data, rating ) {
if ( this.savingRating === rating ) {
this.resetTooltip( recipeCardElement, data );
}
},
resetTooltip( recipeCardElement, data ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;
// Reset the default rating.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( data && data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;
this.resetSelectedStar( cardRatingContainer, data );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}
const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = document.querySelector( ‘#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.display.includes( ‘flex’ ) ) {
ratingsButtons.style.direction = ‘rtl’;
}
if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Select the rating that was previously selected in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}
const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click’, event => {
if ( ratingSpan === event.target ) {
return;
}
ratingSpan.previousElementSibling.click();
} );
}
}
};
(function(callback) {
if (document.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );
});