Low Carb Ham & Swiss Ziti Casserole
Published April 6, 2026 • Updated May 17, 2026
This post may contain affiliate links. See my disclosure policy.
This low carb ham and swiss ziti casserole is my kind of comfort food…easy, cheesy, and made with protein-packed lupini pasta so it actually keeps you full. I mix in smoky ham, melty swiss, spinach, and a creamy sauce for a cozy dinner that tastes like the classic, just without all the carbs.
This is one of those lazy casseroles I lean on when I want something hearty and cozy, but I’m not in the mood to spend an hour in the kitchen. It’s also one of my favorite ways to use up leftover ham, especially after a holiday when you’ve got random slices sitting in the fridge and no real plan for them. I can throw this together pretty quickly, slide it in the oven, and suddenly it feels like I actually tried…when in reality, this recipe is doing most of the heavy lifting.

Instead of traditional pasta, I’m using lupini-based ziti, which keeps the carbs low but still gives you that familiar pasta bite. As someone who’s tested a lot of low carb pastas over the years, I can tell you not all of them are worth it, but this one holds up really well in a baked casserole. Plus, it’s gluten-free…if that’s important to you. It doesn’t turn mushy, and it actually absorbs the creamy cheese sauce, which is key here. You still get that classic ham and cheese pasta feel, just without the excess carbs!
For the flavor, I keep it simple but intentional. The smoky ham, nutty melted swiss, and a handful of spinach balance each other out so it’s not just a heavy cheese bomb. I also layer in aromatics and seasoning to build that depth you expect from a comfort food dish. From a nutrition standpoint, this ends up being higher in protein thanks to the lupini pasta and ham, which means it’s a lot more filling than your typical casserole…and you’re not hungry again an hour later digging through the pantry.
What I’ve learned after making recipes like this for years, especially for my family, is that easy wins matter. This is the kind of dinner that gets everyone to the table without complaints, uses up what you already have, and doesn’t leave you with a sink full of dishes. It’s familiar, it’s practical, and it actually fits into a low carb, high protein lifestyle without feeling like you’re missing out.
Explore hundreds of keto recipe videos with step-by-step instructions, tips, and tricks to make keto easy.
Ingredients
8 oz keto ziti noodles
3 tablespoons butter
1/4 cup chopped medium yellow onion
1 tablespoon chopped garlic
10 oz package frozen chopped spinach, thawed & well drained
1/4 teaspoon cayenne pepper
2 tablespoons cornstarch or 2 teaspoons arrowroot powder
2 cups milk of choice
2 tablespoons Dijon mustard
3 cups cooked diced ham
7 oz package Swiss cheese, divided
1/2 teaspoon dried rosemary needles
3/4 teaspoon salt
1/2 teaspoon ground black pepper
Step by Step Instructions
Step by Step Instructions
Cook pasta
Cook pasta according to package directions, drain and set aside.
- 8 oz package of lupini ziti pasta
Saute aromatics
Meanwhile, in a large skill, melt butter over medium heat. Add onion and garlic, saute until onion is softened, about 3-4 minutes.
- 3 tablespoons butter
- 1/4 cup chopped yellow onion
- 1 tablespoon chopped garlic
Add spinach and thicken
Add spinach and cayenne pepper, continue cooking until all liquid is absorbed. Stir in cornstarch or arrowroot powder and cook for 1 minute.
- 10 oz package frozen chopped spinach, thawed & well drained
- 1/4 teaspoon cayenne pepper
- 2 tablespoons cornstarch or 2 teaspoons arrowroot powder
Make it creamy
Stir in milk and mustard, cook until thickened.
- 2 cups milk of choice
- 2 tablespoons Dijon mustard
Add ham and cheese
Stir in ham, cooked pasta, half of the swiss cheese, rosemary, salt and pepper. Mix well until combined.
- 3 cups cooked diced ham
- cooked pasta
- 3.5 oz Swiss cheese
- 1/2 teaspoon dried rosemary needles
- 3/4 teaspoon salt
- 1/2 teaspoon black pepper
Bake
Transfer to a greased baking dish, top with remaining cheese. Cover and bake at 350 degrees F for 30 minutes.
- 3.5 oz Swiss cheese
Nutrition disclaimer
The nutrition information provided is an estimate and is for informational purposes only. I am a Doctor of Pharmacy (Pharm.D.); however, this content is not intended to be a substitute for professional medical advice, diagnosis, or treatment. Always consult your physician or other qualified health provider before making any lifestyle changes or beginning a new nutrition program.
Your Macros. Your Recipes. Calculated in 60 Seconds.
Get personalized keto macros and instantly see which recipes fit your targets. No more guessing what to eat.
Get My Macros + Recipes →Frequently Asked Questions
Can I use a different low carb pasta instead of lupini ziti?
Yes, but not all low carb pastas behave the same. I’ve tested quite a few, and lupini pasta holds up really well in baked dishes without getting mushy. If you swap it, look for one that can handle baking, otherwise you might end up with a softer texture.
Do I have to use cornstarch or arrowroot powder?
This helps thicken the sauce so it clings to the pasta instead of being watery. If you’re strict low carb, go with arrowroot or even a tiny pinch of xanthan gum, but don’t skip it completely or the sauce won’t come together the same.
Can I make this ahead of time?
Yes, and honestly this is a great make-ahead meal. You can assemble everything, cover it, and store it in the fridge for up to 24 hours before baking. Just add a few extra minutes to the bake time if it’s going in cold.

