Heat the ghee on a medium flame in a deep and wide saucepan.
Add the chopped onions and saute. Once the onions are translucent, add salt and stir.
Allow the onions to caramelize on a medium low flame for 15-20 minutes or longer until they are brown and sweet, but not burnt.
Add the garlic, ginger and chillies, and saute a few more minutes.
Add the chopped tomatoes to the mixture, mix well and allow to simmer for about 5-8 minutes until they have broken down. Check the seasoning and adjust.
Add the cinnamon, cardamom and garam masala. Add half a cup of water. Stir and cover.
Allow to simmer on a low flame for another 10 minutes. Turn off the stove.
Fish out the whole masala (cinnamon and cardamom) and set aside. Blend the remaining mixture (I use an immersion blender directly in the pot).
This gravy should be sweet, tangy and a little spicy. How much acid and sugar is added will depend on how sweet or acidic your tomatoes are. Taste the gravy and then add the vinegar and jaggery checking for taste.
If your gravy becomes too sweet you can add more vinegar to correct it and if its too sour you can cook the gravy a bit longer to evaporate off the vinegar.
Top the gravy with chopped coriander leaves.