This creamy coconut meatball korma turns one pound of ground meat into a complete skillet dinner with onions, spinach, tomato, ginger, garlic, and warm spices. The meatballs simmer directly in the coconut sauce, so there is no separate browning pan and no pile of extra dishes after dinner.
In our family of eight, a one-pan dinner is most useful when the instructions tell me exactly what to watch for while something else needs my attention. Here, the useful landmarks are simple: translucent onions, spices that smell fragrant instead of dusty, a gentle simmer that keeps the coconut milk smooth, firm meatballs, and spinach that has only just wilted.
This is a Full GAPS recipe built with homemade additive-free coconut milk. Choose beef, lamb, pork, or a combination, then choose either the onion or cauliflower vegetable branch and either fresh or frozen spinach. The photographed batch uses beef, onions, fresh spinach, and ghee so every image follows one consistent version of the formula.

GAPS Placement: Full GAPS after the selected meat, homemade coconut milk, tomato, vegetables, garlic, ginger, and pure spice blends have been introduced and tolerated
Prep Time: 20 minutes
Cook Time: 10 minutes
Total Time: 30 minutes
Yield: 5 servings, about 15 to 16 meatballs
What This Coconut Meatball Korma Tastes Like
The sauce is creamy and gently sweet from coconut milk, with savory tomato underneath and a warm curry aroma from the spice blend, ginger, and garlic. Cayenne is optional. Without it, the dish is aromatic rather than hot; with it, the finish has a mild, clean warmth.
The meatballs stay tender because they cook in the sauce instead of being browned first. Fresh spinach keeps a brighter green color and a little more shape. Frozen spinach disappears more completely into the sauce. Both are part of the same measured formula, so choose the branch that works for the food you already have.
Choose One Vegetable And One Spinach Branch
Use either two chopped medium onions or one chopped small cauliflower head. The onion branch becomes soft, translucent, and lightly sweet after eight minutes. The cauliflower branch should be tender at the edges without hard browning. Do not use both in one batch unless you are intentionally developing a different formula, because the skillet volume and sauce balance would change.
Use either one bunch of fresh spinach or one-third of a bag of plain frozen spinach. Add frozen spinach with the coconut milk so it has time to thaw and heat through. Add fresh spinach after the covered simmer and cook it for only one minute, just until the leaves collapse and turn glossy.
Use Homemade Coconut Milk And Pure Spices
Measure exactly 25.36 fluid ounces, or 750 milliliters, of prepared homemade additive-free coconut milk. This amount gives the meatballs enough liquid to simmer while preserving a creamy, spoonable sauce. A smaller amount makes a different sauce-to-meatball ratio.
Read the complete labels on curry powder and garam masala. Use blends made only with GAPS-supported herbs and spices. Skip any blend containing sugar, starch, flour, anti-caking agents, preservatives, or an undisclosed flavor mixture. Tomato paste should contain only tomato and salt.
Ghee gives the onions a rounded buttery flavor. Coconut oil keeps the entire dish dairy-free. Both work in the same measured tablespoon, so the cooking method and skillet behavior stay the same.
Cook The Aromatic Vegetable Base
Combine the curry powder, garam masala, and optional cayenne in a small bowl before the skillet is hot. Keeping the spices together prevents a rushed search through the cabinet while the vegetables are cooking.
Heat the skillet, add the ghee or coconut oil, then add the chosen onions or cauliflower with one teaspoon of the salt. Lower the heat to medium and cook for eight minutes. Stir often enough that the pieces soften evenly instead of catching in one place.
For onions, look for pieces that are soft, translucent, and glossy. They should no longer smell sharply raw. For cauliflower, look for tender edges and a softer white color. Hard dark browning is not the goal because the vegetables still cook in the sauce.
Shape Even One-Inch Meatballs
While the vegetables cook, place one tablespoon of the mixed spices on a large plate or in a shallow bowl. Add the remaining teaspoon of salt and the ground meat. Mix only until the seasoning is evenly distributed. Excessive mixing compresses the meat and makes the finished meatballs dense.
Form 15 to 16 meatballs about one inch across. They should hold a round shape without spreading on the plate. Keeping them close in size matters more than making every surface perfectly smooth because evenly sized meatballs finish at the same time.

