Quick Recipe Version (TL;DR)
Quick Ingredients
- 2 lb (900 g) cauliflower florets
- 4 tbsp unsalted butter, plus 1 tbsp melted (divided)
- 1/3 cup heavy cream; 2 tbsp sour cream (optional)
- 1 large egg yolk (optional)
- 1 1/2 cups shredded sharp cheddar, divided
- 2 tbsp grated Parmesan
- 1 tbsp olive oil
- 1 tbsp unsalted butter
- 1 medium onion, finely diced; 3 garlic cloves, minced
- 1 1/2 lb (680 g) ground beef (85–90% lean) or ground lamb
- 2 tbsp tomato paste; 1 tsp Dijon mustard
- 1/2 cup beef stock; 1 tbsp coconut aminos or 2 tsp Worcestershire
- 1 1/4 tsp kosher salt; 1/2 tsp black pepper
- 1 tsp dried thyme (or 2 tsp fresh); 1 tsp minced fresh rosemary
- 1/2 tsp smoked paprika; pinch nutmeg
- 1 bay leaf; 1/4 tsp xanthan gum (optional)
- 2 tbsp chopped fresh parsley (garnish)
Do This
- 1) Heat oven to 400°F (200°C). Grease a 2–3 qt baking dish.
- 2) Boil cauliflower until tender, 10–12 min. Drain very well and steam-dry 5 min.
- 3) Mash with 4 tbsp butter, cream, sour cream, 1 cup cheddar, Parmesan, salt, pepper; whisk in yolk (optional).
- 4) Sauté onion in oil and butter 5 min; add garlic 30 sec. Brown meat 6–8 min; drain excess.
- 5) Stir in tomato paste, mustard, herbs, paprika, nutmeg, salt, pepper. Add stock and aminos/Worcestershire; simmer 5–8 min to thicken (xanthan optional). Remove bay leaf.
- 6) Spread meat in dish; top with mash, swirl. Sprinkle 1/2 cup cheddar; drizzle 1 tbsp melted butter. Bake 20–25 min until golden; broil 1–3 min if needed. Rest 10 min; garnish parsley.
Why You’ll Love This Recipe
- Comfort food classic, made keto with a silky cauliflower mash.
- Deep, savory filling layered with herbs, garlic, and a touch of tomato for richness.
- Golden, cheesy topping that bakes up bubbly with irresistible browned edges.
- Meal prep and freezer friendly for stress-free weeknights.
Grocery List
- Produce: 1 large head cauliflower (about 2 lb florets), 1 medium yellow onion, 3 garlic cloves, fresh rosemary, fresh parsley
- Dairy: Unsalted butter, heavy cream, sour cream (optional), sharp cheddar, Parmesan, 1 egg (optional yolk)
- Pantry: Olive oil, ground beef or lamb, tomato paste, Dijon mustard, beef stock, coconut aminos or Worcestershire, thyme, smoked paprika, nutmeg, bay leaf, kosher salt, black pepper, xanthan gum (optional)
Full Ingredients
For the Cauliflower Mash Topping
- 2 lb (900 g) cauliflower florets (from 1 large head; about 8 cups)
- 4 tbsp unsalted butter, cubed
- 1/3 cup heavy cream
- 2 tbsp sour cream (optional, adds tang and silkiness)
- 1 large egg yolk (optional, helps set the mash)
- 1 cup (4 oz/115 g) sharp cheddar, shredded
- 2 tbsp Parmesan, finely grated
- 1 tsp fine sea salt, plus more to taste
- 1/2 tsp black pepper
- 1/4 tsp garlic powder (optional)
For the Savory Meat Filling
- 1 tbsp olive oil
- 1 tbsp unsalted butter
- 1 medium yellow onion, finely diced (about 1 cup)
- 3 garlic cloves, minced
- 1 1/2 lb (680 g) ground beef (85–90% lean) or ground lamb
- 1 1/4 tsp kosher salt, plus more to taste
- 1/2 tsp black pepper
- 1 tsp dried thyme (or 2 tsp fresh)
- 1 tsp fresh rosemary, minced
- 1/2 tsp smoked paprika
- Pinch ground nutmeg
- 2 tbsp tomato paste
- 1 tsp Dijon mustard
- 1/2 cup (120 ml) beef stock
- 1 tbsp coconut aminos or 2 tsp Worcestershire sauce
- 1 bay leaf
- 1/4 tsp xanthan gum (optional, for thickening)
To Assemble and Finish
- 1/2 cup (2 oz/57 g) sharp cheddar, shredded
- 1 tbsp unsalted butter, melted
- 2 tbsp fresh parsley, chopped (garnish)

