Quick Recipe Version (TL;DR)
Quick Ingredients
- 10 large eggs
- 1/3 cup whole milk
- 1 cup shredded low-moisture mozzarella cheese, divided
- 2 tablespoons olive oil, divided
- 1 medium zucchini, sliced into half-moons
- 8 ounces cremini mushrooms, quartered
- 1 cup cherry tomatoes, halved
- 1 medium yellow onion, thinly sliced
- 2 cups packed baby spinach
- 1 garlic clove, minced
- 2 tablespoons chopped fresh parsley
- 1 teaspoon fresh thyme leaves
- 2 tablespoons torn fresh basil
- 3/4 teaspoon fine sea salt, divided
- 3/8 teaspoon ground black pepper, divided
- 1/8 teaspoon crushed red pepper flakes, optional
Do This
- 1. Preheat the oven to 425°F and prepare a rimmed baking sheet and a 10-inch oven-safe skillet.
- 2. Cook the sliced onion in 1 tablespoon olive oil for 23 minutes, stirring regularly, until soft and deeply golden.
- 3. After the onion has cooked for 8 minutes, roast the zucchini, mushrooms, and tomatoes with the remaining oil, 1/4 teaspoon salt, and 1/8 teaspoon pepper for 15 minutes.
- 4. Lower the oven to 375°F. Add the garlic and spinach to the onions and cook for 2 minutes.
- 5. Whisk the eggs, milk, parsley, thyme, remaining salt and pepper, red pepper flakes, and 1/2 cup mozzarella. Pour into the skillet with the roasted vegetables.
- 6. Cook on the stovetop for 3 minutes, top with the remaining mozzarella, and bake for 12 minutes. Rest for 5 minutes and garnish with basil.
Why You’ll Love This Recipe
- Roasting the vegetables concentrates their flavor and keeps the frittata from becoming watery.
- Caramelized onions, fresh herbs, and melted mozzarella make every bite savory and satisfying.
- It works equally well for breakfast, brunch, lunch, or a simple dinner.
- Leftover slices store and reheat well, making this a practical make-ahead meal.
Grocery List
- Produce: 1 medium zucchini, 8 ounces cremini mushrooms, 1 cup cherry tomatoes, 1 medium yellow onion, 2 cups baby spinach, 1 garlic clove, fresh parsley, fresh thyme, and fresh basil
- Dairy: 10 large eggs, 1/3 cup whole milk, and 4 ounces low-moisture mozzarella cheese
- Pantry: Olive oil, fine sea salt, ground black pepper, and optional crushed red pepper flakes
Full Ingredients
For the Roasted Vegetables
- 1 medium zucchini, about 8 ounces, trimmed and cut into 1/4-inch half-moons
- 8 ounces cremini mushrooms, wiped clean and quartered
- 1 cup cherry tomatoes, halved
- 1 tablespoon olive oil
- 1/4 teaspoon fine sea salt
- 1/8 teaspoon ground black pepper
For the Caramelized Onion and Spinach
- 1 tablespoon olive oil
- 1 medium yellow onion, about 8 ounces, thinly sliced into 1/8-inch strips
- 1 garlic clove, minced
- 2 cups packed baby spinach, about 2 ounces
For the Egg Mixture
- 10 large eggs
- 1/3 cup whole milk
- 1/2 teaspoon fine sea salt
- 1/4 teaspoon ground black pepper
- 1/8 teaspoon crushed red pepper flakes, optional
- 2 tablespoons finely chopped fresh parsley
- 1 teaspoon fresh thyme leaves
- 1 cup shredded low-moisture mozzarella cheese, about 4 ounces, divided
For Serving
- 2 tablespoons torn fresh basil leaves