Bloom The Spices Without Burning Them
Add the remaining spice mixture to the softened vegetables and stir for about two minutes. At first the spices may smell dry or dusty. They are ready for the tomato paste when the aroma becomes warm and distinct. If the pan looks dry or the spices begin to darken quickly, lower the heat immediately.
Stir in the tomato paste until it coats the vegetables and darkens slightly. This short contact with the warm fat takes away the raw-paste taste before the coconut milk enters the pan.
Keep The Simmer Gentle
Arrange the meatballs in one layer, then pour in all of the measured coconut milk. Add the ginger and garlic. If you chose frozen spinach, add it now. Cover the skillet and keep it over medium-low heat for ten minutes.
Watch the edge of the lid or lift it briefly if the sound becomes aggressive. You want small, steady bubbles, not a rolling boil. Hard boiling can separate the coconut milk and knock tender meatballs against one another.
At the end of ten minutes, the meatballs should have lost their raw glossy surface and feel firm enough to turn gently without breaking. The sauce should be golden and pourable rather than thin like plain milk or stiff like a paste.
Finish With Fresh Spinach
If you chose fresh spinach, add it after the covered simmer. Fold it through carefully and cook for one minute. Stop when the leaves are bright green, glossy, and just collapsed. Continuing to cook turns the spinach dark and stringy and dulls the fresh finish of the dish.


Full GAPS Coconut Meatball Korma Curry
Ingredients
Equipment
Method
- Combine the curry powder, garam masala, and optional cayenne in a small bowl.
- Heat the skillet over high heat until hot. Add the ghee or coconut oil, the chosen chopped onions or cauliflower, and half of the mineral salt. Lower the heat to medium and cook for 8 minutes. The onions should look soft, glossy, and translucent, or the cauliflower should be tender at the edges without hard browning.
- While the vegetables cook, place half of the mixed spices in a large plate or shallow bowl. Add the remaining half of the mineral salt and the ground meat. Mix only until evenly seasoned, then form evenly sized meatballs about 1 inch across.

- Add the remaining spice mixture to the skillet and stir for about 2 minutes, until it smells fragrant rather than dusty. Lower the heat and stir in the tomato paste until it coats the vegetables and darkens slightly.
- Arrange the meatballs in one layer. Pour in all of the measured prepared homemade coconut milk. Add the frozen spinach now if using it, plus the ginger and garlic. Cover and simmer over medium-low heat for 10 minutes. Maintain small steady bubbles rather than a hard boil. For a scaled batch, divide between skillets as needed to preserve one layer and the same cooking time.
- Remove the lid and stir carefully. The meatballs should have lost their raw glossy surface and feel firm enough to turn without breaking. Add fresh spinach now if using it and cook for 1 additional minute, just until bright, glossy, and wilted. Serve immediately.

