Imagine slicing into a thick slab of tofu with a shattering parmesan-almond crust that crackles under your fork, revealing a creamy, tender interior — then twirling it through silky zucchini noodles coated in a garlicky basil cream sauce. That is exactly what this Air Fryer Tofu Milanese delivers. It is the kind of Italian-inspired lunch that makes you forget you are eating low-carb, with layers of umami from aged parmesan, aromatic fresh basil, and the deeply satisfying richness of butter-kissed heavy cream.

Each generous serving clocks in at roughly 660 calories with 55 grams of fat, 32 grams of protein, and just 5 grams of net carbs — an ideal keto macro profile where fat accounts for about 75% of total energy. The combination of extra-firm tofu and the parmesan-almond crust delivers serious protein without any hidden carbs, while the cream sauce and butter ensure your fat intake stays exactly where it needs to be for sustained ketosis.

Best of all, this entire meal comes together in about 33 minutes with minimal cleanup. The air fryer does the heavy lifting, crisping the tofu to golden perfection with barely any oil, while you quickly toss together the zucchini noodles and cream sauce on the stovetop. It packs beautifully into containers for weekday lunches — just keep the sauce separate and reheat everything for a restaurant-quality midday meal at your desk.

Ingredients (serves 2)

For the tofu milanese:

  • 12 oz (340g) extra-firm tofu, drained and pressed
  • 1/4 cup (28g) blanched almond flour
  • 1/4 cup (25g) finely grated parmesan cheese
  • 1 tsp Italian seasoning
  • 1/2 tsp garlic powder
  • 1/4 tsp fine sea salt
  • 1/8 tsp freshly ground black pepper
  • 1 large egg, beaten
  • Olive oil spray

For the creamy basil zucchini noodles:

  • 1 large zucchini (about 10 oz / 280g), spiralized
  • 1 tbsp (14g) unsalted butter
  • 2 cloves garlic, minced
  • 1/3 cup (80ml) heavy whipping cream
  • 1/2 cup (56g) shredded low-moisture mozzarella
  • 1/4 tsp fine sea salt
  • Pinch of red pepper flakes
  • 8–10 fresh basil leaves, torn

For serving:

  • 1/2 tbsp (7ml) extra-virgin olive oil
  • Freshly grated parmesan, for finishing
  • Additional fresh basil leaves

Instructions

  1. Press and slice the tofu. If you have not already pressed your tofu, wrap the block in a clean kitchen towel and place a heavy skillet or cutting board on top for at least 15 minutes to remove excess moisture. Slice the pressed tofu horizontally into 4 even steaks, each about 1/2-inch (1.25cm) thick. Pat completely dry with paper towels — this is essential for a crispy crust.

  2. Prepare the coating. In a shallow bowl or plate, combine the almond flour, grated parmesan, Italian seasoning, garlic powder, salt, and black pepper. Stir with a fork until evenly mixed. Beat the egg in a separate shallow bowl.

  3. Bread the tofu steaks. Dip each tofu steak first into the beaten egg, allowing the excess to drip off, then press both sides firmly into the almond-parmesan mixture. Make sure the coating adheres well, pressing gently with your fingertips. Set the breaded steaks on a plate and let them rest for 2–3 minutes while the air fryer preheats — this helps the coating set.

  4. Preheat the air fryer. Set your air fryer to 400°F (200°C) and preheat for 3 minutes. Lightly spray the basket or tray with olive oil spray.

  5. Air fry the tofu milanese. Arrange the breaded tofu steaks in a single layer in the air fryer basket, leaving a little space between each piece for air circulation. Give each steak a light spritz of olive oil spray on top. Air fry at 400°F (200°C) for 7 minutes. Carefully flip each steak using a thin spatula, spritz the other side lightly with oil spray, and air fry for another 5–6 minutes until deeply golden and crisp on both sides. The coating should look toasted and the edges should be firm and crunchy.

  6. Start the sauce while the tofu cooks. Melt the butter in a medium skillet over medium heat. Add the minced garlic and cook, stirring constantly, for about 30 seconds until fragrant but not browned. Pour in the heavy cream, stir to combine, and let it simmer gently for 2 minutes until it just begins to thicken.

  7. Add the zucchini noodles. Toss the spiralized zucchini into the skillet with the cream sauce. Cook for 2–3 minutes, tossing frequently with tongs, until the zucchini is just tender but still has a slight bite. You do not want mushy noodles — they should be al dente. Remove the skillet from the heat.

  8. Melt in the mozzarella. Scatter the shredded mozzarella over the warm zucchini noodles and toss gently until the cheese melts into the cream sauce, creating a luscious, clingy coating. Season with salt and red pepper flakes. Fold in the torn basil leaves.

  9. Plate and serve. Divide the creamy basil zucchini noodles between two plates or bowls. Lean two tofu milanese steaks against each pile of noodles. Drizzle each plate with a little extra-virgin olive oil, finish with a shower of freshly grated parmesan and a few whole basil leaves. Serve immediately.

Nutrition per Serving

