Enjoy these quick and easy Gluten-Free Meatballs baked to tender and juicy perfection. These turkey meatballs are perfectly seasoned to make a flavor-packed dish thats ready in less than 30 minutes. These grain- and dairy-free meatballs are also paleo and AIP-friendly.
Making the perfect gluten free meatballs is easy with a few simple ingredients. While traditional meatballs contain common allergens like eggs, gluten, and even dairy, these gluten-free meatballs without breadcrumbs, milk, or eggs make an allergy-friendly dish that everyone can enjoy without compromising dietary requirements or delicious flavor!
Looking for more delicious dairy and gluten free meatball recipes? Try these paleo meatballs or these paleo breakfast meatballs.
Contents
Table of contents
- Gluten-Free Meatballs Recipe
- Ingredients
- How To Make Gluten-Free Meatballs
- Tips & Tricks
- How To Serve Gluten-Free Meatballs
- Frequently Asked Questions
- Storage & Reheating Instructions
Gluten-Free Meatballs Recipe
These baked turkey meatballs stay together perfectly without gluten free breadcrumbs or breadcrumb substitutes, eggs, or additional binders. The ground turkey combines with onions, garlic, fresh basil, thyme, and parsley for an aromatic depth of flavor. Dried oregano, sea salt, and black pepper enhance the savory and herbaceous flavor, with the optional red pepper flakes adding a hint of heat. A touch of olive oil brushed over the meatballs ensures they stay moist while baking.
Once cooked, these juicy meatballs have a slightly crispy exterior with a tender inside. Theyre versatile, easy, and great for meal prep. Serve them over your favorite gluten-free pasta with tomato or nomato sauce for a quick weeknight dinner thats ready in 30 minutes.
Ingredients
See the recipe card below for ingredient measurements.
- fresh basil leaves
- fresh thyme
- fresh parsley
- yellow onion
- garlic
- ground turkey
- sea salt
- dried oregano
- black pepper
- red pepper flakes
- olive oil
Ingredient Substitutions
- Although I highly recommend using fresh herbs for the best flavor, you can substitute them with 1/2 the amount of dried herbs.
- You can substitute ground turkey with ground chicken.
- AIP Modifications: To make these gluten-free meatballs compliant with both versions of the AIP diet, omit the red pepper flakes. For Core AIP, also omit the black pepper (allowed on Modified AIP).
How To Make Gluten-Free Meatballs
Step 1: Prep
Preheat the oven to 375F and line a large baking sheet with parchment paper.
Step 2: Chop the Herbs and Vegetables
In a food processor, pulse the fresh herbs and vegetables until well combined.
Step 3: Make the Meatball Mixture
In a large bowl, add the ground turkey, the pulsed herb and vegetable mixture, sea salt, oregano, black pepper, and red pepper flakes. Stir until well and evenly combined. Use your hands if necessary to bring the mixture together.
Step 4: Shape the Meatballs
Use a spoon to scoop out the meat mixture and form into meatballs with your hands. Mixture will be quite wet. Place them onto the prepared baking sheet, then lightly brush the top of the meatballs with olive oil.
Step 5: Bake the Meatballs
Place onto the middle rack of the oven and cook gluten-free meatballs for 15 minutes or until the internal temperature reads 165F and meatballs are cooked through.
Step 6: Serve
Serve the meatballs hot, garnished with fresh parsley, basil, or other herbs of your choice.
Tips & Tricks
Make the Herb-Vegetable Mixture by Hand
If you dont have a food processor, finely chop the fresh herbs, finely dice the onion, and finely mince the garlic. Stir to combine.
Vegetable Consistency
Whether making it by hand or in the food processor, ensure the onion is finely chopped to avoid large chunks in the meat mixture. This will ensure the best overall texture and flavor distribution. Likewise, ensure the herbs and vegetables are evenly distributed throughout the ground turkey.
Dont Over-work the Meat Mixture
Although you want to ensure that everything is well combined and evenly distributed, over-mixing the meat or compacting the meatballs too tightly can result in tough, rubbery meatballs. For tender meatballs, mix gently and lightly bring the meatballs together with your hands.
Use a Cookie Scoop
Using a 1.5 inch cookie or ice cream scoop (about 1.5 TBSP size) to measure and shape the meatballs ensures uniform meatballs that will cook evenly.
Dont Crowd the Baking Sheet
Avoid overcrowding the baking sheet by spacing the meatballs about 1 inch apart to ensure even baking. Use two baking sheets if you cant fit them all on one large sheet.
Use a Meat Thermometer
The best way to check that the meatballs are done without overcooking and drying them out is to read the internal temperature with a meat thermometer. Theyre ready when the internal temperature is 165F. If using other ground meats, ensure the meatballs are cooked through by checking their internal temperatures. Note the cooking time may vary with other ground meats.
How To Serve Gluten-Free Meatballs
You can serve these versatile meatballs in a number of different ways:
- As an Appetizer: Stick the meatballs with toothpicks and serve with dipping sauces like this nightshade-free Guacamole, this Vegan Queso Cheese Dip, the Cilantro-Lime Sauce from my Ginger-Cilantro Pork Meatballs recipe, or the Avocado Lime Crema from my Tuna Patties recipe.
- As a Sandwich: Make a meatball sub or wrap when you pair these meatballs with these Vegan Gluten-Free Biscuits or these Gluten-Free Tortillas.
- In Tomato or Nomato Sauce: Warm the sauce on the stovetop. Either add meatballs on top the sauce with other sides or after baking, add the meatballs to the pot or skillet with the sauce to keep warm until ready to serve.
- With Gluten-Free Pasta or Rice: Like this Sweet Potato Gnocchi, this AIP Hand Rolled Pasta, or store-bought pastas. Grain-free alternatives like cauliflower or broccoli rice, grain-free pastas, or sweet potato glass noodles are also good options.
- With Vegetables: Pair with vegetable sides like Smashed Broccoli, Grilled Asparagus, Green Banana Fries, Vegan Potato Salad or salads like Cauliflower Salad or this Cucumber Mango Salsa.
Frequently Asked Questions
Can I use other ground meats to make these gluten-free meatballs?
Ground chicken is a great substitution in this recipe, as are other ground meats like ground beef, ground pork, ground lamb, or a combination. Adjust the cooking time accordingly and use a meat thermometer to ensure the meat is ready.
How do I ensure moist gluten-free turkey meatballs?
These meatballs will be moist and juicy once a food thermometer reads an internal temperature of 165F. Over-baking the meatballs can dry them out.
Do I need to serve these meatballs with spaghetti sauce?
Although tomato sauce is an easy accompaniment for meatballs with gluten-free spaghetti or other pastas, you can use different pasta sauces like this Wild Leek Pesto or the Carbonara sauce from my Pasta Carbonara recipe.
Or, try serving the meatballs with sauces from my other meatball recipes like this Spiced Lamb Meatballs recipe, this Paleo Honey Garlic Meatballs recipe, or the Creamy Mushroom Sauce from my Chicken Meatballs recipe.
Can I make these meatballs ahead of time?
Yes, there are many ways you can make these gluten-free meatballs in advance which makes it great for meal prep!
Fridge: Shape the meatballs, place them on a sheet pan lined with parchment paper, cover with plastic wrap, and refrigerate for up to 24 hours until ready to bake. Or, store baked meatballs in the fridge and reheat when ready to serve.
Freezer: Make the meatballs in advance and freeze them, either before or after baking. Thaw in the fridge before reheating or baking as directed.
(See the Storage & Reheating Instructions for more information).
Can I make these turkey meatballs on the stovetop?
Heat a skillet with olive oil over medium heat. Once the oil is hot, add meatballs in an even layer and cook about 5 minutes on each side. Sear or pan fry meatballs until golden brown. Don’t crowd the pan and cook in batches if needed. Use a food thermometer to check for doneness.
Storage & Reheating Instructions
Fridge: Store cooled meatballs in an airtight container in the refrigerator for up to 4 days.
Freezer: These gluten-free meatballs can be frozen raw or cooked.
Place uncooked or cooled, baked meatballs on a parchment-lined baking sheet and flash freeze them until firm. Then, transfer them to a freezer-safe resealable bag or container and freeze for up to 3 months. Thaw in the fridge overnight.
Reheating: Reheat leftovers or thawed, cooked meatballs on the stovetop, in the microwave, or in the oven at 350F for 10-15 minutes or until warmed through.
For thawed, uncooked meatballs, brush with olive oil and bake as directed.
I hope you love these Gluten-Free Meatballs. If you do, I would appreciate it if you would give the recipe a rating and review. Be sure to snap a picture of the finished product and share it with me on Instagram by tagging @healmedelicious and using the hashtag #healmedelicious.
.tasty-recipes-print-button{background-color:#667;border:none;display:inline-block;padding:.5em 1em;text-decoration:none}body:not(.tasty-recipes-print-view) .tasty-recipes-print-button.tasty-recipes-print-above-card{color:#fff;display:none}body:not(.tasty-recipes-print-view) .tasty-recipes-print-button.tasty-recipes-print-above-card:hover{background-color:#b2b2bb;color:#fff;display:inline-block;padding:.5em 1em;text-decoration:none}.tasty-recipes-image-button-container{display:flex;flex-direction:column;flex-wrap:wrap;float:right;margin-left:10px}body.tasty-recipes-print-view .tasty-recipes-buttons,body.tasty-recipes-print-view .tasty-recipes-cook-mode{display:none}.tasty-recipes-image-button-container .tasty-recipes-buttons{margin-bottom:10px;margin-top:10px}.tasty-recipes-image-button-container .tasty-recipes-button-wrap{box-sizing:border-box;margin-bottom:10px}.tasty-recipes-image-button-container .tasty-recipes-buttons a,.tasty-recipes-quick-links a.button{background-color:#f9f9f9;background-color:var(–tr-button-color,#f9f9f9);border:1px solid #aaa;border-color:var(–tr-button-color,#aaa);border-radius:0;color:#aaa;color:var(–tr-button-text-color,#aaa);cursor:pointer;display:block;font-size:16px;font-weight:700;line-height:16px;margin-top:0;padding:8px;text-align:center;text-decoration:none;text-transform:uppercase}.tasty-recipes-quick-links{align-items:center;display:flex;gap:.625em;justify-content:center;margin-bottom:1em}.tasty-recipes-quick-links a.button{display:inline-block;margin:0}.tasty-recipes-quick-links a.button+span{display:none}.tasty-recipes-entry-content .tasty-recipes-buttons a:hover,.tasty-recipes-image-button-container .tasty-recipes-buttons .button:hover,.tasty-recipes-quick-links a.button:hover{background-color:var(–tr-button-text-color,#aaa);color:var(–tr-button-color,#f9f9f9);text-decoration:none}.tasty-recipes-image-button-container .tasty-recipes-buttons .button:hover{opacity:1}.tasty-recipes-image-button-container .tasty-recipes-buttons a:hover{background-color:#979599;text-decoration:none}.tasty-recipes-image-button-container .tasty-recipes-buttons svg{display:none}.tasty-recipes-yield-scale{border:1px solid #979599;border-radius:2px;color:#979599;font-size:.7rem;margin-left:3px;padding:0 4px}.tasty-recipes-units-scale-container{display:flex;flex-wrap:wrap}.tasty-recipes-convert-container{padding:0 1em 1em 0}.tasty-recipes-convert-container .tasty-recipes-convert-label{align-self:center;color:#979599;font-size:.6rem;text-transform:uppercase}.tasty-recipes-convert-container button{background:transparent;border:1px solid #353547;border-radius:2px;color:#353547;letter-spacing:0;margin-left:5px;min-width:34px;padding:2px 4px;text-align:center}.tasty-recipes-convert-container button.tasty-recipes-convert-button-active{background-color:#000;border-color:#000;color:#fff}.tasty-recipes-convert-container button:focus{outline:none}.tasty-recipes-scale-container{display:flex;padding:0 0 1em}.tasty-recipes-scale-container .tasty-recipes-scale-label{align-self:center;color:#979599;font-size:.6rem;text-transform:uppercase}.tasty-recipes-scale-container button{background:transparent;border:1px solid #353547;border-radius:2px;color:#353547;cursor:pointer;letter-spacing:0;margin-left:5px;min-width:34px;padding:2px 4px}.tasty-recipes-scale-container button.tasty-recipes-scale-button-active{background-color:#000;border-color:#000;color:#fff}.tasty-recipes-scale-container button:focus{outline:none}.tasty-recipes-ingredients-header{margin:1em 0}@media only screen and (min-width:520px){.tasty-recipes-ingredients-header{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between}}.tasty-recipes-ingredients-header .tasty-recipes-ingredients-clipboard-container{align-items:baseline;display:inline-flex}.tasty-recipes-ingredients-header h3{margin:0 10px 10px 0}.tasty-recipes-ingredients-clipboard-container .tasty-recipes-copy-button{background:transparent;border:none;color:#353547;height:24px;padding:0;position:relative;width:24px}.tasty-recipes-ingredients-clipboard-container .tasty-recipes-copy-button:hover{opacity:.5}.tasty-recipes-instructions-header{align-items:baseline;display:flex;flex-wrap:wrap;justify-content:space-between;margin:1em 0}.tasty-recipes-entry-content .tasty-recipes-instructions h3{margin:0 0 1rem}@media only screen and (min-width:520px){.tasty-recipes-entry-content .tasty-recipes-instructions h3{margin:0}}button[name=tasty-recipes-video-toggle]{background:#979599;border:#979599;border-radius:2px;display:inline-block;font-size:14px;height:30px;line-height:20px;margin:0;padding:0;text-align:center;vertical-align:middle;width:86px}button[name=tasty-recipes-video-toggle] span{padding:0 4px;pointer-events:none}button[name=tasty-recipes-video-toggle][aria-checked=false] :last-child,button[name=tasty-recipes-video-toggle][aria-checked=true] :first-child{background:#fff;border-radius:2px;color:#979599;padding:2px 4px}button[name=tasty-recipes-video-toggle][aria-checked=false] :first-child,button[name=tasty-recipes-video-toggle][aria-checked=true] :last-child{color:#fff}label[for=tasty-recipes-video-toggle]{color:#979599;font-size:.6rem;line-height:30px;padding-right:8px;text-transform:uppercase;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;-o-user-select:none;vertical-align:middle}.tasty-recipe-responsive-iframe-container{margin:10px 0}.tasty-recipes-equipment{display:flex;flex-wrap:wrap;justify-content:space-evenly}.tasty-recipes-equipment>h3{flex:0 0 100%}.tasty-recipes-equipment .tasty-link-card{flex:0 0 50%;padding:1.5rem 1rem;text-align:center}@media screen and (min-width:500px){.tasty-recipes-equipment .tasty-link-card{flex:0 0 33%}}.tasty-recipes-equipment .tasty-link-card p{font-size:1em;font-weight:700;margin-bottom:0}.tasty-recipes-equipment .tasty-link-card p a{color:initial}.tasty-recipes-equipment .tasty-link-card span{font-size:.9em}.tasty-recipes .tasty-recipes-nutrition ul{list-style-type:none;margin:0;padding:0}.tasty-recipes .tasty-recipes-nutrition ul:after{clear:both;content:” “;display:block}.tasty-recipes .tasty-recipes-nutrition li{float:left;list-style-type:none;margin-bottom:0;margin-left:0;margin-right:16px}.tasty-recipes-plug{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;margin-bottom:1em;text-align:center}.tasty-recipes-plug a{box-shadow:none;text-decoration:none}.tasty-recipes-plug a img{background:transparent;box-shadow:none;display:inline-block;height:auto;margin:5px 0 0 8px;padding:0;width:150px}.tasty-recipes-footer-content{padding:1.5em;text-align:center}.tasty-recipes-footer-content .tasty-recipes-footer-copy{margin-left:0}.tasty-recipes-footer-content img,.tasty-recipes-footer-content svg{width:60px}.tasty-recipes-entry-content .tasty-recipes-entry-footer h3{font-size:1.25em;margin:0 0 .25em;padding:0}.tasty-recipes-entry-footer p{font-size:.75em;margin:0}.tasty-recipes-entry-footer p a{border-bottom:none;box-shadow:none;text-decoration:underline}.tasty-recipes-flash-message{background-color:#fff;border-radius:4px;box-shadow:0 .3px .4px 0 rgba(0,0,0,.024),0 .9px 1.5px 0 rgba(0,0,0,.05),0 3.5px 6px 0 rgba(0,0,0,.1);color:#313135;display:inline-block;font-size:13px;letter-spacing:0;line-height:1.2em;margin-left:10px;padding:4px 10px}@media screen and (min-width:500px){.tasty-recipes-flash-message{padding:4px 10px}}.tasty-recipes-flash-message p{margin:0;padding:0;text-transform:none}@media screen and (min-width:500px){.tasty-recipes-footer-content{align-items:center;display:flex;justify-content:center;padding:1.5em 0;text-align:left}.tasty-recipes-footer-content .tasty-recipes-footer-copy{margin-left:.8em}}@media print{.tasty-recipes-no-print,.tasty-recipes-no-print *{display:none!important}}[data-tr-ingredient-checkbox]{cursor:pointer;list-style-position:outside;list-style-type:none!important;margin-left:0!important}[data-tr-ingredient-checkbox] .tr-ingredient-checkbox-container{position:relative}[data-tr-ingredient-checkbox] .tr-ingredient-checkbox-container input[type=checkbox]+label{display:inline-block;position:relative;vertical-align:middle}[data-tr-ingredient-checkbox] .tr-ingredient-checkbox-container input[type=checkbox]{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;position:absolute!important;width:1px}[data-tr-ingredient-checkbox] .tr-ingredient-checkbox-container input[type=checkbox]+label:before{border:1px solid;border-radius:2px;content:””;display:inline-block;height:20px;margin-right:10px;position:relative;width:20px}[data-tr-ingredient-checkbox] .tr-ingredient-checkbox-container input[type=checkbox]:checked+label:after{border-bottom:2px solid;border-left:2px solid;content:””;display:inline-block;height:6px;left:4px;position:absolute;top:4px;transform:rotate(-45deg);width:12px}[data-tr-ingredient-checkbox] .tr-ingredient-checkbox-container input[type=checkbox]:focus+label:before{box-shadow:0 0 8px #5e9ed6;outline:1px solid #5d9dd5}[data-tr-ingredient-checkbox=checked]{opacity:.8;text-decoration:line-through}.tasty-recipes-cook-mode__container{align-items:center;display:flex;line-height:100%}.tasty-recipes-cook-mode__container label{font-size:inherit}.tasty-recipes-cook-mode__switch{display:inline-block;height:17px;margin-right:10px;position:relative;width:30px}.tasty-recipes-cook-mode__switch-slider{background-color:#737373;bottom:0;cursor:pointer;display:block;left:0;opacity:.4;position:absolute;right:0;top:0;transition:.4s}.tasty-recipes-cook-mode__switch-slider:before{background-color:#fff;bottom:2px;content:””;height:13px;left:2px;position:absolute;transition:.4s;width:13px}.tasty-recipes-cook-mode__switch input{display:none}.tasty-recipes-cook-mode__switch input:checked+span{opacity:1}.tasty-recipes-cook-mode__switch input:checked+span:before{transform:translateX(13px)}.tasty-recipes-cook-mode__switch-round{border-radius:34px}.tasty-recipes-cook-mode__switch-round:before{border-radius:50%}.tasty-recipes-cook-mode__label{font-weight:700}@media only screen and (max-width:767px){#shop-with-instacart-v1{transform:scale(.75);transform-origin:top left}}/* Bold recipe card styles. */ .tasty-recipes{border:5px solid #667;margin-top:6em;margin-bottom:4em}.tasty-recipes.tasty-recipes-has-plug{margin-bottom:1em}.tasty-recipes-plug{margin-bottom:4em}.tasty-recipes-print-button{display:none}.tasty-recipes-image-shim{height:69.5px;clear:both}.tasty-recipes-entry-header{background-color:#667;color:#fff;text-align:center;padding-top:35px;padding-bottom:1.5em;padding-left:2.5em;padding-right:2.5em}.tasty-recipes-entry-header.tasty-recipes-has-image{padding-top:0px}.tasty-recipes-entry-header .tasty-recipes-image{float:none;text-align:center;transform:translateY(-115px);margin-bottom:1em;/* Decide if we need this */}.tasty-recipes-entry-header .tasty-recipes-image img{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;border:5px solid #667;height:150px;width:150px;display:inline-block;object-fit:cover}.tasty-recipes-entry-header h2{font-size:2em;font-weight:400;text-transform:lowercase;margin-bottom:0;text-align:center;color:#fff;margin-top:0;padding-top:0;padding-bottom:0}.tasty-recipes-has-image .tasty-recipes-entry-header h2{margin-top:-115px}.tasty-recipes-entry-header hr{border:1px solid #b7bbc6;background-color:#b7bbc6;margin-bottom:1em;margin-top:1em}.tasty-recipes-entry-header div.tasty-recipes-rating{text-decoration:none;border:none;display:block;font-size:1.375em}.tasty-recipes-entry-header .tasty-recipes-rating:hover{text-decoration:none}.tasty-recipes-entry-header .tasty-recipes-rating p{margin-bottom:0}.tasty-recipes-no-ratings-buttons .unchecked,.tasty-recipes-no-ratings-buttons .checked,.tasty-recipes-entry-header span.tasty-recipes-rating{color:#fff;color:var(–tr-star-color,#fff)}.tasty-recipes-entry-header .rating-label{font-style:italic;color:#b7bbc6;font-size:0.6875em;display:block}.tasty-recipes,.tasty-recipes-ratings{–tr-star-size:0.97em!important;–tr-star-margin:0.5em!important}.tasty-recipes-entry-header .tasty-recipes-details{margin-top:1em}.tasty-recipes-entry-header .tasty-recipes-details ul{list-style-type:none;margin:0}.tasty-recipes-entry-header .tasty-recipes-details ul li{display:inline-block;margin-left:0.5em;margin-right:0.5em;font-size:1em;line-height:2.5em;color:#fff}@media only screen and (max-width:520px){.tasty-recipes-entry-header .tasty-recipes-details .detail-icon{height:0.8em;margin-top:0.4em}.tasty-recipes-entry-header .tasty-recipes-details ul li{font-size:0.875em;line-height:1.75em}}@media only screen and (min-width:520px){.tasty-recipes-entry-header .tasty-recipes-details .detail-icon{height:1em;margin-top:0.6em}.tasty-recipes-entry-header .tasty-recipes-details ul li{font-size:1em;line-height:2.5em}}.tasty-recipes-entry-header .tasty-recipes-details .tasty-recipes-label{font-style:italic;color:#b7bbc6;margin-right:0.125em}.tasty-recipes-entry-header .tasty-recipes-details .detail-icon{vertical-align:top;margin-right:0.2em;display:inline-block;color:#FFF}.tasty-recipes-entry-header .tasty-recipes-details .author a{color:inherit;text-decoration:underline}.tasty-recipes-entry-content{padding-top:1.25em}.tasty-recipes-entry-content .tasty-recipes-buttons{margin-bottom:1.25em;margin-left:1.25em;margin-right:1.25em}.tasty-recipes-entry-content .tasty-recipes-buttons:after{content:’ ‘;display:block;clear:both}.tasty-recipes-entry-content .tasty-recipes-button-wrap{width:50%;display:inline-block;float:left;box-sizing:border-box}.tasty-recipes-quick-links a.button,.tasty-recipes-entry-content .tasty-recipes-buttons a{text-transform:uppercase;text-align:center;display:block;color:#fff;color:var(–tr-button-text-color,#fff);background-color:#667;background-color:var(–tr-button-color,#666677);font-size:1em;line-height:1.375em;padding:1em;font-weight:bold;margin-top:0;border:none;border-radius:0;text-decoration:none}.tasty-recipes-quick-links a.button{display:inline-block}.tasty-recipes-entry-content a img{box-shadow:none;-webkit-box-shadow:none}.tasty-recipes-quick-links a.button:hover,.tasty-recipes-entry-content .tasty-recipes-buttons a:hover{border:none}.tasty-recipes-entry-content .tasty-recipes-buttons img{vertical-align:top}.tasty-recipes-entry-content .tasty-recipes-buttons .svg-print,.tasty-recipes-entry-content .tasty-recipes-buttons .svg-pinterest,.tasty-recipes-entry-content .tasty-recipes-buttons .svg-heart-regular,.tasty-recipes-entry-content .tasty-recipes-buttons .svg-heart-solid{height:1.25em;margin-right:0.375em;margin-bottom:0;background:none;display:inline-block;vertical-align:middle}@media only screen and (min-width:520px){.tasty-recipes-entry-content .tasty-recipes-button-wrap:first-child{padding-right:0.625em}.tasty-recipes-entry-content .tasty-recipes-button-wrap:last-child{padding-left:0.625em}}@media only screen and (max-width:520px){.tasty-recipes-entry-content .tasty-recipes-button-wrap{width:100%}.tasty-recipes-entry-content .tasty-recipes-button-wrap:nth-child(2){padding-top:1em}}.tasty-recipes-entry-content h3{text-transform:uppercase;font-size:0.75em;color:#979599;margin:1.5em 0}.tasty-recipes-ingredients-header,.tasty-recipes-instructions-header{margin:1.5em 0}.tasty-recipes-entry-content h4{font-size:1em;padding-top:0;margin-bottom:1.5em;margin-top:1.5em}.tasty-recipes-entry-content hr{background-color:#eae9eb;border:1px solid #eae9eb;margin-top:1em;margin-bottom:1em}.tasty-recipes-entry-content .tasty-recipes-description,.tasty-recipes-entry-content .tasty-recipes-ingredients,.tasty-recipes-entry-content .tasty-recipes-instructions,.tasty-recipes-entry-content .tasty-recipes-keywords{padding-left:1.25em;padding-right:1.25em}.tasty-recipes-entry-content .tasty-recipes-description h3{display:none}.tasty-recipes-entry-content .tasty-recipes-description p{margin-bottom:1em}.tasty-recipes-entry-content .tasty-recipes-ingredients ul,.tasty-recipes-entry-content .tasty-recipes-instructions ul{list-style-type:none;margin-left:0;margin-bottom:1.5em;padding:0}.tasty-recipes-entry-content .tasty-recipes-ingredients ul li,.tasty-recipes-entry-content .tasty-recipes-instructions ul li{margin-bottom:0.625em;list-style-type:none;position:relative;margin-left:1.5em;line-height:1.46}.tasty-recipes-entry-content .tasty-recipes-ingredients ul li:before,.tasty-recipes-entry-content .tasty-recipes-instructions ul li:before{background-color:#667;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;height:0.5em;width:0.5em;display:block;content:’ ‘;left:-1.25em;top:0.375em;position:absolute}.tasty-recipes-entry-content .tasty-recipes-ingredients ol,.tasty-recipes-entry-content .tasty-recipes-instructions ol{counter-reset:li;margin-left:0;padding:0}.tasty-recipes-entry-content .tasty-recipes-ingredients ol>li,.tasty-recipes-entry-content .tasty-recipes-instructions ol>li{list-style-type:none;position:relative;margin-bottom:1em;margin-left:1.5em;line-height:1.46}.tasty-recipes-entry-content .tasty-recipes-ingredients ol>li:before,.tasty-recipes-entry-content .tasty-recipes-instructions ol>li:before{content:counter(li);counter-increment:li;position:absolute;background-color:#667;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;height:1.45em;width:1.45em;color:#fff;left:-1.25em;transform:translateX(-50%);line-height:1.5em;font-size:0.6875em;text-align:center;top:0.1875em}.tasty-recipes-entry-content .tasty-recipes-ingredients li li,.tasty-recipes-entry-content .tasty-recipes-instructions li li{margin-top:0.625em}.tasty-recipes-entry-content .tasty-recipes-ingredients li ul,.tasty-recipes-entry-content .tasty-recipes-ingredients li ol,.tasty-recipes-entry-content .tasty-recipes-instructions li ul,.tasty-recipes-entry-content .tasty-recipes-instructions li ol{margin-bottom:0}.tasty-recipes-entry-content .tasty-recipes-equipment{padding-left:1.25em;padding-right:1.25em}.tasty-recipes-entry-content .tasty-recipe-video-embed~.tasty-recipes-equipment{padding-top:1em}.tasty-recipes-entry-content .tasty-recipes-notes{padding:1.25em;background-color:#edf0f2}.tasty-recipes-entry-content .tasty-recipes-notes ol{counter-reset:li;margin-left:0;padding:0}.tasty-recipes-entry-content .tasty-recipes-notes ul{margin-left:0;padding:0}.tasty-recipes-entry-content .tasty-recipes-notes p,.tasty-recipes-entry-content .tasty-recipes-notes ul,.tasty-recipes-entry-content .tasty-recipes-notes ol{background-color:#fff;padding-bottom:1.25em;margin-bottom:1.5em;position:relative;-webkit-clip-path:polygon(20px 0,100% 0,100% 100%,0 100%,0 20px);clip-path:polygon(20px 0,100% 0,100% 100%,0 100%,0 20px)}@media only screen and (min-width:520px){.tasty-recipes-entry-content .tasty-recipes-notes p,.tasty-recipes-entry-content .tasty-recipes-notes ul,.tasty-recipes-entry-content .tasty-recipes-notes ol{padding-left:1.5625em;padding-right:1.5625em;padding-top:1.25em}.tasty-recipes-entry-content .tasty-recipes-notes ul,.tasty-recipes-entry-content .tasty-recipes-notes ol{margin-left:2em}}.tasty-recipes-entry-content .tasty-recipes-notes p,.tasty-recipes-entry-content .tasty-recipes-notes ul li,.tasty-recipes-entry-content .tasty-recipes-notes ol li{padding-left:2.5em}.tasty-recipes-entry-content .tasty-recipes-notes ul li,.tasty-recipes-entry-content .tasty-recipes-notes ol li{position:relative;list-style:none;padding-top:1em;margin-left:0;margin-bottom:0}.tasty-recipes-entry-content .tasty-recipes-notes p:before,.tasty-recipes-entry-content .tasty-recipes-notes ul li:before{content:’i’;display:block;background-color:#667;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;height:1.3em;width:1.3em;font-size:0.75em;line-height:1.3em;text-align:center;color:#fff;position:absolute;left:1.167em;top:1.9em}.tasty-recipes-entry-content .tasty-recipes-notes ol>li:before{content:counter(li);counter-increment:li;position:absolute;background-color:#667;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;height:1.45em;width:1.45em;color:#fff;left:2em;transform:translateX(-50%);line-height:1.5em;font-size:0.6875em;text-align:center;top:2em}.tasty-recipes-entry-content .tasty-recipes-notes p:last-child{margin-bottom:0}.tasty-recipes-entry-content .tasty-recipes-other-details{background-color:#edf0f2;padding:0 1.25em 1.25em}.tasty-recipes-entry-content .tasty-recipes-other-details ul{color:#667;display:flex;flex-wrap:wrap;font-size:0.85rem;list-style:none;margin-bottom:0}.tasty-recipes-entry-content .tasty-recipes-other-details ul li{margin:0 0.5rem;list-style:none}.tasty-recipes-entry-content .tasty-recipes-other-details ul li .tasty-recipes-label{font-style:italic}.tasty-recipes-entry-content .tasty-recipes-other-details .detail-icon{color:#667;vertical-align:top;margin-right:0.2em;display:inline-block}@media only screen and (max-width:520px){.tasty-recipes-entry-content .tasty-recipes-other-details .detail-icon{height:0.8em;margin-top:0.4em}.tasty-recipes-entry-content .tasty-recipes-other-details ul li{font-size:0.875em;line-height:1.75em}}@media only screen and (min-width:520px){.tasty-recipes-entry-content .tasty-recipes-other-details .detail-icon{height:1em;margin-top:0.8em}.tasty-recipes-entry-content .tasty-recipes-other-details ul li{font-size:1em;line-height:2.5em}}.tasty-recipes-entry-content .tasty-recipes-keywords{background-color:#edf0f2;padding-bottom:1em;padding-top:1em}.tasty-recipes-entry-content .tasty-recipes-keywords p{font-size:0.7em;font-style:italic;color:#979599;margin-bottom:0}.tasty-recipes-entry-content .tasty-recipes-keywords p span{font-weight:bold}.tasty-recipes-nutrifox{text-align:center;margin:0}.nutrifox-label{background-color:#edf0f2}.tasty-recipes-nutrifox iframe{width:100%;display:block;margin:0}.tasty-recipes-entry-content .tasty-recipes-nutrition{padding:1.25em;color:#667}.tasty-recipes-nutrition .tasty-recipes-label{font-style:italic;color:#b7bbc6;margin-right:0.125em;font-weight:400}.tasty-recipes-nutrition ul li{float:none;display:inline-block;line-height:2em;margin:0 10px 0 0}.tasty-recipes-entry-footer{background-color:#667}.tasty-recipes-entry-footer img,.tasty-recipes-entry-footer svg{color:#FFF}.tasty-recipes-entry-content .tasty-recipes-entry-footer h3{color:#fff}.tasty-recipes-entry-footer{color:#fff}.tasty-recipes-entry-footer:after{content:’ ‘;display:block;clear:both}/* Print view styles */ .tasty-recipes-print-view .tasty-recipe-video-embed,.tasty-recipes-print-view .tasty-recipes-other-details,.tasty-recipes-print .tasty-recipes-entry-header .tasty-recipes-details .detail-icon,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-notes p:before,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-notes ul li:before,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-ingredients ul li:before,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-ingredients ol li:before,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-instructions ul li:before,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-instructions ol li:before,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-notes ol>li:before,.tasty-recipes-print .tasty-recipes-entry-footer img{display:none}.tasty-recipes-print-view{font-size:11px;background-color:#fff;line-height:1.5em}.tasty-recipes-print{padding:0}.tasty-recipes-print-view .tasty-recipes{margin-top:1em}.tasty-recipes-print-view .tasty-recipes-entry-content h3{font-size:1.2em;letter-spacing:0.1em;margin:0 0 10px 0}.tasty-recipes-print-view .tasty-recipes-ingredients-header,.tasty-recipes-print-view .tasty-recipes-instructions-header{margin:0}.tasty-recipes-print-view .tasty-recipes-ingredients,.tasty-recipes-print-view .tasty-recipes-instructions{padding:1.25em}.tasty-recipes-print .tasty-recipes-entry-header{background-color:inherit;color:inherit;padding:0;text-align:left}.tasty-recipes-print .tasty-recipes-entry-header .tasty-recipes-image{float:right;transform:none}.tasty-recipes-print.tasty-recipes-has-image .tasty-recipes-entry-header h2{margin-top:0;text-align:left}.tasty-recipes-print .tasty-recipes-entry-header h2{color:inherit;margin-bottom:0.5em}.tasty-recipes-print .tasty-recipes-entry-header hr{display:none}.tasty-recipes-print .tasty-recipes-entry-header span.tasty-recipes-rating{color:#000}.tasty-recipes-entry-header div.tasty-recipes-rating a{text-decoration:none}.tasty-recipes-entry-header div.tasty-recipes-rating p{margin-top:4px}.tasty-recipes-print .tasty-recipes-entry-header .tasty-recipes-details ul{padding:0;clear:none}.tasty-recipes-print .tasty-recipes-entry-header .tasty-recipes-details ul li{line-height:1.5em;color:#000;margin:0 10px 0 0}.tasty-recipes-print .tasty-recipes-entry-content img{max-width:50%;height:auto}.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-ingredients ol li,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-instructions ol li{margin-bottom:0.5em;list-style:decimal;line-height:1.5em}.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-ingredients ul li,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-instructions ul li{margin-bottom:0.5em;line-height:1.1;list-style:disc}.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-notes{background:none!important}.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-notes ul,.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-notes ol{background:none!important}.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-notes ol li{padding:0;clip-path:none;background:none;line-height:1.5em;list-style:decimal}.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-notes p{padding:0;clip-path:none;background:none;line-height:1.5em}.tasty-recipes-print .tasty-recipes-entry-content .tasty-recipes-notes ul li{padding:0;clip-path:none;background:none;line-height:1.5em;list-style:disc}.tasty-recipes-print .tasty-recipes-source-link{text-align:center}.tasty-recipes-entry-content .tasty-recipes-ingredients ul li[data-tr-ingredient-checkbox]:before{display:none}.tasty-recipes-cook-mode{margin-top:1em}.tasty-recipes-cook-mode__label{font-style:italic;color:#667;font-weight:normal}.tasty-recipes-cook-mode__helper{font-size:1em}.tasty-recipes-cook-mode .tasty-recipes-cook-mode__switch .tasty-recipes-cook-mode__switch-slider{background-color:#667}
body{ –tr-star-color:#F2B955;–tr-button-color:#3A6055; }
.tasty-recipes-rating-outline,.tasty-recipes-rating-solid{display:inline-block;line-height:1}.tasty-recipes-rating-outline svg,.tasty-recipes-rating-solid svg{fill:currentColor;height:var(–tr-star-size,18px);width:var(–tr-star-size,18px)}.tasty-recipes-rating-outline[data-tr-clip=”10″] svg,.tasty-recipes-rating-solid[data-tr-clip=”10″] svg{fill:url(#tasty-recipes-clip-10)}.tasty-recipes-rating-outline[data-tr-clip=”20″] svg,.tasty-recipes-rating-solid[data-tr-clip=”20″] svg{fill:url(#tasty-recipes-clip-20)}.tasty-recipes-rating-outline[data-tr-clip=”30″] svg,.tasty-recipes-rating-solid[data-tr-clip=”30″] svg{fill:url(#tasty-recipes-clip-30)}.tasty-recipes-rating-outline[data-tr-clip=”40″] svg,.tasty-recipes-rating-solid[data-tr-clip=”40″] svg{fill:url(#tasty-recipes-clip-40)}.tasty-recipes-rating-outline[data-tr-clip=”50″] svg,.tasty-recipes-rating-solid[data-tr-clip=”50″] svg{fill:url(#tasty-recipes-clip-50)}.tasty-recipes-rating-outline[data-tr-clip=”60″] svg,.tasty-recipes-rating-solid[data-tr-clip=”60″] svg{fill:url(#tasty-recipes-clip-60)}.tasty-recipes-rating-outline[data-tr-clip=”70″] svg,.tasty-recipes-rating-solid[data-tr-clip=”70″] svg{fill:url(#tasty-recipes-clip-70)}.tasty-recipes-rating-outline[data-tr-clip=”80″] svg,.tasty-recipes-rating-solid[data-tr-clip=”80″] svg{fill:url(#tasty-recipes-clip-80)}.tasty-recipes-rating-outline[data-tr-clip=”90″] svg,.tasty-recipes-rating-solid[data-tr-clip=”90″] svg{fill:url(#tasty-recipes-clip-90)}.tasty-recipes-rating-outline[data-tr-clip=”0″] svg{fill:url(#tasty-recipes-clip-0)}.tasty-recipes-rating-solid{–tr-star-opacity:.4}.tasty-recipes-rating-solid[data-tr-clip=”0″] svg{opacity:var(–tr-star-opacity)}[data-tr-default-rating]>span:not([data-tr-checked]) .tasty-recipes-rating-solid svg{–tr-star-opacity:.4;opacity:var(–tr-star-opacity)}[data-tr-default-rating]>span:not([data-tr-checked]) .tasty-recipes-rating-outline svg{fill:url(#tasty-recipes-clip-0)}[data-tr-default-rating] span[data-tr-checked]~span .tasty-recipes-rating-solid svg{fill:currentColor;–tr-star-opacity:1}[data-tr-default-rating] span[data-tr-checked]~span .tasty-recipes-rating-outline svg{fill:currentColor}input.tasty-recipes-rating:checked~span .tasty-recipes-rating-solid svg{fill:currentColor;–tr-star-opacity:1}input.tasty-recipes-rating:checked~span .tasty-recipes-rating-outline svg{fill:currentColor}@media only screen and (min-width:1024px){.tasty-recipes-ratings-buttons:hover span .tasty-recipes-rating-solid svg{–tr-star-opacity:.4!important;opacity:var(–tr-star-opacity)}.tasty-recipes-ratings-buttons:hover span .tasty-recipes-rating-outline svg{fill:url(#tasty-recipes-clip-0)!important}.tasty-recipes-ratings-buttons:hover>:hover .tasty-recipes-rating-solid svg,.tasty-recipes-ratings-buttons:not(:hover)>input:checked~span .tasty-recipes-rating-solid svg,.tasty-recipes-ratings-buttons>:hover .tasty-recipes-rating-solid svg,.tasty-recipes-ratings-buttons>:hover~span .tasty-recipes-rating-solid svg{fill:currentColor!important;–tr-star-opacity:1!important}.tasty-recipes-ratings-buttons:hover>:hover .tasty-recipes-rating-outline svg,.tasty-recipes-ratings-buttons:not(:hover)>input:checked~span .tasty-recipes-rating-outline svg,.tasty-recipes-ratings-buttons>:hover .tasty-recipes-rating-outline svg,.tasty-recipes-ratings-buttons>:hover~span .tasty-recipes-rating-outline svg{fill:currentColor!important}}.tasty-recipes-static-tooltip{background-color:#000;border-radius:4px;color:#fff;font-size:.9rem;opacity:0;padding:5px 10px;position:absolute;text-align:center;transition:opacity .5s ease-in-out,visibility .5s ease-in-out,transform .5s cubic-bezier(.71,1.7,.77,1.24);vertical-align:middle;visibility:hidden;width:230px;z-index:9}.tasty-recipes-static-tooltip.opened{opacity:1;transform:translateY(-4px);visibility:visible}.tasty-recipes-static-tooltip a{color:#f7d578;display:block}.tasty-recipes-static-tooltip:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #000;bottom:-6px;content:””;font-size:0;left:calc(50% – 4px);line-height:0;pointer-events:none;position:absolute;transform:translateZ(0);transition:opacity .2s ease-in-out,visibility .2s ease-in-out,transform .2s cubic-bezier(.71,1.7,.77,1.24);width:0;z-index:99}.tasty-recipes-static-tooltip.tr-hide-tail:after{display:none}.tasty-recipes,.tasty-recipes-quick-links,.tasty-recipes-ratings,.wp-admin .tasty-recipes-comment-form{–tr-star-size:18px;–tr-star-margin:3px}.tasty-recipes-rating,.tasty-recipes-ratings-buttons{color:#f2b955;color:var(–tr-star-color,#f2b955)}.tasty-recipes-comment-form{border:none;margin:0;padding:0}.tasty-recipes-comment-form.tasty-recipes-ratings{display:block}.tasty-recipes-entry-header div.tasty-recipes-rating p,.tasty-recipes-rating-stars,.tasty-recipes-ratings,.tasty-recipes-ratings-buttons{display:inline-flex}.tasty-recipes-entry-header div.tasty-recipes-rating p span.tasty-recipes-rating,.tasty-recipes-rating-stars span.tasty-recipes-rating,.tasty-recipes-ratings span.tasty-recipes-rating,.tasty-recipes-ratings-buttons span.tasty-recipes-rating{cursor:pointer;display:inline-block;font-size:var(–tr-star-size,1.1em);margin:0;padding-right:var(–tr-star-margin,.3em)}.tasty-recipes-entry-header div.tasty-recipes-rating p span.tasty-recipes-rating:first-child[data-rating=”5″],.tasty-recipes-rating-stars span.tasty-recipes-rating:first-child[data-rating=”5″],.tasty-recipes-ratings span.tasty-recipes-rating:first-child[data-rating=”5″],.tasty-recipes-ratings-buttons span.tasty-recipes-rating:first-child[data-rating=”5″]{padding-right:0}.tasty-recipes-entry-header div.tasty-recipes-rating p{display:flex;justify-content:center}.tasty-recipes-ratings-buttons{flex-direction:row-reverse}.tasty-recipes-ratings-buttons input[type=radio]{clip:auto;cursor:pointer;display:inline-block!important;height:auto;margin:0;margin-left:calc((var(–tr-star-size, 1.1em) + var(–tr-star-margin))*-1);opacity:0;position:relative;width:1.1em!important;width:calc(var(–tr-star-size, 1.1em) + var(–tr-star-margin))!important;z-index:2}.tasty-recipes-ratings-buttons>span{position:relative}.tasty-recipes-ratings-buttons>span i{font-style:normal}.tasty-recipes-ratings-buttons>span:first-child{padding-right:0!important}.tasty-recipes-rating a,.tasty-recipes-rating a:link{background:none;outline:none;text-decoration:none}.tasty-recipes-screen-reader{clip:rect(1px,1px,1px,1px);word-wrap:normal!important;border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tasty-recipes-rating-link{align-items:center;display:inline-flex}.tasty-recipes-rating-link .rating-label{font-size:80%;padding-left:.4em}.tasty-recipes-selected-minimum-rating .comment-form-comment label .required{display:none}.tasty-recipes-has-ratings{text-decoration:none!important}
Gluten-Free Meatballs
Total Time: 25 minutes
Yield: 20 meatballs
Diet: Gluten Free
Print Recipe
Pin Recipe
const share_pin_buttons = document.getElementsByClassName( ‘share-pin button’ );
if ( share_pin_buttons ) {
for ( let share_key = 0; share_key {
e.stopPropagation();
window.open(e.target.dataset.href,’targetWindow’,’toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=500′);
return false;
} );
}
}
Description
Enjoy quick and easy Gluten-Free Meatballs that are super tender and juicy in less than 30 minutes. These baked turkey meatballs are made with fresh and dried herbs and spices, and are paleo and AIP-friendly. Â
Ingredients
Units
USM
- 1/4 cup fresh basil leaves
- 1 TBSP fresh thyme
- 1 TBSP fresh parsley
- 1 medium yellow onion, roughly chopped
- 3 cloves garlic
- 1 lb ground turkey
- 1.25 tsp sea salt
- 1/2 tsp dried oregano
- 1/2 tsp black pepper (omit for AIP)
- 1/4 tsp red pepper flakes (optional, omit for AIP)
- 1.5 TBSP olive oil
Cook Mode
Prevent your screen from going dark
Instructions
- Preheat the oven to 375 F and line a large baking sheet with parchment paper.Â
- In a food processor, add the basil leaves, thyme, parsley, onion and garlic. Pulse until the ingredients are finely minced and well combined.*Â
- In a large bowl, combine ground turkey, the pulsed herb mixture, sea salt, oregano, black pepper, and red pepper flakes (if using). Stir until evenly distributed and well combined, using your hands if necessary. Avoid overpacking the meat.
- Use a spoon to scoop the meat out into 1.5 inch meatballs and arrange onto prepared baking sheet.
- Lightly brush the tops of the meatballs with olive oil.
- Bake for 15 minutes, or until the meatballs are at an internal temperature of 165F and are fully cooked through.Â
- Warm tomato sauce or nightshade-free nomato sauce and prepare any additional items you wish to serve the meatballs with such as gluten-free pasta or rice.Â
- Serve hot, garnished with fresh parsley, basil, or other fresh herbs.
Notes
*To make by hand (without a food processor): In a large bowl, combine finely chopped fresh herbs, finely diced onion, and finely minced garlic.Â
- Prep Time: 10 minutes
- Cook Time: 15 minutes
- Category: Mains
- Method: Baked
- Cuisine: Italian inspired
Did you make this recipe?
Share a photo and tag @healmedelicious — we cant wait to see what youve made!
window.trCommon={“minRating”:6,”ajaxurl”:”https:\/\/healmedelicious.com\/wp-admin\/admin-ajax.php”,”ratingNonce”:”eb1f52b943″,”postId”:13705};
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.smoothScroll = {
init() {
window.addEventListener( ‘click’, e => {
let anchor = e.target;
if ( ! anchor.classList.contains( ‘tasty-recipes-scrollto’ ) ) {
if ( anchor.tagName === ‘A’ ) {
return;
}
anchor = anchor.closest( ‘a’ );
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’ } );
history.pushState( {}, ”, selector );
}
};
(function( callback ) {
if ( document.readyState !== ‘loading’ ) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.smoothScroll.init();
});
(function(){
var bothEquals = function( d1, d2, D ) {
var ret = 0;
if (d1<=D) {
ret++;
}
if (d2<=D) {
ret++;
}
return ret === 2;
};
var frac =function frac(x,D,mixed){var n1=Math.floor(x),d1=1;var n2=n1+1,d2=1;if(x!==n1)while(bothEquals(d1,d2,D)){var m=(n1+n2)/(d1+d2);if(x===m){if(d1+d2d2)d2=D+1;else d1=D+1;break}else if(xD){d1=d2;n1=n2}if(!mixed)return[0,n1,d1];var q=Math.floor(n1/d1);return[q,n1-q*d1,d1]};frac.cont=function cont(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1<D){A=Math.floor(B);P=A*P_1+P_2;Q=A*Q_1+Q_2;if(B-AD){if(Q_1>D){Q=Q_2;P=P_2}else{Q=Q_1;P=P_1}}if(!mixed)return[0,sgn*P,Q];var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]};
window.tastyRecipesVulgarFractions = JSON.parse(decodeURIComponent(“%7B%22%C2%BC%22%3A%221%2F4%22%2C%22%C2%BD%22%3A%221%2F2%22%2C%22%C2%BE%22%3A%223%2F4%22%2C%22%E2%85%93%22%3A%221%2F3%22%2C%22%E2%85%94%22%3A%222%2F3%22%2C%22%E2%85%95%22%3A%221%2F5%22%2C%22%E2%85%96%22%3A%222%2F5%22%2C%22%E2%85%97%22%3A%223%2F5%22%2C%22%E2%85%98%22%3A%224%2F5%22%2C%22%E2%85%99%22%3A%221%2F6%22%2C%22%E2%85%9A%22%3A%225%2F6%22%2C%22%E2%85%9B%22%3A%221%2F8%22%2C%22%E2%85%9C%22%3A%223%2F8%22%2C%22%E2%85%9D%22%3A%225%2F8%22%2C%22%E2%85%9E%22%3A%227%2F8%22%7D”));
window.tastyRecipesFormatAmount = function(amount, el) {
if ( parseFloat( amount ) === parseInt( amount ) ) {
return amount;
}
var roundType=”frac”;
if (typeof el.dataset.amountShouldRound !== ‘undefined’) {
if (‘false’ !== el.dataset.amountShouldRound) {
if ( ‘number’ === el.dataset.amountShouldRound ) {
roundType=”number”;
} else if (‘frac’ === el.dataset.amountShouldRound) {
roundType=”frac”;
} else if (‘vulgar’ === el.dataset.amountShouldRound) {
roundType=”vulgar”;
} else {
roundType=”integer”;
}
}
}
if (‘number’ === roundType) {
amount = Number.parseFloat(amount).toPrecision(2);
} else if (‘integer’ === roundType) {
amount = Math.round(amount);
} else if (‘frac’ === roundType || ‘vulgar’ === roundType) {
var denom = 8;
if (typeof el.dataset.unit !== ‘undefined’) {
var unit = el.dataset.unit;
if ([‘cups’,’cup’,’c’].includes(unit)) {
denom = 4;
if (0.125 === amount) {
denom = 8;
}
if (“0.1667″ === Number.parseFloat( amount ).toPrecision(4)) {
denom = 6;
}
}
if ([‘tablespoons’,’tablespoon’,’tbsp’].includes(unit)) {
denom = 2;
}
if ([‘teaspoons’,’teaspoon’,’tsp’].includes(unit)) {
denom = 8;
}
}
var amountArray = frac.cont( amount, denom, true );
var newAmount=””;
if ( amountArray[1] !== 0 ) {
newAmount = amountArray[1] + ‘/’ + amountArray[2];
if (‘vulgar’ === roundType) {
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (newAmount === window.tastyRecipesVulgarFractions[vulgar]) {
newAmount = vulgar;
}
});
}
}
if ( newAmount ) {
newAmount=” ” + newAmount;
}
if ( amountArray[0] ) {
newAmount = amountArray[0] + newAmount;
}
amount = newAmount;
}
return amount;
};
window.tastyRecipesUpdatePrintLink = () => {
const printButton = document.querySelector( ‘.tasty-recipes-print-button’ );
if ( ! printButton ) {
return;
}
const printURL = new URL( printButton.href );
const searchParams = new URLSearchParams( printURL.search );
const unitButton = document.querySelector( ‘.tasty-recipes-convert-button-active’ );
const scaleButton = document.querySelector( ‘.tasty-recipes-scale-button-active’ );
let unit=””;
let scale=””;
if ( unitButton ) {
unit = unitButton.dataset.unitType;
searchParams.delete(‘unit’);
searchParams.set( ‘unit’, unit );
}
if ( scaleButton ) {
scale = scaleButton.dataset.amount;
searchParams.set( ‘scale’, scale );
}
const paramString = searchParams.toString();
const newURL = ” === paramString ? printURL.href : printURL.origin + printURL.pathname + ‘?’ + paramString;
const printLinks = document.querySelectorAll( ‘.tasty-recipes-print-link’ );
printLinks.forEach( ( el ) => {
el.href = newURL;
});
const printButtons = document.querySelectorAll( ‘.tasty-recipes-print-button’ );
printButtons.forEach( ( el ) => {
el.href = newURL;
});
};
document.addEventListener( ‘DOMContentLoaded’, () => {
if ( ! window.location.href.includes( ‘/print/’ ) ) {
return;
}
const searchParams = new URLSearchParams( window.location.search );
const unit = searchParams.get( ‘unit’ );
const scale = searchParams.get( ‘scale’ );
if ( unit && ( ‘metric’ === unit || ‘usc’ === unit ) ) {
document.querySelector( ‘.tasty-recipes-convert-button[data-unit-type=”‘ + unit + ‘”]’ ).click();
}
if ( scale && Number(scale) > 0 ) {
document.querySelector( ‘.tasty-recipes-scale-button[data-amount=”‘ + Number(scale) + ‘”]’ ).click();
}
});
}());
(function(){
var buttonClass=”tasty-recipes-convert-button”,
buttonActiveClass=”tasty-recipes-convert-button-active”,
buttons = document.querySelectorAll(‘.tasty-recipes-convert-button’);
if ( ! buttons ) {
return;
}
buttons.forEach(function(button){
button.addEventListener(‘click’, function(event){
event.preventDefault();
var recipe = event.target.closest(‘.tasty-recipes’);
if ( ! recipe ) {
return;
}
var otherButtons = recipe.querySelectorAll(‘.’ + buttonClass);
otherButtons.forEach(function(bt){
bt.classList.remove(buttonActiveClass);
});
button.classList.add(buttonActiveClass);
var unitType = button.dataset.unitType;
var dataset=”nf” + unitType.charAt(0).toUpperCase() + unitType.slice(1);
var convertables = recipe.querySelectorAll(‘span[data-nf-original]’);
convertables.forEach(function(convertable){
if (typeof convertable.dataset.amountOriginalType === ‘undefined’
&& ‘usc’ === convertable.dataset.nfOriginal) {
if (-1 !== convertable.innerText.indexOf(‘/’)) {
convertable.dataset.amountOriginalType=”frac”;
}
if (-1 !== convertable.innerText.indexOf(‘.’)) {
convertable.dataset.amountOriginalType=”number”;
}
Object.keys(window.tastyRecipesVulgarFractions).forEach(function(vulgar) {
if (-1 !== convertable.innerText.indexOf(vulgar)) {
convertable.dataset.amountOriginalType=”vulgar”;
}
});
}
convertable.innerText = convertable.dataset[dataset];
if (typeof convertable.dataset.unit !== ‘undefined’) {
convertable.dataset.unit = convertable.dataset[dataset + ‘Unit’];
}
if (typeof convertable.dataset.amount !== ‘undefined’) {
convertable.dataset.amount = convertable.dataset[dataset];
if (‘metric’ === unitType) {
convertable.dataset.amountShouldRound = parseInt(convertable.dataset.amount) >= 10 ? ‘integer’ : ‘number’;
} else if (typeof convertable.dataset.amountOriginalType !== ‘undefined’) {
convertable.dataset.amountShouldRound = convertable.dataset.amountOriginalType;
} else {
convertable.dataset.amountShouldRound = false;
}
convertable.innerText = window.tastyRecipesFormatAmount(convertable.dataset[dataset], convertable);
}
if (convertable.classList.contains(‘nutrifox-unit’)) {
if (‘gram’ === convertable.dataset[dataset]) {
convertable.innerText=”grams”;
}
}
});
document.querySelectorAll(‘.tasty-recipes-scale-button-active’).forEach(function(scaleButton){
scaleButton.click();
});
window.tastyRecipesUpdatePrintLink();
});
});
}());
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 );
});
The post Gluten-Free Meatballs appeared first on Heal Me Delicious.