Tender and flavorful curry spiced meatballs, cooked in an authentic Sri Lankan curry sauce. This meatball curry tastes better than all the meatball curries I grew up with, and still brings back so many childhood memories. An authentic recipe that is very versatile.
South Asian spiced curry chicken meatballs in a delicious and spicy curry sauce (gravy). Learn how to make the best, most authentic Sri Lankan meatball curry!
Why I created this recipe
When I moved to Sri Lanka as a little kid, I remember how much I looked forward to meal times when I knew meatball curry was on the menu. Specifically, the Keels meatball curry that was an easy meal for busy families or in my case, fussy eaters. I have few recipes that are as nostalgic as this one. This meatball curry is truly etched in my memories. Since leaving Sri Lanka, I’ve been making my own version for decades now. The curry base remains the same, but the actual meatball is better, more juicy, and more flavorful than ever!
Now, a quick note on terminology. In Sri Lanka, no one really calls a curry base “a sauce”. It’s called a curry gravy. Sauce is more of a condiment, while gravy is the liquid that comes WITH the curry.
Why I love this recipe
- Unlike my childhood favorite, I make the meatballs from scratch for this curry.
- You can make the meatballs with any ground meat. I use chicken here, but it’s just as delicious with beef, lamb or pork.
- The meatballs can be made ahead of time and frozen. Which means you can whip up this fantastic meatball curry any time.
- I make this curry with my own homemade Sri Lankan curry powder (thuna paha), but you can substitute this with garam masala for an Indian meatball curry (made with chicken).
- No more dry meatballs! The meatballs are SO GOOD on their own as well. So you could even serve these on their own as an appetizer.
- This meatball curry makes the juiciest and most flavorful meatballs! There is SO MUCH flavor in this dish.
- You can adjust the spice level to your preference. Add more chili powder to make it more spicy, or less (or none) for a milder curry.
What you need to make this Sri Lankan chicken meatball curry
Here are the ingredients that I typically use, but I also provide substitutions here.
For the meatballs
Ground chicken – Preferably chicken with about 5 – 10% fat. This is what keeps the meat super juicy. But you can use lean meat too, and I’ll tell you how to make the meatballs later on in this post. You can also use beef, lamb, pork, or any ground meat for this recipe.
Sri Lankan curry powder – I always use my own curry powder blend. You can find the recipe for my own Sri Lankan spice blend here. We call this “thuna paha” in Sinhalese.
Black pepper and cayenne pepper – For heat. Can be left out if you prefer.
Cilantro roots or stems – This is something I picked up from Thai cuisine and now incorporate into my dishes sometimes. Cilantro roots have a wonderful taste that is more subtle and more earthy than cilantro leaves. So even those who don’t particularly care for the cilantro flavor, do find the cilantro root flavor more palatable. Also, it’s a great use for those stems and roots that you usually discard.
Cornstarch – The starch that acts as a binder for the meatballs.
Fat – If you use lean meat, you will need to add some fat to the meatballs. You can leave this out too, but the meatballs will dry out more without the fat content.
For the curry base
Onion, ginger, and garlic – the holy trinity for a good curry.
Curry powder – I use my own Sri Lankan spice blend for this, and you can find the recipe here.
Cayenne pepper or kashmiri chili powder – Adjust this to your taste. We like it spicy, but I’ve adjusted the recipe to what is mild to us. So make sure to change the quantity to suit your tastebuds.
Coconut milk – Depending on when you add the coconut milk, you can either get a super creamy curry, or a curry where the coconut flavor is also intensified. I prefer the second, but the first is also a good choice if you prefer a creamier curry.
Lime – The acidity of lime juice helps perk up all the spices and flavors in this curry.
Chicken – You can use any ground meat. But make sure there is some fat content in the meat so that the meatballs will not be dry and crumbly. If you can only find lean meat, you can ADD some fat to the meatball mixture. I have tried beef and pork meatballs, and they are all delicious!
Cilantro – There is no real substitution for the cilantro roots in this recipe. If you do happen to have the genetic trait where you find cilantro leaves “soapy”, then you can leave it out, or add 1 tsp ground coriander powder. Do not substitute with parsley, as the flavors will be very different.
Sri Lankan curry powder – You can find this in many South Asian grocery stores, but I personally prefer my homemade version more than any store-bought curry powder. You can also use madras curry powder if that’s easier to find.
To turn it into an Indian meatball curry, just substitute the curry powder with garam masala for both the meatballs AND the curry base.
Coconut milk – You can make this without coconut milk if you prefer. I do prefer it WITH coconut milk, but it can be made without as well. The curry gravy will be less thick without the coconut milk.
Cornstarch – You can use potato starch instead of cornstarch. You can also use 2 tbsp coarse breadcrumbs instead, but the meatballs will no longer be gluten free then. I also prefer the texture of the meatballs with the starch, instead of breadcrumbs.
How to make the chicken meatball curry
The first step is to make the meatball mix
Mince the garlic, ginger, and cilantro roots. This can be done together or separately. Then have the rest of the ingredients measured and ready to go.
In a large bowl, place the ground chicken. If you’re using lean meat, add the fat as well. The fat can be a neutral oil or lard. I prefer using duck fat or lard, but you can use what you have at hand. Also add the ginger, garlic, and cilantro, along with the curry powder, cornstarch, and a generous amount of salt.
Mix these ingredients well. I prefer to use a spoon or my hand, and mix the ingredients in one direction. The chicken should become stringy and sticky – like dumpling filling. This sticky filling is key to making a cohesive meatball, that doesn’t crumble when bitten into.
If you don’t want to use your hands to mix this, OR if you’re making a bigger batch, you can absolutely use a food processor to mix these ingredients together and still get a nice and sticky mixture.
Once the mix is made, you can cover and let it chill for about 20 – 30 minutes to marinate and to make it easier to handle. The meatball mix then needs to be portioned and made into evenly-sized meatballs.
To do this, I use a 3 tbsp ice cream scoop or cookie scoop to portion the meat evenly. You can also use any other type of spoon. Take the portioned meat and gently form a ball by rolling it in your palms and then place it on a prepared and lined (with wax paper or parchment paper or plastic wrap) plate or baking tray.
To prevent the meat mix from being too sticky – Keep a bowl of cool tap water close by. Wet your hands and dip the scoop in water before you scoop up the meat. This will prevent the meat from sticking to the scoop and especially your hands when you’re shaping the meatballs.
Once you have portioned and shaped all the meatballs, they can either be cooked right away or frozen for another day.
How to cook the chicken meatballs for the curry
You can cook the curry flavored chicken meatballs either on the stove or in the oven. I personally prefer cooking them on the stove, but for bigger batches and for convenience, the oven works well too.
Stove top instructions
Heat a large 12 inch nonstick pan over medium-high heat. Heat 2 – 3 tbsp of oil. When the oil is hot, arrange the meatballs in one layer on the pan. Make sure the pan is not overcrowded, as you want the meatballs to get a nice caramelization on all sides.
Cook the meatballs, flipping them once or twice. Make sure to get a nice caramelized crust on at least two sides of your chicken meatballs. That caramelized bits are where the flavor is! Don’t worry if the meatballs are not cooked all the way through at this stage, since they will be cooked further in the curry next.
Repeat with the rest of the meatballs and then let the meatballs rest. DO NOT discard any juice/liquid in the pan (that’s not burnt!).
Preheat the oven to 400 F / 204 C.
Line a half sheet baking tray with parchment paper and place the meatballs on it about 1 – 1.5 inches apart. Bake the meatballs in the oven for about 15 – 20 minutes, flipping them once halfway through, to get nice coloration on the meatballs.
Then remove the meatballs from the oven and let them rest. It is OK if they are not cooked through at this stage, IF you’re going to cook them in the curry next.
Making the curry base
For this Sri Lankan meatball curry, we’ll be making the curry base first, before adding the chicken meatballs to finish cooking them in the gravy.
Place the garlic, ginger, red (or green) chili, and onion in a small blender and blend until smooth. Alternatively, you can finely chop all these ingredients as well.
Preheat about 1 – 2 tbsp of oil in a large pot, and add the blended or finely chopped garlic-ginger mix. Cook this mix until you start to get a little bit of color in the onions. Then add the curry powder, coriander powder, chili powder, and some salt, and sauté for about 30 – 60 seconds.
For an Indian inspired chicken meatball curry – Add garam masala instead of the Sri Lankan curry powder. You can also add a little bit of yogurt at the end instead of coconut milk if you like.
IF you’d like a CREAMY curry, add about 3/4 cup of water to the curry base and bring it to a simmer. However, if you like the type of curry where you still have coconut flavor, but it’s NOT creamy, then add the coconut milk and a little water here and bring it to a simmer.
The coconut simmered for longer will split into the coconut solids and fat, creating some oil floating on the surface. The “concentrated” coconut solids will mix in with the gravy. Personally, I LOVE the flavor this adds to curries such as this meatball curry.
It’s a technique that is used in south Asian and south east Asian cooking. In Sinhalese, it’s referred to as “thel paadenawa”.
When the liquid comes to a simmer, add the meatballs to the curry base. Gently mix them through and let the curry simmer for about 15 – 20 minutes. Keep the pot uncovered if you want less gravy that is also thicker, OR keep it covered if you prefer more gravy. I like my gravy to be thicker, so I simmer my chicken meatball curry without the lid.
For a creamy curry
Add the coconut milk during the last 5 minutes. Stir it in and bring it to a simmer. Then let it simmer for about 3 – 5 minutes.
The curry is now done!
Sprinkle some chopped cilantro on top and it’s ready to be served!
- Steamed basmati rice
- Spiced rice
- Sri Lankan pol roti
- Roti canai
- Any type of flatbread
- With hot dog buns (as a meatball sub!)
If you’d like to make the meatballs ahead of time and freeze, you can absolutely do that! But make sure the meatballs are cooked well before you store them in the freezer. The internal temperature should register 165 F.
To store cooked meatballs in the freezer, place the cooked chicken meatballs on a lined baking sheet and let them freeze for a few hours. Then transfer the meatballs into a freezer bag or an air-right, freezer-friendly container. These can be frozen for up to 4 months.
To thaw cooked meatballs, place them in the fridge overnight to thaw out, OR you can also add the frozen meatballs straight into the curry base. However, if you’re letting them thaw out in the curry, you will need to let them cook gently (on low heat) for longer, with the lid on.
Raw meatballs can also be stored the same way, but they need to be thawed out in the fridge first. Then they can be cooked on the stove or oven before being added to the curry to cook further in the curry base.
The cooked Sri Lankan chicken meatball curry can be stored in the freezer for up to 3 months as well. Just portion it into freezer-friendly containers and freeze.
You can even add some rice to the containers along with the meatballs and freeze these as a meal planning option.
Tips to make this chicken meatball curry
The number one tip for making the juiciest meatballs is to make sure the meatballs have some fat in ’em. Lean meat is fine, but you do risk dry crumbly meatballs.
Mix the meatball mix until it’s sticky! This will also help the meatballs keep their shape. The meatballs will hold together and not crumble as you eat them.
A good curry powder! Please do not use European curry powders or supermarket brands, that simply don’t use the right spices. Find a good Sri Lankan curry powder, or a Madras curry powder from a South Asian store. If not, use garam masala instead. However, I guarantee, a good homemade Sri Lankan curry powder will be better than any curry powder out there.
When shaping the meatballs, make sure to wet your hands and the spoon, so that the meat doesn’t stick to your hands and utensils. Using a scoop will also ensure that each meatball is evenly sized.
To know if you added enough salt to the meatball mix, cook a small portion of the meatball on a pan and taste it for yourself. If there isn’t enough seasoning, you can mix in some salt and taste again until the seasoning is to your liking.
Sri Lankan Meatball Curry
Chicken meatball mix
- 900 g ground chicken 2.5 lbs, 7 – 10% fat content. You can use any ground meat to make these meatballs
- 4 – 5 garlic cloves finely minced
- 1 inch piece of ginger finely minced
- 2 tsp Sri Lankan curry powder roasted or unroasted is fine
- 3 – 4 cilantro roots or stems from 3 cilantro plants, finely chopped
- 45 g lard or vegetable oil (only if using lean meat)
- 2 tsp cornstarch
- 1 tsp salt
- Oil to cook the meatballs
- 3 cloves garlic finely chopped
- ½ medium onion finely chopped
- 1 inch piece of ginger finely chopped
- 2 red or green chili long chili or serrano
- 8 – 10 curry leaves optional, you can also use 2 – 3 bay leaves instead
- 1 tbsp Sri Lankan curry powder
- 1 tsp Kashmiri chili or cayenne pepper please adjust the level to your taste
- 1 ½ tsp ground coriander
- ¾ cup coconut milk preferably full fat coconut milk, about ½ can
- 1 tsp sugar
- 2 – 3 tsp lime juice juice from 1 lime (to taste)
- Salt to taste
- 1 – 1.5 cups water
- Cilantro to top optional
- Place all the ingredients in a large bowl. Make sure to add the fat (lard or vegetable oil) if you’re using lean meat.900 g ground chicken, 4 – 5 garlic cloves, 1 inch piece of ginger, 2 tsp Sri Lankan curry powder, 3 – 4 cilantro roots, 45 g lard, 2 tsp cornstarch, 1 tsp salt
- Feel free to substitute the chicken with any other ground meat.
- Use a spatula or a spoon to mix the meat mixture. Take care to mix it all in one direction, to make the mixture sticky.
- When mixed properly, the ground meat will become sticky (almost like dumpling filling). This will ensure you have nicely formed meatballs that will be juicy and not crumble when cooked.
- To form the meat into meatballs, have a bowl of cold tap water close by so you can wet your hands and utensils which will prevent the meat from sticking to them.
- Use a cookie scoop or spoon to portion the meat mixture. I use a 2 tbsp cookie scoop. Take each portion and gently form it into a smooth ball by rolling it in your hands. Make sure your hands are wet, so that the meat doesn't stick. You should be able to get about 30 meatballs.
- Let the meatballs sit for at least 30 minutes to marinate. This is optional, but I like to marinate them if I have time. You can also let them marinate BEFORE rolling them into balls.
To cook the meatballs on the stove
- Heat a large nonstick pan over medium to medium-high heat. Heat about 2 tbsp of oil as well.Oil
- When the oil is hot, place the meatballs in the pan, at least 1.5 inches apart. DO NOT overcrowd the pan, since this will lead to “boiled” meatballs and not caramelize them properly.
- Cook the meatballs for about 4 – 5 minutes on one side until the meat caramelizes into a golden brown color. Flip and cook the meatballs for a further 4 – 5 minutes to caramelize the other side.
- The meatballs should ideally have a nice caramelized crust on 2 – 3 sides.
- Transfer the cooked meatballs onto a plate and repeat until all the meatballs are cooked. Let them rest.
To cook the meatballs in the oven
- Preheat the oven to 400°F / 205°C (conventional oven).
- Line a baking tray (half sheet pan) with parchment paper or nonstick foil.
- Place the meatballs on the lined baking sheet, separated by at least 1.5 inches.
- When the oven is preheated, bake the meatballs in the oven for about 15 – 20 minutes, flipping them once halfway through baking time. The meatballs should ideally have some caramelization and color on them.
- Transfer the cooked meatballs onto a plate and let them rest.
Making the curry base + meatball curry
- In a large pot, braiser / deep skillet, or casserole skillet (stovetop safe), heat 2 tbsp of oil over medium heat.Oil
- When the oil is heated, add the finely chopped garlic, ginger, onion and chili. Sauté until the onions start to get some color on them.3 cloves garlic, 1 inch piece of ginger, ½ medium onion, 2 red or green chili
- Add the curry leaves, curry powder, chili powder, and ground coriander. Sauté for about 30 – 60 seconds until you start to smell the spices. DO NOT let the spices burn!8 – 10 curry leaves, 1 tbsp Sri Lankan curry powder, 1 tsp Kashmiri chili or cayenne pepper, 1 ½ tsp ground coriander
- Add the coconut milk (for a thicker curry that is not creamy), or ¾ cup of water (for a creamy curry, as the coconut milk will be added later at the end).¾ cup coconut milk, 1 – 1.5 cups water
- Stir to mix and bring to a simmer. Add the meatballs, sugar, and a generous pinch of salt to the curry base. Stir and simmer the meatballs in the curry base for about 15 – 20 minutes, uncovered.1 tsp sugar, Salt to taste
- Stir frequently, and top with water if the liquid starts to evaporate.1 – 1.5 cups water
- Taste and add more salt if needed.
- During the last 5 minutes, add just a little water to make thick gravy (if needed).
- For the creamy curry – During the last 5 minutes of cooking, add the coconut milk (if you used water before). Bring to a boil and let it simmer for about 3 – 4 minutes.
- After simmering, add a little lime juice and taste to make sure the flavors are balanced.2 – 3 tsp lime juice
- Remove from the heat.
- Sprinkle some fresh cilantro on top before serving warm with rice or roti.Cilantro to top
Tips & Tricks
“This website provides approximate nutrition information for convenience and as a courtesy only. Nutrition data is gathered primarily from the USDA Food Composition Database, whenever available, or otherwise other online calculators.”