Nutrient Amount
Calories ~660 kcal
Fat ~55g
Protein ~32g
Total Carbs ~9g
Fiber ~4g
Net Carbs ~5g

Nutrition values are approximate and based on the specific ingredients and quantities listed. Actual values may vary depending on brands used.

Tips & Variations

Press the tofu thoroughly for maximum crispiness. The number-one enemy of crunchy air-fried tofu is excess water. For best results, press your extra-firm tofu for a full 20–30 minutes under a heavy weight, then blot each steak dry with paper towels right before breading. If you own a tofu press, even better — use it for at least 15 minutes. The drier the surface, the better the egg wash and coating will adhere, and the crispier your finished milanese will be.

Swap almond flour for a nut-free alternative. If you are avoiding tree nuts, replace the almond flour with an equal amount of sunflower seed flour or finely ground pork-free pork rind-style puffed cheese snacks (like Moon Cheese, crushed). Sunflower seed flour works nearly identically in terms of binding and crunch. Just be aware that sunflower seed flour can turn slightly green when combined with baking soda — not relevant here, but good to know for other recipes.

Watch for hidden carbs in pre-shredded mozzarella. Many store-bought pre-shredded cheeses contain potato starch or cellulose as anti-caking agents, which can add 1–2 grams of carbs per serving. For the cleanest keto macros, buy a block of low-moisture mozzarella and shred it yourself. It also melts significantly better into the cream sauce, giving you that beautiful, glossy finish.

Make it a meal-prep powerhouse. Store the crispy tofu steaks and the creamy zucchini noodles in separate airtight containers in the refrigerator for up to 3 days. When ready to eat, reheat the tofu steaks in the air fryer at 375°F (190°C) for 3–4 minutes to restore their crunch, and warm the noodles gently in a skillet or microwave. Keeping them separate prevents the coating from getting soggy.

Add an eggplant layer for a heartier version. Slice a small Italian eggplant into 1/4-inch rounds, salt them for 10 minutes to draw out moisture, then air fry alongside the tofu for a keto riff on eggplant parmesan. The eggplant adds volume and fiber without significantly increasing net carbs — a small Italian eggplant adds only about 2–3 grams of net carbs split across two servings.

Frequently Asked Questions

Is tofu actually keto-friendly?
Yes, tofu is one of the most keto-compatible plant proteins available. A 6-ounce serving of extra-firm tofu contains roughly 2 grams of net carbs, 9 grams of fat, and 17 grams of protein. It is significantly lower in carbs than beans, lentils, or most other vegetarian protein sources. The key is choosing extra-firm or firm varieties, which have more protein and less water than silken tofu. Combined with the high-fat cream sauce and parmesan crust in this recipe, tofu fits perfectly into a well-formulated ketogenic diet.
Can I use coconut flour instead of almond flour for the coating?
Coconut flour is not an ideal swap here because it absorbs significantly more moisture than almond flour and does not create the same crispy, breadcrumb-like texture. If you must avoid almond flour, your best bet is finely ground sunflower seed flour or crushed hemp hearts, both of which provide a similar crunch and golden color when air fried. You could also try a mixture of finely grated parmesan alone — double the parmesan to 1/2 cup total and skip the almond flour entirely. The result will be thinner and more delicate but still delicious and crispy.
How should I store leftovers, and how long do they keep?
Store the tofu steaks and zucchini noodles in separate airtight containers in the refrigerator. The tofu keeps well for up to 4 days, while the zucchini noodles are best consumed within 2–3 days as they release moisture over time. To reheat, pop the tofu back into the air fryer at 375°F (190°C) for 3–4 minutes until the crust crisps up again. Warm the noodles in a skillet over medium-low heat, adding a splash of cream if the sauce has thickened too much. I do not recommend freezing this dish, as the zucchini noodles become watery when thawed.
How can I make this dairy-free for vegan keto?
To make this fully vegan, replace the egg wash with a flax egg (1 tablespoon ground flaxseed mixed with 3 tablespoons water, rested for 5 minutes) or a thin layer of unsweetened almond butter. Swap the parmesan in the coating for 2 tablespoons of nutritional yeast mixed with 1 tablespoon of hemp hearts for a similar umami-rich crunch. For the sauce, use full-fat coconut cream instead of heavy cream, coconut oil instead of butter, and skip the mozzarella or use a keto-friendly vegan cheese that melts well. The macros will shift slightly — coconut cream is higher in fat and has about 2 grams of net carbs per 1/3 cup — but the dish will still be solidly keto.
My tofu coating keeps falling off in the air fryer — what am I doing wrong?
This almost always comes down to moisture on the tofu surface. After pressing, make sure you thoroughly pat each steak dry with paper towels — both sides and the edges. Second, let the breaded steaks rest for 2–3 minutes on a plate before placing them in the air fryer; this allows the egg wash to set slightly and bond with the almond-parmesan crust. Third, avoid overcrowding the basket and resist the urge to move the steaks during the first 7 minutes of cooking. The coating needs uninterrupted contact with hot air to form a firm crust before flipping. Finally, use a thin, flat spatula to flip rather than tongs, which can grip and pull the coating off.