Preheat the air fryer: Set it to 375°F (190°C) so it’s hot when you’re ready. This helps the zucchini cook evenly and the cheese brown nicely.
Prep the zucchini: Slice each zucchini in half lengthwise. Use a spoon to scoop out the center flesh, leaving a 1/4-inch shell. Chop about half of the scooped flesh to add to the filling; discard the rest or save for another use.
Season the boats: Lightly brush the cut sides with olive oil and sprinkle with salt and pepper. This adds flavor from the start.
Cook the filling: Warm 1 tablespoon olive oil in a skillet over medium heat. Add the onion and cook 3–4 minutes until soft. Stir in garlic for 30 seconds.
Add protein and zucchini flesh: Add your ground meat (or beans for a vegetarian version) and the chopped zucchini flesh. Cook until the meat is browned and crumbled, about 5–6 minutes. If using beans, just warm through for 2–3 minutes.
Season and bind: Stir in tomato paste, crushed tomatoes (or salsa), Italian seasoning, smoked paprika, salt, and pepper. Fold in the cooked rice or bread crumbs to help the filling hold together. Simmer 2–3 minutes to thicken slightly, then remove from heat.
Add cheese to the filling: Stir in 1/2 cup shredded cheese. This melts a bit and helps the filling stay put in the boats.
Stuff the boats: Spoon the filling into each zucchini half, packing it in without over-mounding. Top with the remaining 1/2 cup shredded cheese and Parmesan if using.
Air fry in batches if needed: Arrange stuffed zucchini in the air fryer basket in a single layer. Cook at 375°F (190°C) for 10–12 minutes, until the zucchini is tender when pierced and the cheese is golden and bubbly.
Finish and serve: Let them rest 2 minutes. Sprinkle with fresh parsley or basil. Serve as is or with a crisp side salad.