Serious Eats / Michelle Yip

Roti John is essentially an omelette sandwich where the bread has been cooked into the eggs, fusing them together. In Malay, the word roti refers to bread of any kind. But who in the world is “John” and why are we eating his bread?

Serious Eats / Michelle Yip

There are many stories as to its origin, and most can be traced to the time when the British occupied Malaya (the old name for West Malaysia and Singapore—we were once one country). Some speculate that the names of British soldiers were difficult for local Malays to pronounce, so white men were simply referred to as “John.” Other versions flip that story, saying that Malay names were hard for British soldiers to pronounce, so they used the name for locals. Either way, the story goes that British soldiers requested these omelette sandwiches using Western-style breads, and the name roti John eventually stuck. 

Roti John is also possibly related to the masala toasts of India, which are toasted sandwiches filled with spiced chopped vegetables and eggs. Before the British colonized Malaya, they were setting up shop in India, so it stands to reason that the predecessor of roti John could have traveled here with the British. Whichever its origins actually are, roti John has now evolved to become a beloved snack of many Malaysian and Singaporean Malays.

The Many (Good and Bad) Faces of Roti John

In Malaysia, roti John is especially popular during Ramadan, where it is sold at evening bazaars along with the whole gamut of Malay cuisine, so that folks can pick up food to break their fast at home. Many stalls sell at least two versions of the sandwich: one with minced beef and the other with chicken. Some vendors sell the sandwich with both those meats combined, or offer other protein options like sliced franks or minced tinned sardines.

Regardless of which version of roti John you get, you’ll likely find plenty of fresh vegetables like lettuce and tomatoes and a lot of sauces layered inside. These sauces may include: a sweet and smooth Malaysian-style chile sauce made with fresh chiles; a sweet mayonnaise; another sweet-spicy sauce full of black pepper; and a cheese sauce that tastes like distilled nacho cheese Doritos seasoning. Sometimes, you may even get all of them together. 

Serious Eats / Michelle Yip

I enjoy roti John as a concept, but it usually has so many sauces that the flavors are a muddy tangle of umami. (Frankly, the sheer quantity of condiments can be rather wasteful, since much of it drips out when you’re eating.) The lettuce, tomatoes, and other vegetables are often an afterthought, and generally too delicate to stand up to the heat of a fresh sandwich, which leads to many diners picking the wilted remnants out before taking their first bite. To counter this, some stalls serve their sandwiches with plain, unseasoned grated cabbage and carrot—hardier vegetables that have more textural integrity but lack flavor.

How to Make Great Roti John

Despite my complaints about roti John, there are versions that I love—and most of them are made at home. Though the sandwich can easily be found at Ramadan bazaars and corner stalls, it’s quite easy to make yourself, which allows you to make them to order while customizing the sauces and vegetables as you please. Basically: Prepare an egg mixture as though for an omelette, pour it into a pan, and top it with bread so that it sticks together. Sort of like French toast, but without soaking the bread in the egg beforehand. 

Serious Eats / Michelle Yip

It’s common for hawkers to slap untoasted, squishy buns onto an omelette with too much onion and too little meat, doused in multiple sauces. To fix the saggy buns and for an extra layer of crunch, I toast the bread before placing it on the omelette in the pan.

Serious Eats / Michelle Yip

The omelette component itself is fairly straightforward: You stir cooked minced beef or chicken into the eggs along with a tablespoon of curry powder and thinly sliced scallions, then cook that in the pan. Simply by increasing the amount of minced meat (compared to most roti John stalls) and browning it fully to develop its flavor before adding it to the eggs is enough to make the omelette more delicious and significantly improve the sandwich. 

For the sauces and vegetables, I wanted more thoughtful versions than what’s typically served at the stalls. I’m offering two options here so that the sandwich isn’t overloaded with a glut of toppings. The first is tomato and lettuce with chile sauce; the second is a cabbage slaw with tangy mayo. You could honestly squeeze in any sauce you deem appropriate, but either chile sauce or mayo is already enough to flavor and lubricate the sandwich. Plus, you won’t have to head out and get even more condiments (unless that’s your thing, which…is respectable).

Serious Eats / Michelle Yip

Instead of the more delicate coral lettuce common at many roti John vendors, I opted for slightly hardier butterhead lettuce, which holds up much better (though it’s not as hardy as, say Romaine, so don’t let it sit forever). I also slice my tomatoes more thickly, to give them some heft, which go onto the sandwich with the lettuce and chile sauce. Alternatively, my cabbage option is more than just plain, raw shredded cabbage. I make it more in the style of a crisp slaw with both cabbage and carrots, and accompany it with mayonnaise seasoned with a splash of apple cider vinegar for extra tang. 

