1 tablespoon olive oil
1 tablespoon unsalted butter
1 medium yellow onion, medium dice
2 medium garlic cloves, minced
Pinch of red pepper flakes (optional)
1 (28-ounce) can whole peeled tomatoes in their juices, preferably San Marzanos
1 1/2 cups low-sodium chicken broth or water
1/3 cup heavy cream
Freshly ground black pepper, to taste
Optional garnishes (alone or in combination):
Extra-virgin olive oil
4 fresh basil leaves, julienned
Freshly grated Parmesan cheese
Place a medium saucepan over medium-low heat and add the oil and butter. When the butter melts, add the onion and a big pinch of salt. Cook, stirring occasionally, until the onion is completely soft, about 15 minutes. (If at any point the onion looks like it’s beginning to brown, reduce the heat.) Add the garlic and optional red pepper flakes and cook for 5 minutes more, stirring occasionally.
Increase the heat to medium and add the tomatoes and their juices to the pan. Roughly crush the tomatoes with the back of a wooden spoon and cook until they’re hot and beginning to soften, about 10 minutes. Add the broth or water and bring to a simmer. Cook at a medium simmer until the tomatoes begin to fall apart, about 15 minutes.
Remove the soup from the heat and cool slightly, about 10 minutes. Purée the soup directly in the saucepan using an immersion blender, or use a countertop blender, carefully puréeing the soup in a couple of batches until smooth.
Return the soup to the burner over low heat and stir in the cream. Add black pepper, then taste and adjust the seasoning with additional salt or pepper as needed. Serve in warmed bowls, as is or topped with the garnishes of your choice.