Heat a large skillet or Dutch oven over medium-high heat. Add the oil, butter or ghee, and onions and cook onions down slowly until lightly golden, about 8-10 minutes.
Add ginger and garlic and let cook for 30 seconds, just until fragrant.
Stir in the spices until they coat the onions and are well mixed with the oil or butter.
Add the tomato paste or tomatoes and mix thoroughly. Simmer for 2-3 minutes.
Add the chicken chunks and cook gently until the chicken is mostly cooked through, about 5 minutes.
Stir in the coconut milk and simmer for 8-10 minutes, stirring occasionally. We usually add more coconut milk, up to the whole can, because we enjoy the sauce. You also may find you need to add more coconut milk if you used tomato paste than if you added chopped tomatoes.
Serve the butter chicken garnished with cilantro and accompanied by rice, saag, and some fresh sliced vegetables.