Thought pasta bakes were behind me. Apparently not.
Smelled like a real ham casserole out of the oven. I didn't trust lupini in something baked, figured the smell would give it away. It didn't.
Kevin, lupini has almost no smell of its own, which is why it disappears into a baked dish. The ham and Dijon do all the work, and I've never had anyone clock it on the first bite.
Ha, that's exactly what I was doing, hovering over the pan the whole time.
Honestly shocked the sauce came together so fast, I was sure I'd blow the roux, but it thickened right up once the milk went in. First time with lupini pasta and I was braced for weirdness, but they just absorbed everything and disappeared. Went heavy on the swiss and I'd pull back next time, so four stars until I get the ratio right. Already have a second batch planned.
Anyone else tried pork rind crumble on top? Had a half bag sitting around so I just crushed them over before it went in the oven. Was not prepared for how much it changed things. Sauce stays creamy underneath and then you hit that salty crunch, completely different casserole. Doing this every time now.
Pork rinds on a hot baked casserole, hadn't even thought of that. The cream sauce here is thick enough to hold up under it and that salty crunch on top sounds exactly right.
My 10-year-old watched me add the spinach and gave me the look, so I was fully prepared for a battle at dinner. She cleaned her bowl without a word. I think the dijon-cream sauce does something to the spinach where it just kind of melts into the whole thing instead of announcing itself. The lupini pasta held up better than I expected too (we've had some mushy casserole situations before). My husband's only note was that he'd want more ham, which, fair, so I'll probably bump it up a bit next time.
Pre-dinner look, clean bowl. That's exactly how this one converts the holdouts. Your husband's not wrong either, I've bumped the ham to 4 cups and the sauce handles it.
The creamy sauce and ham hit exactly right, but I'd cut the Dijon back by half next time because it's competing with the swiss instead of backing it up.
Tried that and the sauce went flat. Two tablespoons in that much liquid is already pretty restrained, but if your Dijon runs sharp, half is worth a test.
Four batches in. This is the casserole I've been looking for since going low carb two years ago. The thing that unlocked it: squeezing the spinach completely dry. First two times, the sauce thinned out before I got it to the table and I couldn't figure out why. Wrung it in a dish towel until nothing came out, and the sauce stayed thick the whole time. That Dijon surprised me. It gives the whole thing this slight sharpness that cuts right through the richness. I make this Sunday nights and it holds through Thursday, which almost never happens with casseroles. 28g of protein per serving on something that tastes like this is still hard to believe.
Four batches to nail the spinach thing is actually fast, for the record. Paper towels took forever. Dish towel changed it all. No comparison.
My son watched me drain the spinach and immediately declared he wasn't eating it. Then he took one bite and forgot he was supposed to be protesting. The Dijon is doing something sneaky and I'm not mad about it.
The Dijon disappears into the sauce but without it the whole thing tastes flat. Took me a few rounds to realize that. Your son is officially a convert.
Made this for a cookout last weekend and my friend who just started keto texted me that night asking where I got the pasta because she genuinely thought it was regular ziti. The creamy swiss sauce is freaking unbelievable over lupini noodles.
The friend text is the best part. Lupini holds up in a baked dish like this in a way other low carb pastas don't, no mushiness, nothing that gives it away.
Fourth or fifth time making this and I finally started squeezing the spinach in a dish towel instead of pressing it with a spoon. Sauce stays so much thicker, no wateriness. Won't go back.
Yeah, spoons don't cut it. Even pressing hard I'd still get that wateriness. The dish towel gets the last 20% out and that's exactly what keeps the sauce thick.
My son has a radar for keto swaps and usually calls them out right away. Made this on a Wednesday night, and he was halfway through his portion before he asked what kind of pasta it was. Not 'is this keto?' Just curiosity. I told him lupini beans and he shrugged and kept eating. The creamy swiss sauce with the Dijon in it really does carry the whole thing.
A shrug mid-bite is the best outcome. He just wanted to know what it was, not whether he should be eating it. That's a different question.
I've tried probably four or five different low carb pasta bakes over the past year looking for something that actually feels like real comfort food and most of them are passable but something's always off. This one figured out the thing the others miss. The Dijon mustard in the sauce is what I keep thinking about, that sharpness cutting through the swiss and ham so it doesn't just taste heavy and monotonous. I've used other pasta substitutes before that turn to mush but the lupini ziti held up through reheating, which is usually where these casseroles lose me completely. Even the spinach wasn't an afterthought, it absorbed into the sauce in a way that made the whole thing feel substantial instead of like a health checkbox. This is the version I'm actually sticking with.
Reheating is where most of these fall apart and lupini just doesn't do that. And the Dijon almost didn't make the final cut for that sauce. Glad I kept it.
I've tried at least four keto pasta casseroles over the past year and the sauce on most of them either breaks or turns gluey when it cools. The Dijon here keeps it from going flat, and the lupini pasta holds up better than the shirataki I usually reach for.
Yep, the Dijon helps bind the sauce so it doesn't break when it cools. Shirataki gets waterlogged in baked dishes anyway.
The spinach drain step is not optional, learned that the hard way. First time I thought squeezing it over the sink was good enough but the sauce broke and went watery on me. Second batch I pressed it in a clean dish towel until nothing came out and the cream sauce thickened up around the lupini pasta the way it's supposed to. Also went half swiss half gruyere on that second run and that nuttiness against the dijon is freaking good.
Half gruyere was a smart call, the nuttiness against the dijon is real. And yeah, dish towel the spinach until nothing comes out. Squeezing over the sink looks like enough. It's not.
Brought this to a spring potluck last weekend and fielded three separate 'what pasta is this?' questions from people who weren't eating low carb. Told them lupini, got blank stares, they came back for more anyway.
Every single time with lupini. Nobody knows what it is, and somehow that never stops them from going back for more.