Prep the vegetables. Cut broccoli into small, bite-size florets. Peel the thick outer layer of the stems and chop the tender core.
Dice onion, carrot, and celery; mince garlic. Grate the cheddar and set aside.
Sweat the aromatics. In a large pot, heat butter and a splash of olive oil over medium. Add onion, carrot, and celery with a pinch of salt.
Cook 5–7 minutes until softened and fragrant, stirring occasionally.
Add garlic and broccoli stems. Stir in garlic and chopped broccoli stems. Cook 1–2 minutes to tame the raw bite of the garlic.
Make the roux. Sprinkle flour over the vegetables. Stir constantly for 1–2 minutes until the flour coats the veg and smells toasty.
This step keeps the soup smooth and thickens it later.
Whisk in broth. Gradually add broth, whisking to prevent lumps. Bring to a gentle simmer. Add the broccoli florets and cook 8–10 minutes, until tender but still bright.
Blend to your preferred texture. For a silky soup, use an immersion blender and puree most of it, leaving some florets for texture if you like.
Alternatively, leave it chunky, or blend half in a blender and return it to the pot. Keep heat at a low simmer.
Add dairy and seasonings. Stir in milk or half-and-half, Dijon, and nutmeg. Simmer gently for 2–3 minutes.
Do not boil after adding dairy.
Off heat, melt the cheese. Turn off the heat. Add cheddar by the handful, stirring after each addition until fully melted. Taste and season with salt and pepper.
If it needs more zing, add another small pinch of Dijon.
Adjust consistency. If it’s too thick, splash in more broth or milk. If too thin, let it gently simmer a few minutes, stirring often.
Serve. Ladle into bowls and top with a little extra grated cheddar, cracked pepper, or a drizzle of olive oil. Crusty bread on the side is always a good idea.