This straightforward chickpea curry recipe is filled with heat Indian-inspired flavors and prepared in simply 20 minutes! It’s a scrumptious plant-based dinner everybody will love.

As a cookbook creator and recipe author, I’m all the time looking out for the most effective ideas to make a meal very quickly. Right here’s one in all my fast and simple dinner concepts that’s turn into a reader favourite: this chickpea curry recipe!
The mixture of fragrant spices, creamy coconut milk, and hearty chickpeas creates a dish that’s each comforting and thrilling. Right here’s the good half: it solely takes 20 minutes to make! You’ll must style it, however I’m telling you: I’ve individuals who inform me they make this weekly!
Why You’ll Love This Recipe
This chickpea curry has all the pieces you need in a quick and simple weeknight dinner.
- The prepare dinner time is quick: simply 12 minutes of energetic cooking after 8 minutes of prep time.
- It’s acquired nice taste: the mixture of curry powder, turmeric, and garam masala creates a heat, advanced taste.
- From a vitamin standpoint, there’s plant-based protein from the canned chickpeas, plus iron and vitamin C from the infant spinach. The dish is of course gluten-free and vegan, making it excellent for numerous dietary wants.
- It’s funds pleasant: you may make 4 servings for beneath $10!
5-Star Reader Critiques
“AMAZING!!! Doing the Daniel Quick and this was night time 1 meal – an enormous hit and I can solely hope the remainder of our meals is that this good!!” -Lindsey Okay.
“This dish is totally scrumptious. I’ve made it just a few occasions and it’s an enormous hit in my household, together with my choosy 10-year-old. Thanks for posting this! I’m an enormous fan of your web site :)” -Ana

What Is Chickpea Curry?
Chickpea curry, referred to as chana masala in Hindi, is a staple dish in India and Pakistan. Every area has its personal variation, however all use chickpeas (aka garbanzo beans) as the muse with fragrant spices like turmeric, coriander seeds, and garam masala.
My model takes inspiration from these conventional Indian curry recipes however adapts them for the trendy dwelling kitchen. For those who’d like an genuine Indian dinner recipe, strive these masoor dal (Indian pink lentils), a recipe shared with me straight by fashionable London-based Indian chef Asma Khan.
Apparently, this coconut chickpea curry has turn into very fashionable amongst my readers following the Daniel Quick. The Daniel Quick meals pointers permit legumes, greens, and coconut milk, making this recipe excellent for plant-based consuming. I’ve heard from dozens of readers who say this chickpea curry grew to become their go-to consolation meals throughout their quick.
Key Components You’ll Want
The great thing about this straightforward chickpea curry lies in its easy, accessible elements. Right here’s what makes every part particular:
- Chickpeas: I all the time use canned chickpeas for this recipe as a result of they’re handy and completely cooked. Two 15-ounce cans of chickpeas present the hearty, protein-rich base. You may also use 3 cups cooked chickpeas.
- Hearth-Roasted Tomatoes: That is my secret weapon! Hearth-roasted tomatoes have been charred over an open flame earlier than canning, which provides a delicate smokiness to the flavour. Common crushed tomatoes work in a pinch, however you’ll lose a few of the advanced taste.
- Coconut Milk: Full-fat coconut milk is important right here (not gentle), because it creates the signature creamy richness. For a lighter model, you may substitute with cashew cream and even Greek yogurt (although that gained’t be vegan).
- Curry Powder: A great curry powder mix is essential. In case you have garam masala readily available, you possibly can add a teaspoon together with the curry powder for additional complexity.
- Child Spinach: Six cups would possibly seem to be so much, however child spinach wilts down dramatically. Frozen spinach works too, simply thaw and squeeze out extra water first.
- Aromatics: Contemporary garlic cloves, ginger, and yellow onion create the muse. I all the time use contemporary ginger (about 1 teaspoon grated) relatively than dried: it makes a noticeable distinction in taste.
- Spices: Past curry powder, I take advantage of floor cumin and coriander seeds (floor) for depth, plus kosher salt and black pepper.

