If you have ever tried building a fitness tracker, AI diet coach, or calorie counter for Indian users, you run into the same wall on day one: global nutrition APIs fail miserably on Indian food.

USDA FoodData Central has almost zero regional Indian dishes. Commercial APIs like Nutritionix or Edamam charge $50–$200/month with strict rate limits, mix raw dry weights with cooked hydrated weights, ignore tadka (tempering oil/ghee) variations, and have no idea what a katori, phulka, or masala dosai weighs in grams.

While building the Free Indian Food Calorie Calculator & Meal Macro Counter at [TheBarbellCrew(https://www.thebarbellcrew.com),

I decided to solve this properly and open-source both the TypeScript calculation engine and the underlying 5,020-item dataset under the MIT license.

Here is how the data normalization, portion scaling, and zero-latency search engine work under the hood.

Live Demo, npm Package & Open Datasets

Engineering Problem #1: Raw vs. Cooked Hydration & Tadka Lipids

Why do two calorie apps show 120 kcal vs 340 kcal for the exact same bowl of Moong Dal?

  1. Dry vs. Cooked Weight Confusion: 100g of dry raw moong dal is ~348 kcal, whereas 100g of cooked hydrated dal is ~105–115 kcal because cooked lentils absorb roughly 2.5x–3x their weight in water.
  2. Hidden Tempering (Tadka) Fat: Adding 1 tbsp (14g) of ghee or oil in tempering adds 126 kcal of pure lipids across the pot.
  3. Utensil Ambiguity: Real users don't weigh every meal on a kitchen scale—they eat 3 steamed idlis, 1 katori sambar, 2 phulkas (no oil), or 1 plate chicken biryani.

How We Normalized 5,020 Foods

Every single entry in our corpus was standardized to a strict per-100g edible portion baseline (cross-referenced against ICMR-NIN Indian Food Composition Tables, USDA raw baselines, and Atwater 4-4-9 calorie-macro validation), then paired with 13,772 pre-calibrated household serving presets:

```json { "id": "phulka", "name": "Phulka (No Oil / No Ghee)", "hindiName": "Roti / Phulka", "category": "grains", "diet": "veg", "calories": 260, "protein": 9.5, "carbs": 52, "fat": 1.5, "fiber": 7, "servings": [ { "id": "1pc", "label": "1 phulka (30 g)", "amount": 30 }, { "id": "2pc", "label": "2 phulkas (60 g)", "amount": 60 }, { "id": "3pc", "label": "3 phulkas (90 g)", "amount": 90 } ] } ``` 

Notice also the diet field (2,136 veg and 2,884 non-veg items): in India, lacto-vegetarians strictly exclude eggs, so egg items (Ubla Anda, Egg Bhurji) are explicitly isolated from veg filters.

Engineering Problem #2: Hinglish & Regional Alias Matching

An Indian user searching for boiled eggs or soy protein might type:
* "boiled egg" or "ubla anda"
* "soya chunks" or "soya badi" or "meal maker"
* "curd" or "dahi"
* "पनीर टिक्का" (Devanagari) or "paneer tikka"

To support instant client-side autocomplete without spinning up an external Elasticsearch cluster or paying per-request vector DB costs, open-nutrition-engine ships with 2,311 Hindi/regional names and 698 colloquial aliases directly inside the typed bundle.

Quickstart: Using open-nutrition-engine in TypeScript / React

Install via npm:

npm install open-nutrition-engine 

Search dishes, scale macros to household servings (katori, piece, plate), and compute daily meal totals completely offline with zero API keys or rate limits:

 import { searchFoods, createFoodEntry, computeFoodTotals, } from 'open-nutrition-engine'; // 1. Search vegetarian high-protein staples (supports English & Hinglish) const results = searchFoods({ query: 'Paneer Tikka', category: 'all', diet: 'veg', }); const dish = results[0]; console.log(`${dish.name}: ${dish.calories} kcal, ${dish.protein}g protein per 100g`); // 2. Log 2 servings into a meal slot ('breakfast' | 'lunch' | 'dinner' | 'snack') const lunchEntry = createFoodEntry( dish, dish.servings[0], // e.g., 100g or 1 piece/katori preset 2, // quantity 'lunch' ); // 3. Aggregate full daily macros (kcal, protein, carbs, fat, fiber) const dailyTotals = computeFoodTotals([lunchEntry]); console.log('Meal Totals:', dailyTotals); 

Because the entire computation runs locally in memory:

  • Latency: < 2ms per search keystroke
  • API Cost: $0.00 whether you have 100 users or 1,000,000 users
  • Offline-First: Works natively inside PWAs, React Native apps, Electron tools, and LLM tool-calling / RAG agents

Using the Raw Dataset for Python, RAG & Computer Vision

If you are working in Python, Pandas, or building a WhatsApp/Telegram AI dietitian bot, we also published the flat UTF-8 table (indian_foods_5000.csv with 0 null nutrient rows) and the nested serving schema (indian_foods_5000.json) on Kaggle.

You can combine this dataset with:

  1. Vision-to-Macro Pipelines: Pair a Food-101 / Indian dish classifier with indian_foods_5000.json to convert plate photos into katori/piece gram macros.
  2. Linear Programming Diet Generators (SciPy / PuLP): Generate 140g+ daily protein Indian vegetarian meal plans constrained by a user's TDEE / Maintenance Calories and fiber targets.
  3. Training & Strength Integration: Pair daily nutrition logs with progressive overload tools like our 3D Biomechanics & Exercise 101 Hub.

Try It Live & Feedback Welcome!

If you want to test the search speed and portion scaling right in your browser, check out the live Indian Food Calorie Calculator.

If there are regional dishes from your state (Kerala, Bengali, Maharashtrian, Northeast, Gujarati, Punjabi, Andhra/Tamil) that you want added or refined in the next release, drop a comment below or open a PR on GitHub!