Prepare the aromatics: In a large pot, heat butter or olive oil over medium heat. Sauté onions until translucent, about 3–4 minutes. Add garlic and cook 30 seconds until fragrant.
Cook the cauliflower: Add cauliflower florets and broth to the pot. Bring to a boil, then reduce heat to a simmer. Cover and cook for 15–20 minutes until cauliflower is tender.
Blend the soup: Using an immersion blender or regular blender, puree the soup until smooth and creamy.
Add dairy and Parmesan: Stir in milk or cream (if using) and Parmesan cheese. Heat gently until cheese melts and the soup is creamy.
Season: Add salt, pepper, and a pinch of nutmeg to taste. Adjust seasoning as necessary.
Serve: Ladle hot into bowls and garnish with extra Parmesan, parsley, or croutons.