In a large Dutch oven or heavy-bottomed saucepan, warm the oil or ghee over medium heat. Add the chopped onions and cook slowly, stirring occasionally, until deep golden in color—this should take around 20 minutes. Lower the heat if the onions start to brown too rapidly.
Introduce the garlic and ginger to the pan, sautéing for approximately 1 minute until aromatic.
Add the garam masala, paprika, cumin, cinnamon, cayenne, and salt to the mixture. Let the spices bloom and toast for another minute.
Pour in the diced tomatoes, cooking them down for 2 minutes to meld the flavors. Stir in the heavy cream and allow the sauce to heat through. If desired, blend the sauce using an immersion blender (or transfer to a blender) for a smooth consistency. The mixture may appear thick, which is expected.