Chop the onions, mince the garlic, and grate the ginger. Cut the chicken into bite-sized pieces.
Heat oil or ghee in a large pot or skillet over medium heat. Add the chopped onions and sauté for 5-7 minutes, or until they become golden brown.
Add the minced garlic and grated ginger. Cook for 1-2 minutes until fragrant.
Add turmeric, cumin, coriander, garam masala, chili powder (if using), salt, and pepper. Stir well, coating the onions, garlic, and ginger in the spices.
Add the chopped tomatoes and cook for 3-5 minutes, stirring until the tomatoes soften and begin to break down.
Add the chicken pieces to the pot. Stir well, ensuring the chicken is coated in the spices and tomato mixture. Cook for 5-7 minutes, until the chicken is no longer pink.
Pour in the yogurt (or coconut milk) and water (or chicken broth). Stir well and bring the curry to a simmer. Cover and cook for 15-20 minutes, stirring occasionally, until the chicken is tender and the sauce has thickened.
Taste the curry and adjust the salt, pepper, or spices as needed. Garnish with fresh cilantro. Serve hot with rice, naan, or roti.