Notes
- Full GAPS: Use after the selected meat, homemade coconut milk, tomato, vegetables, garlic, ginger, and pure spice blends have been introduced and tolerated.
- Yield: This recipe makes five servings, about fifteen to sixteen one-inch meatballs. A doubled batch makes ten servings, about thirty to thirty-two meatballs.
- Choose one vegetable: At 1x use 2 medium onions OR 1 small cauliflower head. At 2x use 4 onions OR 2 cauliflower heads.
- Choose one spinach: At 1x use 1 bunch fresh spinach OR 1/3 bag frozen spinach. At 2x use 2 bunches OR 2/3 bag.
- Dairy-free: Choose coconut oil instead of ghee.
- Scaling: For 2x, use two large skillets or cook in two batches. Keep the vegetables and meatballs in the same uncrowded depth and retain the same physical cues and stage times in each pan.
- Heat: Keep a gentle simmer. A hard boil can separate the coconut milk and break the meatballs.
- Storage: The source formula is written for immediate serving and does not verify a storage duration. Cool any leftovers promptly, cover, refrigerate, and reheat gently without hard boiling.
Tried this recipe?
Let us know how it was!The Physical Cues That Matter
The onions are translucent. They look glossy and soft, with no sharp raw smell. Cauliflower should be tender at the edges without hard browning.
The spice aroma changes. The curry powder and garam masala stop smelling dusty and become warm and fragrant before the tomato paste is added.
The meatballs hold together. Raw rounds keep their one-inch shape on the plate, and cooked meatballs feel firm enough to move without crumbling.
The sauce barely bubbles. Small steady bubbles protect the coconut milk and the tender meatballs. Rapid boiling means the heat is too high.
The fresh spinach stays bright. Add it at the end and stop when the leaves are glossy and just wilted.
GAPS Stage And Supported Adaptations
This is a Full GAPS meal after every selected ingredient has been introduced and tolerated. It is not an early Introduction Diet recipe: it combines a large vegetable portion, tomato paste, coconut milk, garlic, ginger, and mixed spices in one skillet.
For a dairy-free batch, use coconut oil instead of ghee. For a nightshade-free batch, this exact formula does not work because tomato paste and optional cayenne are part of its flavor structure; choose a separate nightshade-free recipe rather than silently removing them here.
The cauliflower option replaces the onions inside this formula. It is different from serving the finished korma over steamed cauliflower rice. If you want cauliflower rice underneath the curry, use the onion branch in the skillet so cauliflower does not fill both roles unless that is what your family prefers.
Serving And Leftovers
Spoon the korma into shallow bowls so each serving receives meatballs, vegetables, spinach, and sauce. It can stand alone as a one-pan meal or be served over the linked cauliflower rice when you want a larger plate.
This source formula is written for immediate serving and does not verify a storage duration. If you plan to keep leftovers, cool them promptly, transfer them to a covered container, and refrigerate. Reheat gently so the sauce becomes steamy without boiling hard. I do not assign an invented number of refrigerator or freezer days where the tested source does not provide one.
Frequently Asked Questions
Why Does The Recipe Use 25.36 Fluid Ounces Of Coconut Milk?
That is the resolved finished volume for the source formula: 750 milliliters. Measuring the prepared homemade coconut milk preserves the intended amount of sauce for one pound of meat and 15 to 16 meatballs.
Can I Use A Smaller Amount Of Coconut Milk?
A smaller amount changes the sauce-to-meatball balance and may not provide enough liquid for the covered simmer. Use the full measured amount for this formula.
Can I Use Beef, Lamb, Or Pork?
Yes. Use one pound of fresh ground beef, lamb, pork, or a combination. Keep the total meat weight the same and form 15 to 16 one-inch meatballs.
Can I Use Both Onions And Cauliflower?
Choose one branch: two medium onions or one small cauliflower head. Using both changes the vegetable volume and sauce ratio.
When Do I Add Frozen Spinach?
Add plain frozen spinach with the coconut milk before covering the skillet. Fresh spinach goes in after the ten-minute simmer and cooks for one additional minute.
How Do I Keep Coconut Milk From Separating?
Maintain a gentle simmer over medium-low heat. Lower the heat if the sauce begins to boil rapidly. Stir carefully so the meatballs remain intact.
How Do I Know The Meatballs Are Cooked?
After the covered simmer, their surfaces should no longer look raw or glossy, and each meatball should feel firm enough to turn gently without breaking. Keep the one-inch size consistent so they cook evenly.
Recommended Equipment
Use a large Le Creuset Signature Artichaut skillet with a fitted lid, or a wide uncoated stainless-steel saute pan with a lid, plus a small spice bowl, a large plate or shallow bowl for shaping the meatballs, a box grater or fine knife for the ginger, and measuring cups and spoons. A broad wooden or silicone spoon helps fold in the spinach without breaking the meatballs.
More One-Pan Full GAPS Dinners
The upcoming One-Pot & Sheet-Pan Cookbook is the best companion for this recipe: complete dinners built around fewer pans, practical prep, and physical cues that tell you when the food is ready. Check the WFLI shop for the cookbook and current kitchen guides.



Leave a comment