Step-by-Step Instructions
Step 1: Heat the oven and prepare your dish
Preheat the oven to 400°F (200°C). Lightly grease a 2–3 quart baking dish (9×13-inch works well) with butter or olive oil. Set a large pot of salted water to boil for the cauliflower.
Step 2: Cook and dry the cauliflower
Add the cauliflower florets to boiling water and cook until completely tender when pierced with a knife, 10–12 minutes. Drain very well, then return the florets to the hot pot and let them steam-dry off the heat for 5 minutes. This step prevents a watery mash.
Step 3: Make the buttery cauliflower mash
Add 4 tbsp butter, heavy cream, and sour cream (if using) to the cauliflower. Mash with a potato masher or blend with an immersion blender until smooth and creamy. Stir in 1 cup cheddar and the Parmesan. Season with 1 tsp salt, 1/2 tsp pepper, and garlic powder if using. Whisk in the egg yolk (optional) until fully incorporated. Taste and adjust seasoning; set aside.
Step 4: Sauté aromatics
Heat olive oil and 1 tbsp butter in a large skillet over medium heat. Add the diced onion and cook, stirring, until translucent and lightly golden at the edges, about 5 minutes. Stir in the minced garlic and cook 30 seconds until fragrant.
Step 5: Brown the meat and build flavor
Add the ground beef or lamb. Cook, breaking it up with a spatula, until well browned and no longer pink, 6–8 minutes. If there is an excessive amount of fat, spoon off most of it, leaving about 1–2 tablespoons in the pan. Stir in tomato paste and Dijon; cook 1 minute to caramelize the paste slightly. Add thyme, rosemary, smoked paprika, nutmeg, 1 1/4 tsp salt, and 1/2 tsp pepper; stir to coat.
Step 6: Deglaze, thicken, and simmer
Pour in the beef stock and coconut aminos or Worcestershire, scraping up browned bits from the pan. Add the bay leaf. Simmer until the mixture reduces and looks saucy but not soupy, 5–8 minutes. For a thicker keto-friendly gravy, sprinkle in xanthan gum and whisk quickly to combine, simmering 1 minute more. Remove and discard the bay leaf. Taste and adjust salt and pepper.
Step 7: Assemble the pie
Spread the hot meat mixture evenly in the prepared baking dish. Dollop the cauliflower mash over the top, then gently spread it to the edges, sealing in the filling. Use a spoon or spatula to create swoops and ridges—these brown beautifully. Sprinkle evenly with the remaining 1/2 cup cheddar and drizzle the melted butter over the surface.
Step 8: Bake, brown, and rest
Bake at 400°F (200°C) until the edges bubble and the top is golden in spots, 20–25 minutes. For deeper color, broil on high for 1–3 minutes, watching closely. Let the shepherd’s pie rest 10 minutes to set. Garnish with chopped parsley and serve warm.
Pro Tips
- Steam-dry the cauliflower after boiling to avoid a watery topping. A dry mash is the secret to clean slices.
- Pulsing the mash with an immersion blender gives a silky texture without over-processing.
- Caramelize the tomato paste for 1 minute to unlock deeper, savory flavor.
- Use freshly shredded cheddar; pre-shredded cheeses often contain anti-caking agents that can affect melting.
- For lamb, lean into rosemary and finish with a little lemon zest for balance.
Variations
- Beef or Lamb: Use all beef for classic comfort or switch to lamb for traditional cottage-style richness—or try a 50/50 blend.
- Dairy-Light: Replace butter with ghee or olive oil; swap heavy cream for unsweetened almond milk plus 2 tbsp cream cheese; use a modest sprinkle of cheese or a dairy-free melt.
- Veg Boost: Add 1 cup finely chopped mushrooms or a handful of chopped spinach to the meat during the simmer; cook off moisture well to keep it keto.
Storage & Make-Ahead
Refrigerate leftovers in an airtight container for up to 4 days. Reheat, covered, at 350°F (175°C) for 20–25 minutes or until hot. For freezer meal prep, assemble but do not bake; wrap tightly and freeze up to 3 months. Thaw overnight in the refrigerator, then bake as directed, adding 5–10 extra minutes. You can also make the mash and filling 2 days ahead and assemble right before baking.
Nutrition (per serving)
Approximate values for 6 servings (with beef): 533 calories; 39 g fat; 31 g protein; 10 g total carbs; 3 g fiber; 7 g net carbs. Values will vary with lamb vs. beef and exact cheese used.