Step-by-Step Instructions
Step 1: Preheat the oven and prepare the vegetables
Arrange one rack in the center of the oven and preheat the oven to 425°F. Line a large rimmed baking sheet with parchment paper for easier cleanup. Cut the zucchini into 1/4-inch half-moons, quarter the mushrooms, halve the cherry tomatoes, and thinly slice the onion. Have a 10-inch oven-safe skillet ready for the onions and frittata.
Step 2: Begin caramelizing the onion
Heat 1 tablespoon olive oil in the oven-safe skillet over medium heat. Add the sliced onion and cook for 5 minutes, stirring frequently. Reduce the heat to medium-low and continue cooking for 18 minutes, stirring every 2 to 3 minutes. The onion should cook for 23 minutes total and become very soft, sweet, and deep golden brown. If it begins to darken too quickly, lower the heat rather than adding more oil.
Step 3: Roast the zucchini, mushrooms, and tomatoes
After the onion has been cooking for 8 minutes, place the zucchini, mushrooms, and cherry tomatoes on the prepared baking sheet. Drizzle with 1 tablespoon olive oil and season with 1/4 teaspoon salt and 1/8 teaspoon black pepper. Toss well, then spread the vegetables into a single layer, turning the tomatoes cut-side up when possible.
Roast at 425°F for exactly 15 minutes, stirring the zucchini and mushrooms once after 8 minutes. The zucchini should be tender with lightly browned edges, the mushrooms should look concentrated and golden, and the tomatoes should be softened but not collapsed. Remove the baking sheet from the oven and immediately reduce the oven temperature to 375°F.
Step 4: Wilt the spinach
When the onion has finished caramelizing, add the minced garlic to the skillet and cook over medium-low heat for 30 seconds. Add the baby spinach and cook for 1 minute 30 seconds, folding it into the onion until just wilted. Spread the onion and spinach mixture evenly across the bottom of the skillet.
Step 5: Whisk the egg mixture
Crack the eggs into a large mixing bowl. Add the milk, remaining 1/2 teaspoon salt, remaining 1/4 teaspoon black pepper, optional red pepper flakes, parsley, and thyme. Whisk for about 45 seconds, until the yolks and whites are fully combined and the mixture is lightly frothy. Stir in 1/2 cup of the shredded mozzarella.
Step 6: Assemble and start the frittata on the stovetop
Add the roasted zucchini, mushrooms, and cherry tomatoes to the skillet, distributing them evenly over the onions and spinach. Pour the egg mixture slowly over the vegetables. Use a silicone spatula to gently lift and reposition any vegetables so the egg can flow around them. Sprinkle the remaining 1/2 cup mozzarella evenly over the top.
Set the skillet over medium-low heat and cook without stirring for 3 minutes. The outside edge should begin to set, but the center will still be liquid. This brief stovetop start helps the frittata cook evenly in the oven.
Step 7: Bake, rest, and serve
Transfer the skillet to the 375°F oven and bake for exactly 12 minutes. The frittata is ready when the edges are puffed, the cheese is melted, and the center is set with only a slight jiggle. An instant-read thermometer inserted into the center should register 160°F. Avoid baking until the center feels firm, as the eggs will continue cooking in the hot skillet.
Place the skillet on a heat-safe surface and let the frittata rest for 5 minutes. Run a thin spatula around the edge, garnish with the torn basil, and cut into 6 wedges. Serve warm or at room temperature.
Pro Tips
- Use the right skillet: A 10-inch cast-iron or oven-safe nonstick skillet creates a thick, tender frittata. A larger skillet will produce a thinner frittata that cooks more quickly.
- Do not crowd the roasting pan: Keep the vegetables in one layer so they roast instead of steaming. Use two baking sheets if your pan is small.
- Choose low-moisture mozzarella: It melts evenly without releasing as much liquid as fresh mozzarella.
- Watch the center: Remove the frittata when it has a slight jiggle. Residual heat will finish setting the eggs during the 5-minute rest.
- Protect the skillet handle: Once the skillet comes out of the oven, cover the hot handle with a dry kitchen towel or silicone handle cover as a reminder that it is hot.
Variations
- Mediterranean frittata: Replace the mozzarella with 3/4 cup crumbled feta and add 1/4 cup sliced Kalamata olives with the roasted vegetables.
- Chicken sausage frittata: Add 6 ounces cooked, sliced chicken sausage to the skillet when you add the roasted vegetables.
- Seasonal vegetable frittata: Replace the zucchini with 1 cup chopped asparagus or diced red bell pepper, keeping the same roasting time and temperature.
Storage & Make-Ahead
Let leftover frittata cool completely, then refrigerate it in an airtight container for up to 4 days. Reheat individual slices in the microwave for 45 to 60 seconds, or cover and warm them in a 325°F oven for 10 to 12 minutes. For longer storage, wrap individual cooled slices tightly and freeze them for up to 2 months. Thaw overnight in the refrigerator before reheating. To prepare ahead, roast the vegetables and caramelize the onion up to 2 days in advance; refrigerate them separately, then bring them close to room temperature before assembling the frittata. The entire frittata can also be baked 1 day ahead and served chilled, at room temperature, or gently reheated.
Nutrition (per serving)
Calories: 255 kcal | Carbs: 10g | Protein: 19g | Fat: 17g | Saturated Fat: 6g | Fiber: 2g | Sugar: 5g | Sodium: 580mg | Cholesterol: 320mg