The way to Make This Chickpea Curry Recipe
Making this chickpea curry is surprisingly easy. Right here’s my step-by-step course of:
1. Sauté the aromatics: Warmth coconut oil in a big skillet over medium-high warmth. Add the diced onion and sauté for five minutes till softened and beginning to brown. Add the garlic and ginger, stirring continuously for 30 seconds till aromatic.
2. Wilt the spinach: Add all the infant spinach to the pan. It appears to be like like a mountain at first, however don’t fear! Stir for about 2 minutes till utterly wilted.
3. Construct the curry base: Fastidiously add the fire-roasted tomatoes (they could splatter!), then instantly add your curry powder, cumin, coriander, and kosher salt.
4. Add the chickpeas: Stir in your drained chickpeas, ensuring they’re properly coated with the sauce. Let all the pieces simmer for not less than 5 minutes, stirring often.
5. End with coconut milk: Take away the pan from warmth earlier than stirring within the coconut milk. Style and regulate seasoning as desired.
Ideas for Success
While you’re able to make the recipe, scroll down for the directions! Listed below are just a few ideas for this chickpea curry:
- Peel the contemporary ginger with a spoon. That is the best method to peel it: a lot simpler than a vegetable peeler which regularly will get caught on the knobby exterior.
- For those who can’t discover fire-roasted tomatoes, simmer longer. The sort of tomatoes is essential due to their candy taste proper out of the can. Different tomato varieties can style bitter out of the can, and have to be cooked for longer. Right here’s the place to discover hearth roasted tomatoes on-line. For those who can’t discover them, substitute top quality canned tomatoes and prepare dinner the sauce 10 minutes longer.
- Regulate the spice stage: As written, this curry is delicate to medium. For extra warmth, add ½ teaspoon cayenne or pink pepper flakes with the opposite spices. Or, you possibly can all the time add scorching sauce on the desk!
Serving Concepts
This versatile chickpea curry pairs properly with fluffy basmati rice: the grains take in the sauce completely. For a lower-carb choice, strive it over cauliflower rice or quinoa.
Naan bread is nice for scooping, and I particularly love vegan naan when holding the meal totally plant-based.
For garnish, contemporary cilantro is basic however you may strive cashews for crunch, a dollop of coconut yogurt, or contemporary lime juice for a zing.
Storage and Meal-Prep Ideas
This chickpea curry is a meal prep champion! It retains very properly within the fridge for as much as 5 days in an hermetic container. It tastes even higher the following day!
This curry can be freezer-friendly. I portion it into particular person containers and freeze for as much as 3 months. Thaw in a single day within the fridge and reheat gently on the stovetop or microwave with a splash of coconut milk or water to loosen the sauce.
Dietary notes
This chickpea curry recipe is vegetarian, vegan, plant-based, dairy-free and gluten-free.
Ceaselessly requested questions
This chickpea curry is delicate. For those who choose a spicier curry, you possibly can add chili peppers or use spicy curry powder.
Completely! Purple lentils work properly and prepare dinner in about quarter-hour. It’s finest to strive lentils in my Purple Lentil Curry or Coconut Lentil Curry.
Sure! This curry freezes exceptionally properly for as much as 3 months. The chickpeas preserve their texture completely. When reheating from frozen, thaw in a single day within the fridge, then heat on the stovetop with a splash of coconut milk to refresh the sauce. The spices truly deepen over time, making leftovers much more scrumptious!
Dietary notes
This chickpea curry recipe is vegetarian, gluten-free, vegan, plant-based, and dairy-free.
Straightforward Chickpea Curry
This chickpea curry is the last word wholesome and simple weeknight dinner! It’s finished in 20 minutes, completely plant based mostly, and filled with taste.
- Prep Time: 5 minutes
- Prepare dinner Time: quarter-hour
- Complete Time: 20 minutes
- Yield: 4
- Class: Fundamental Dish
- Technique: Stovetop
- Delicacies: Indian Impressed
- Weight-reduction plan: Vegan
Components
- 1 yellow onion
- 1 massive garlic clove
- 1 teaspoon grated ginger
- 1 tablespoon coconut oil or olive oil
- 6 cups (5 ounces) child spinach leaves (or chopped spinach)
- 28-ounce can crushed hearth roasted tomatoes (see Notes)
- 1 tablespoon curry powder
- 1 teaspoon cumin
- ½ teaspoon coriander
- ¾ teaspoons kosher salt
- 2 15-ounce cans chickpeas
- ½ cup full fats canned coconut milk
- White or brown basmati rice, to serve
Directions
- For those who’re serving with rice, begin the basmati rice.
- Mince the onion. Mince the garlic. Peel and mince the ginger (or grate it). Drain and rinse the chickpeas.
- In a big skillet, warmth the oil over medium excessive warmth. Add the onion and saute for five minutes. Add the garlic, ginger, and spinach and saute for two minutes till the spinach is totally wilted.
- Fastidiously pour within the tomatoes, then add the curry powder, cumin, coriander, salt, and chickpeas. Prepare dinner for five minutes till bubbly.
- Stir within the coconut milk till totally mixed, then take away from the warmth. Serve with basmati rice. Retailer leftovers as much as 3 days refrigerated.
Notes
The sort of tomatoes is essential on this recipe, due to their candy taste proper out of the can. These tomatoes have been charred over an open hearth, then canned. Different tomato varieties can style bitter out of the can, and have to be cooked for longer. Right here’s the place to discover them on-line. For those who can’t discover them, substitute top quality canned tomatoes and prepare dinner the sauce 10 minutes longer.
(operate(){
window.addEventListener( ‘message’, operate( occasion ){
if ( ( ‘https://nutrifox.com’ !== occasion.origin && ‘https://nutrifox.check’ !== occasion.origin ) ||
typeof occasion.information !== ‘string’ ) {
return;
}
var payload = JSON.parse( occasion.information );
change ( payload.occasion ) {
case ‘setHeight’:
var iframe = doc.getElementById( ‘nutrifox-label-‘ + payload.recipeId );
iframe.type.top = payload.top + ‘px’;
break;
}
} );
}());
window.trCommon={“minRating”:6,”ajaxurl”:”https://www.acouplecooks.com/wp-admin/admin-ajax.php”,”ratingNonce”:””,”postId”:48965};
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.smoothScroll = {
init() {
doc.addEventListener( ‘click on’, ( e ) => {
let anchor = e.goal;
if ( anchor.tagName !== ‘A’ ) {
anchor = anchor.closest( ‘a.tasty-recipes-scrollto’ );
}
if ( ! anchor || ! anchor.classList.comprises( ‘tasty-recipes-scrollto’ ) ) {
return;
}
const elementHref = anchor.getAttribute( ‘href’ );
if ( ! elementHref ) {
return;
}
e.preventDefault();
this.goToSelector( elementHref );
});
},
goToSelector( selector ) {
const ingredient = doc.querySelector( selector );
if ( ! ingredient ) {
return;
}
ingredient.scrollIntoView( { conduct: ‘easy’ } );
}
};
doc.addEventListener(
‘DOMContentLoaded’,
() => window.TastyRecipes.smoothScroll.init()
);
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.cookMode = {
wakeLockApi: false,
wakeLock: false,
cookModeSelector: ‘.tasty-recipes-cook-mode’,
init() {
if (“wakeLock” in navigator && “request” in navigator.wakeLock) {
this.wakeLockApi = navigator.wakeLock;
}
const cookModes = doc.querySelectorAll(this.cookModeSelector);
if (cookModes.size > 0) {
for (const cookMode of cookModes) {
if (this.wakeLockApi) {
cookMode.querySelector(‘enter[type=”checkbox”]’).addEventListener(“change”, occasion => {
this.checkboxChange(occasion.goal);
}, false);
} else {
cookMode.type.show = “none”;
}
}
}
},
checkboxChange(checkbox) {
if (checkbox.checked) {
this.lock();
} else {
this.unlock();
}
},
setCheckboxesState(state) {
const checkboxes = doc.querySelectorAll(this.cookModeSelector + ‘ enter[type=”checkbox”]’);
for (const checkbox of checkboxes) {
checkbox.checked = state;
}
},
async lock() {
strive {
this.wakeLock = await this.wakeLockApi.request(“display”);
this.wakeLock.addEventListener(“launch”, () => {
this.wakeLock = false;
this.setCheckboxesState(false);
});
this.setCheckboxesState(true);
} catch (error) {
this.setCheckboxesState(false);
}
},
unlock() {
if (this.wakeLock) {
this.wakeLock.launch();
this.wakeLock = false;
}
this.setCheckboxesState(false);
}
};
(operate(callback) {
if (doc.readyState !== “loading”) {
callback();
} else {
doc.addEventListener(“DOMContentLoaded”, callback);
}
})(() => {
window.TastyRecipes.cookMode.init();
});
window.TastyRecipes = window.TastyRecipes || {};
window.TastyRecipes.staticTooltip = {
ingredient: null,
tooltipElement: null,
deleting: false,
init( ingredient ) {
if ( this.deleting ) {
return;
}
this.ingredient = ingredient;
this.buildElements();
},
destroy() {
if ( ! this.tooltipElement || this.deleting ) {
return;
}
this.deleting = true;
this.tooltipElement.classList.take away( ‘opened’ );
setTimeout( () => {
this.tooltipElement.take away();
this.deleting = false;
}, 500 );
},
buildElements() {
const tooltipElement = doc.createElement( ‘div’ );
tooltipElement.classList.add( ‘tasty-recipes-static-tooltip’);
tooltipElement.setAttribute( ‘id’, ‘tasty-recipes-tooltip’ );
const currentTooltipElement = doc.getElementById( ‘tasty-recipes-tooltip’ );
if ( currentTooltipElement ) {
doc.physique.replaceChild( tooltipElement, currentTooltipElement );
} else {
doc.physique.appendChild( tooltipElement );
}
this.tooltipElement = doc.getElementById( ‘tasty-recipes-tooltip’ );
},
present() {
if ( ! this.tooltipElement ) {
return;
}
const tooltipTop = this.ingredient.getBoundingClientRect().prime
+ window.scrollY
– 10 // 10px offset.
– this.tooltipElement.getBoundingClientRect().top;
const tooltipLeft = this.ingredient.getBoundingClientRect().left
– ( this.tooltipElement.getBoundingClientRect().width / 2 )
+ ( this.ingredient.getBoundingClientRect().width / 2 ) – 1;
const posLeft = Math.max( 10, tooltipLeft );
this.maybeRemoveTail( posLeft !== tooltipLeft );
this.tooltipElement.setAttribute( ‘type’, ‘prime:’ + tooltipTop + ‘px;left:’ + posLeft + ‘px;’ );
this.tooltipElement.classList.add( ‘opened’ );
},
maybeRemoveTail( removeTail ) {
if ( removeTail ) {
this.tooltipElement.classList.add( ‘tr-hide-tail’ );
} else {
this.tooltipElement.classList.take away( ‘tr-hide-tail’ );
}
},
changeMessage( message ) {
if ( ! this.tooltipElement ) {
return;
}
this.tooltipElement.innerHTML = message;
}
};
window.TastyRecipes.ajax = {
sendPostRequest( url, information, success, failure ) {
const xhr = new XMLHttpRequest();
xhr.open( ‘POST’, url, true );
xhr.ship( this.preparePostData( information ) );
xhr.onreadystatechange = () => {
if ( 4 !== xhr.readyState ) {
return;
}
if ( xhr.standing === 200 ) {
success( JSON.parse( xhr.responseText ) );
return;
}
failure( xhr );
};
xhr.onerror = () => {
failure( xhr );
};
},
preparePostData( information ) {
const formData = new FormData();
for ( const key in information ) {
formData.append( key, information[key] );
}
return formData;
},
};
window.TastyRecipes.rankings = {
defaultRating: 0,
currentRatingPercentage: 100,
savingRating: false,
init( minRating ) {
this.minRating = minRating;
this.formWatchRating();
this.closeTooltipWhenClickOutside();
this.addBodyClassBasedOnSelectedRating();
this.backwardCompFormRatingPosition();
},
formWatchRating() {
const rankings = doc.querySelectorAll(‘.tasty-recipes-no-ratings-buttons [data-rating]’);
if ( rankings.size {
occasion.preventDefault();
this.defaultRating = occasion.goal.closest( ‘.checked’ ).dataset.score;
this.setCheckedStar( occasion.goal );
this.maybeSendRating( this.defaultRating, occasion.goal );
this.setRatingInForm( this.defaultRating );
} );
}
},
closeTooltipWhenClickOutside() {
window.addEventListener( ‘click on’, e => {
// Bailout (do not take away the tooltip) when the clicked ingredient is a score star, or it is the tooltip itself.
if ( e.goal.closest( ‘.tasty-recipes-rating’ ) || e.goal.classList.comprises( ‘tasty-recipes-static-tooltip’ ) ) {
return;
}
window.TastyRecipes.staticTooltip.destroy();
} );
},
setRatingInForm( score ) {
const ratingInput = doc.querySelector( ‘#reply .tasty-recipes-rating[value=”‘ + rating + ‘”]’ );
if ( ! ratingInput ) {
return;
}
ratingInput.click on();
},
addBodyClassBasedOnSelectedRating() {
const ratingInputs = doc.querySelectorAll( ‘enter.tasty-recipes-rating’ );
if ( ! ratingInputs ) {
return;
}
for ( const ratingInput of ratingInputs ) {
ratingInput.addEventListener( ‘click on’, currentEvent => {
const selectedRating = currentEvent.goal.getAttribute( ‘worth’ );
this.handleBodyClassByRating( selectedRating );
this.toggleCommentTextareaRequired( selectedRating );
} );
}
},
handleBodyClassByRating( score ) {
if ( score < this.minRating ) {
doc.physique.classList.take away( 'tasty-recipes-selected-minimum-rating' );
return;
}
doc.physique.classList.add( 'tasty-recipes-selected-minimum-rating' );
},
toggleCommentTextareaRequired( score ) {
const commentTextarea = doc.getElementById( 'remark' );
if ( ! commentTextarea ) {
return;
}
if ( score {
window.TastyRecipes.staticTooltip.changeMessage( response.information.message );
window.TastyRecipes.staticTooltip.present();
this.updateAverageText( response.information, recipeCardElement );
this.maybeFillCommentForm( response.information );
// Cover the tooltip after 5 seconds.
setTimeout( () => {
this.maybeResetTooltip( recipeCardElement, response.information, score );
}, 5000 );
},
() => {
this.resetTooltip( recipeCardElement );
}
);
},
updateAverageText( information, recipeCardElement ) {
if ( ! information.common ) {
return;
}
this.setRatingPercent( information );
if ( ! information.depend ) {
return;
}
const quickLink = doc.querySelector( ‘.tasty-recipes-rating-link’ );
if ( quickLink ) {
this.setTextInContainer( quickLink, information );
this.setPartialStar( quickLink );
}
const cardStars = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
cardStars.dataset.trDefaultRating = information.common;
this.setTextInContainer( recipeCardElement.querySelector( ‘.tasty-recipes-rating’ ), information );
},
setTextInContainer( container, information ) {
if ( ! container ) {
return;
}
if ( information.label ) {
const ratingLabelElement = container.querySelector( ‘.rating-label’ );
if ( ratingLabelElement ) {
ratingLabelElement.innerHTML = information.label;
}
return;
}
const averageElement = container.querySelector( ‘.common’ );
if ( averageElement ) {
averageElement.textContent = information.common;
}
const countElement = container.querySelector( ‘.depend’ );
if ( countElement ) {
countElement.textContent = information.depend;
}
},
setPartialStar( container ) {
const highestStar = container.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( highestStar ) {
highestStar.dataset.trClip = this.currentRatingPercentage;
}
},
setRatingPercent( information ) {
this.defaultRating = information.common.toFixed( 1 );
const elements = information.common.toFixed( 2 ).toString().break up( ‘.’ );
this.currentRatingPercentage = elements[1] ? elements[1] : 100;
if ( this.currentRatingPercentage === ’00’ ) {
this.currentRatingPercentage = 100;
}
},
setCheckedStar( goal ) {
const cardRatingContainer = goal.closest( ‘.tasty-recipes-ratings-buttons’ );
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( selectedRatingElement ) {
delete selectedRatingElement.dataset.trChecked;
}
const thisStar = goal.closest( ‘.tasty-recipes-rating’ );
thisStar.dataset.trChecked = 1;
thisStar.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = 100;
},
maybeFillCommentForm( information ) {
if ( ! information.remark || ! information.remark.content material ) {
return;
}
const commentForm = doc.querySelector( ‘#commentform’ );
if ( ! commentForm ) {
return;
}
const commentBox = commentForm.querySelector( ‘[name=comment]’ );
if ( ! commentBox || commentBox.worth ) {
return;
}
// Add remark particulars for enhancing.
commentBox.innerHTML = information.remark.content material;
if ( information.remark.title ) {
commentForm.querySelector( ‘[name=author]’ ).worth = information.remark.title;
commentForm.querySelector( ‘[name=email]’ ).worth = information.remark.e mail;
}
},
maybeResetTooltip( recipeCardElement, information, score ) {
if ( this.savingRating === score ) {
this.resetTooltip( recipeCardElement, information );
}
},
resetTooltip( recipeCardElement, information ) {
window.TastyRecipes.staticTooltip.destroy();
this.savingRating = false;
// Reset the default score.
const cardRatingContainer = recipeCardElement.querySelector( ‘.tasty-recipes-ratings-buttons’ );
if ( cardRatingContainer ) {
this.defaultRating = ( information && information.common ) ? information.common.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;
cardRatingContainer.dataset.trDefaultRating = this.defaultRating;
this.resetSelectedStar( cardRatingContainer, information );
}
},
resetSelectedStar( cardRatingContainer ) {
const selectedRatingElement = cardRatingContainer.querySelector( ‘[data-rating=”‘ + Math.ceil( this.defaultRating ) + ‘”]’ );
if ( selectedRatingElement ) {
selectedRatingElement.querySelector( ‘[data-tr-clip]’ ).dataset.trClip = this.currentRatingPercentage;
selectedRatingElement.parentNode.dataset.trChecked = 1;
}
const previousSelectedElement= cardRatingContainer.querySelector( ‘[data-tr-checked]’ );
if ( previousSelectedElement ) {
const currentSelectedRating = previousSelectedElement.querySelector(‘[data-rating]’);
if ( currentSelectedRating !== selectedRatingElement ) {
delete previousSelectedElement.dataset.trChecked;
}
}
},
backwardCompFormRatingPosition() {
const ratingsButtons = doc.querySelector( ‘#reply .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons’ );
if ( ! ratingsButtons ) {
return;
}
const ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);
if ( ! ratingsButtonsStyles.show.consists of( ‘flex’ ) ) {
ratingsButtons.type.course = ‘rtl’;
}
if ( typeof tastyRecipesRating !== ‘undefined’ ) {
// Choose the score that was beforehand chosen in admin.
ratingsButtons.querySelector( ‘.tasty-recipes-rating[value=”‘ + tastyRecipesRating + ‘”]’ ).checked = true;
}
const ratingSpans = ratingsButtons.querySelectorAll( ‘.tasty-recipes-rating’ );
for (const ratingSpan of ratingSpans) {
ratingSpan.addEventListener( ‘click on’, occasion => {
if ( ratingSpan === occasion.goal ) {
return;
}
ratingSpan.previousElementSibling.click on();
} );
}
}
};
(operate(callback) {
if (doc.readyState !== “loading”) {
callback();
} else {
window.addEventListener( ‘load’, callback );
}
})(() => {
window.TastyRecipes.rankings.init( window.trCommon ? window.trCommon.minRating : 4 );
});