Ingredients:

  • Fresh baby spinach: 2 lb (900 g) OR
  • Frozen chopped spinach: 24 oz (680 g) frozen, thawed and very well drained
  • Kosher salt: 1/2–3/4 tsp (adjust to taste)
  • Freshly ground black pepper: 1/4–1/2 tsp, plus more to taste for topping
  • Unsalted butter: 3 tbsp (42 g), divided (2 tbsp for sauce, 1 tbsp for topping)
  • Shallot or small yellow onion: 1 medium (about 75 g), finely diced
  • Garlic: 1 clove, minced (optional)
  • All-purpose flour: 2 tbsp (16 g)
  • Whole milk: 1 cup (240 ml)
  • Heavy cream: 1/2 cup (120 ml) — or use 1 1/4 cup (300 ml) whole milk if you prefer lighter
  • Freshly grated nutmeg: a pinch (about 1/8 tsp), or to taste
  • Fresh lemon juice: 1 tsp (5 ml) — optional but brightens flavor
  • Gruyère (or Emmental/Fontina): 1 cup grated (about 100 g)
  • Parmigiano-Reggiano: 1/2 cup finely grated (about 50 g), divided (reserve 2 tbsp for topping)
  • Plain breadcrumbs (panko for extra crunch or regular): 1/2 cup (50 g)
  • Optional: 1–2 tbsp chopped fresh parsley or chives for garnish

Instructions:

  1. Prep the spinach: If using fresh, bring a large pot of salted water to a boil and blanch spinach in batches 30–60 seconds until just wilted; transfer to an ice bath, drain, and squeeze very dry in a towel or cheesecloth; roughly chop if leaves are large. If using frozen, thaw fully and squeeze out as much liquid as possible, breaking up clumps.
  2. Make the flavor base: Melt 2 tbsp unsalted butter in a skillet over medium heat. Add finely diced shallot (and garlic if using) and sweat until soft and translucent, about 3–4 minutes; do not brown.
  3. Make the béchamel: Push shallots to one side (or remove briefly). Add remaining 1 tbsp butter, whisk in 2 tbsp flour to form a roux and cook 1 minute. Gradually whisk in milk and cream, bring to a gentle simmer, and cook until the sauce thickly coats the back of a spoon (about 3–5 minutes). Remove from heat, season with salt, pepper, and a pinch of nutmeg, and stir in lemon juice if using.
  4. Combine spinach and sauce: Fold the well-drained spinach into the béchamel. Stir in about 3/4 of the grated Gruyère and most of the Parmesan, tasting and adjusting seasoning. Mixture should be moist but not watery.
  5. Assemble the gratin: Preheat oven to 375°F (190°C). Spoon the spinach mixture into a prepared 8×8 or 9×9 gratin dish (or similar 2-qt dish) and smooth the top. Mix remaining Gruyère and Parmesan with breadcrumbs and 1 tbsp melted butter; sprinkle evenly over the top.
  6. Bake and brown: Bake uncovered until sauce is bubbling at the edges and top starts to brown, about 20–25 minutes. For a deeper crust, broil 1–2 minutes, watching closely to avoid burning, until top is golden and crisp.
  7. Finish and serve: Remove from oven and rest 5 minutes. Garnish with chopped parsley or chives if desired and serve warm.