Eat the sandwiches immediately after assembling for the freshest bite, or do as I do and let the sandwiches sit for 30 minutes so the flavors and textures relax into one another.

For Topping Option 1: Separate the lettuce leaves and transfer to a salad spinner. Wash leaves in cold water, then drain and spin dry. Set aside.

Serious Eats / Michelle Yip

For Topping Option 2: Using the large holes of a box grater, shred the carrot. Place the cabbage and carrot into a large colander set in the sink and toss with the sugar and salt. Allow vegetables to macerate for 5 minutes. Meanwhile, in a large bowl, thoroughly whisk together mayonnaise, apple cider vinegar, and black pepper.

Serious Eats / Michelle Yip

Rinse the cabbage and carrot under cold running water, then spin dry in a salad spinner. Transfer the vegetables to the large bowl with the mayonnaise dressing and toss to combine. (Note that this makes more slaw than you will need for the roti John; save the remainder to eat separately as desired.)

Serious Eats / Michelle Yip

For the Sandwiches: In a large nonstick skillet, combine 1 tablespoon oil and onion and cook over medium-high heat, stirring often, until onions begin to soften, about 4 minutes. Add the ground meat, curry powder, and 1 teaspoon salt, and cook, stirring and breaking up the meat, until completely cooked through, about 4 minutes. Remove from heat and allow to cool, about 5 minutes.

Serious Eats / Michelle Yip

Meanwhile, crack eggs into a medium bowl and whisk well with black pepper and the remaining 1 teaspoon salt. Scrape the onion and meat mixture into the eggs, along with scallions and Chinese celery leaves, if using. Stir well to combine and set aside. Wipe out skillet.

Serious Eats / Michelle Yip

Spread butter on cut sides of each bun. Working in batches, toast the buns in the nonstick skillet, butter side down, over medium heat until lightly browned, 2 to 3 minutes. Set aside.

Serious Eats / Michelle Yip

Wipe out the skillet. Heat 1 tablespoon oil in the pan over medium heat. Pour 1/4 of the omelette mixture into the pan and let cook, without stirring, for 10 seconds. Place one bun, toasted side down, into the egg mixture, then press bun lightly but firmly into eggs until egg sticks cohesively to the bun, about 20 seconds, while pushing the egg mixture towards the bread to prevent too much of an overhang. Allow omelette to continue to cook until browned, about 1 minute. Carefully insert a spatula between the egg and pan, then flip the whole thing over; using the spatula, flip any excessively overhanging omelette onto the bun. Toast top side of bun, checking often to prevent burning, 30 seconds to 1 minute. Remove roti John from the pan and place on a wire rack set in a baking sheet. Repeat with remaining oil, omelette mixture, and toasted buns, wiping out skillet in between each sandwich.

Serious Eats / Michelle Yip

Once all the sandwiches are cooked, top either with lettuce, tomatoes, and chile sauce or about 1/4 cup coleslaw per sandwich (with optional chile sauce, if desired). Close buns and slice each roti John crosswise into 2 to 3 segments. Serve immediately for the freshest bite, or wrap in parchment paper and let stand before consuming within 2 hours (the sandwich and its fillings will soften somewhat but I like how the flavors meld). Reserve remaining coleslaw or chile sauce for another use.

Serious Eats / Michelle Yip

Special Equipment

Large nonstick pan


Malaysian curry powder tends to be heavy on kashmiri chile powder and fennel seeds; brands like Adabi are available online. That said, your favorite curry powder will also work.

Malaysian chile sauce is made from fresh chiles and is processed into a homogenous texture, unlike the relatively chunky, Thai-style sweet chile sauce. Brands like Maggi Mild Sweet Chili Sauce and Heinz Chili Sauce are available online.

You can mix and match the meat and vegetable fillings. My suggested combos are: 

Minced beef omelette with lettuce, tomatoes, and chile sauceMinced chicken omelette with coleslaw

Make-Ahead and Storage

Roti John can be made ahead up to two hours ahead and wrapped, much like pre-made burgers, allowing the flavors and textures to meld. Refrigeration and freezing are not recommended, as reheating would make it soggy.

Leave a Reply

Your email address will not be published. Required fields are marked *