Lufthansa, Dal, and Protein at 30,000 Feet
The cart stopped at my row in the dark between Frankfurt and Hyderabad. The lid went up. No chicken.
I had ordered Hindu non-veg. The code is HNML. Lufthansa’s regular economy meal on that sector was already a chicken curry in something they called Malwani sauce. Coconut, chili, a coastal Maharashtrian name on a German airplane pointed at Telangana. By my seat the name was all that was left.
I asked the obvious question. I had requested the Hindu non-veg. Had they held one?
They had not. They had not loaded a separate tray. The general service already matched the spec, they said. When the chicken finished, the special meal finished with it.
They set down the vegetarian plate. Rice. A roll. Something yellow that had started as dal. It tasted fine. Later I checked my sugar. It had gone up.
I filled in the survey. A crew member came back after looking up the booking.
Hindu non-veg meal means no chicken, they said. So the vegetarian tray was correct.
I did not argue. It was not a crisis. It was the funniest sentence I have heard on an airplane in a long time.
That sentence is the story. The rest is why I asked for chicken in the first place, and why dal did not do the same job at 30,000 feet.
Why I tap HNML
For ten years my default to South Asia ran through the Middle East. This trip I broke it. United out of Washington to Frankfurt, Lufthansa onward to Hyderabad.
I order HNML for two plain reasons. It usually arrives with protein, which keeps my blood sugar steadier in the air. And it keeps beef and pork off the tray.
On the United leg I did not get HNML. I got AVML, Asian vegetarian, letters printed on the foil, cooked by an Indian kitchen in New Jersey. It tasted like someone in that kitchen had made this food before. I ate it. A good vegetarian tray is still a good tray. In my body it is also a different meal.
Lufthansa was the test. Their cart was already serving the dish HNML is supposed to be. Then the dish ran out, and the code was asked to mean the opposite of what it means.
The argument over the tray
Every time I choose HNML over AVML, I can hear the objection.
You are Indian. The vegetarian tray is dal, sabzi, rice, maybe paneer. Lentils are protein. Paneer is protein. Sit down.
Look at the tray in your lap. Economy vegetarian is built around starch. Rice. Bread. A sweet. The dal is a few spoonfuls. The paneer, when it appears, is two cubes that have been hot since the kitchen. That is not the same job as a chicken curry whose point is the meat.
Dal is protein. Airline dal is not enough protein to do what I am asking the tray to do. I have the reading.
Hindu, on an airline form, is a ban list. No beef. No veal. No pork. No raw fish. No smoked fish. It is not a vow of vegetarianism. Some Hindus eat chicken, lamb, and fish. Some do not. The codes exist because those are different passengers.
No chicken is AVML. HNML without chicken is AVML wearing the wrong four letters.
What the letters say
Special meals run on IATA codes. Four characters. ML means meal. The first two letters do the work.
HNML is Hindu non-vegetarian. Allowed: lamb, chicken (the manuals say domestic fowl), fish, dairy, curry. Banned: beef, veal, pork, raw fish, smoked fish. The protein is supposed to sit in the first list.
AVML is Asian vegetarian. No meat, no poultry, no fish, no eggs. Dairy is fine. Indian spice. This is the tray most Indian vegetarians actually want.
The mix-up is the word Hindu. People hear vegetarian. Crews hear vegetarian. Booking screens print “Hindu meal” and drop the N. Vegetarians get chicken. People who wanted chicken get dal, then get told dal was the point.
Lufthansa prints the muddle on its own site. The Hindu meal is labeled non-vegetarian, then described as food that may contain fish, shellfish, poultry, meat, or eggs, “but in most cases vegetarian.” If you want a fully vegetarian Hindu meal, the same page says, choose Asian Vegetarian.
The crew member who told me HNML means no chicken was not inventing a private rule. They were reading a house line that had already gone soft. IATA allows chicken. Lufthansa says the meal is non-veg and, usually, veg. Between those two sentences my reserved protein became optional, then vanished into the main cart.
| Code | Meaning | On the tray | Off the tray |
|---|---|---|---|
| HNML | Hindu non-veg | Chicken, lamb, or fish | Beef, pork |
| AVML | Asian vegetarian | Dal, sabzi, paneer, rice | Meat, fish, eggs |
| VGML | Vegan | Plants | Dairy, eggs, animal products |
| VJML | Jain | No roots, onion, or garlic | Most of an Indian kitchen |
| MOML | Muslim / halal | Halal meat | Pork, alcohol |
| DBML | Diabetic | Tighter carbs | The dessert |
DBML is the code that admits the sugar problem in public. I do not order it. I order HNML and hope the chicken boards with me. That is a personal workaround, not medical advice. It is also why a “correct” vegetarian swap can still be the wrong meal.
How a tray disappears
A special meal is a chain. Booking system. Departure control. Caterer’s list. Labeled foil in a marked galley slot. A line on the crew sheet before the cart moves.
If any handoff treats HNML as the Indian chicken already on the cart, no labeled tray gets built. The regular curry stands in. That works until the curry is gone and the passenger who filed the code is holding rice.
The more common miss is running out of vegetarian first. That one is worse. A vegetarian cannot take the chicken. A non-veg passenger can take the dal and complain later. Running out of chicken in the main service is, for most of the cabin, almost a success. The person who loses is the one who needed the protein.
I ate the vegetarian food. I sent the survey. I listened to a kind crew member defend a definition that falls apart if you read the code.
Airlines run out of food. That part is ordinary. The loop is the joke. We did not load your special meal because the regular meal already counted as your special meal. Then we told you the special meal cannot contain the thing that was doing the work.
After the meter
I will still request HNML when I want protein without beef or pork. I will screenshot the confirmation. I will ask early whether a labeled tray is actually in the galley. A code in the reservation is a wish. Foil with HNML printed on it is a meal.
On a sector where the main service is already Indian-style chicken, I will assume both meals have been poured into one pot. That was Lufthansa this time. United kept the letters honest. AVML said AVML. Nobody had to explain in the aisle whether chicken belongs in a non-veg meal.
Hyderabad was Hyderabad. I ate later. The sugar settled.
HNML is not vegetarian. AVML is. Hindu is not a flavor and it is not protein. It is a constraint: no beef, no pork. Chicken, lamb, or fish is the point of the non-veg version. Dal is food. Dal is not the same job.
A crew member on a night flight to Hyderabad told me the opposite. I wrote it down before the meter became the only record.


Comments