Even though there are tons of buses, coaches and direct flights from Singapore to pretty much anywhere you can think of in Malaysia, my first choice is always to take the KTM train.
On the train, I get to stretch out, sleep, have a meal at the restaurant car, go to the toilet whenever I want, and look out of the window to soak up the scenery.
Plus, taking the train in Malaysia is ridiculously cheap, especially now that the SGD to MYR exchange rate is at its 17-month best. And KTM train ticket prices are fixed, so you don’t get slapped all willy-nilly with peak season surcharges.
So how do you get from Singapore to KL and other destinations in Malaysia by train? And how much does it cost compared to flights or coaches? This guide will show you how.
- Introduction to KTM train & railway system
- Train from Singapore to Kluang
- Train from Singapore to KL
- Train from Singapore to Ipoh
- Side trip: Cameron Highlands
- Train from Singapore to Penang
- Train from Singapore to Alor Setar
- Side trip: Langkawi
- Taking the train all the way to Thailand
- Train from Singapore to Taman Negara
- Train from Singapore to Kota Bharu
- Side trip: Perhentian Islands
KTM train & railway system: How does it all work?
First, I should explain Malaysia’s railway system, which is operated by KTM.
There is no direct train from Singapore to anywhere in Malaysia other than Johor Bahru, so your starting point will always be JB Sentral (the building opposite City Square JB). You can get there any way you like, including a 5-minute train ride from Woodlands Train Checkpoint.
From JB Sentral, there is only one railway line. It goes up north through Greater Johor (Kluang, Segamat) and ends at Gemas interchange.
Gemas is where the train lines split into 2: The main KTM railway line, and the Jungle Railway.
The main KTM railway runs along the western coast and goes to all the important cities in Malaysia: Kuala Lumpur, Ipoh and Penang. It runs all the way up to the Thai-Malaysia border, where you can cross over to Hat Yai in Thailand.
The trains along this rail line are all modern high-speed trains, very clearly inspired by Japanese bullet trains. When I last took these in 2018, though, KTM hadn’t updated the train timetables to match their speed, so be warned that these trains might zoom through to the next stop, only to wait there for 15 minutes until their scheduled departure.
The Jungle Railway, on the other hand, goes to the less developed eastern part of Malaysia, and you can go to places like Taman Negara, Kota Bharu, and the Perhentian islands.
The trains on the Jungle Railway are the same old-school “clickety-clack” trains you get from JB Sentral to Gemas. They’re slower and older than the trains that go to KL and beyond, but you can get sleeper tickets here, so you can travel as you sleep and save on a night’s accommodation.
So to sum it up, the KTM train lines in Malaysia can be grouped into 3 sections, which I’ll cover in order:
- JB Sentral to Gemas (through Greater Johor, old trains)
- Main KTM railway (KL, Penang, Ipoh up to Thai border, new trains)
- Jungle Railway (through Malaysia’s jungle interior, old trains)
JB Sentral to Gemas
1. Kluang (RM14 or $4.60, 2 hours from Singapore)
The slow train from JB Sentral to Gemas interchange passes through some of the main towns in Johor state, like Kulai, Segamat and Kluang. It’s relatively quiet and is mainly used by locals going to their hometowns.
About a 2 hour train ride from JB Sentral, Kluang is probably the most tourist-friendly of the railway towns here.
The moment you get off the train, you’ll see one of its major sights: the Kluang Railway Cafe. Other places you can visit are the Kluang Coffee Factory and Kluang Mall, and the town centre is peppered with murals and cute little cafes.
But Kluang is actually best if you’re a nature lover. There are several visitor-friendly farms here (Zenxin Organic Farm and UK Farm being the most prominent) and the nearby Gunung Lambak makes a nice and quite easy day hike.
You can see the route map & timetables for the JB Sentral to Gemas service here and here.
There are basically 4 trains that leave JB Sentral for Kluang a day: 8.45am, 2.15pm, 8.15pm and 10.40pm. I recommend departing JB on the 8.45am train, and then you can leave Kluang for JB on the 6.08pm train.
Ticket price: RM14 ($4.60) one way.
Alternatively, you can take a 2.5 hour coach from Singapore operated by Five Stars Express ($15 one way) or The One Travel & Tours ($21.50 one way).
Main KTM railway
2. Kuala Lumpur (RM52 or $17, 8 hours from Singapore)
Most Singaporeans would have been to Kuala Lumpur before, so I doubt it needs any introduction as a tourist destination, but you probably didn’t know that you can get from Singapore to KL by train too.
But until the KL-Singapore High Speed Rail is built (if ever), the journey isn’t for the faint hearted. It takes about 8+ hours to get from JB Sentral to KL, and requires a change of train at Gemas interchange.
There’s no direct train from Singapore or JB to KL, it takes a bit of working backwards to figure out how to get there.
There are only two daily trains from Gemas to KL Sentral (and vice versa). The only combo that makes sense for Singaporeans is to depart JB Sentral at 8.45am, arrive at 1.42pm Gemas for a late lunch, then depart Gemas at 3.10pm to reach KL Sentral at 5.34pm.
That’s right – it’s practically the whole day burnt on the train. It’s really comfortable though; the Gemas to KL train in particular has very clean toilets, a restaurant car, and usually a movie playing. Bring along a jacket and some entertainment (so you don’t have to watch Tomorrowland on loop), though.
Returning from KL to Singapore, the only sane option is to depart KL Sentral at 12.08pm, arrive in Gemas at 2.38pm, board the JB-bound old train at 3.35pm, and finally arrive at JB Sentral at 8.06pm. Otherwise, you’ll be stuck in Gemas for hours in the dead of night.
Ticket price: RM52 ($17) one way. Note that if you’re buying tickets on the KTM website, you have to book the two legs of the journey separately (RM21 + RM31).
For comparison, you can usually find direct budget flights from Singapore to KL for about $80 to $100 return, about 2 to 3 times the price. The flight is only an hour, but you do need to factor in another hour’s drive to the city centre, plus you usually need to be at the airport 1 to 2 hours early. So, the total time taken for a direct flight can be close to 4 hours each way.
3. Ipoh (RM36 or $12, 2.5 hours from KL)
As I mentioned, the main KTM railway line takes you to most of the major cities in Malaysia, but they will all take longer than getting to KL, which can get sian even for the most hardcore of train nerds.
So I’d really recommend a stop over in KL if you plan to go anywhere further north, like Ipoh or Penang.
The closer of the two is Ipoh, and it’s about a 2.5 hour train ride from KL Sentral. Fortunately, there are plenty of trains servicing this route throughout the day (almost hourly from 7am to 11.30pm for KL to Ipoh, and 5am to 9.30pm from Ipoh to KL), so there’s no need to juggle timetables.
Ticket price: A train ticket from KL Sentral to Ipoh costs RM36 ($12) one way.
It’s also possible to take the train straight from JB Sentral to Ipoh but it’s a looong ride. Take the route I suggested from JB Sentral (depart at 8.45am) to KL. Remain in your seat and bypass KL Sentral at 5.24pm, then alight at Ipoh at 8.17pm. It’ll cost RM80 ($26) from JB to Ipoh.
There are direct buses from Singapore to Ipoh but they still take 8 hours, and cost about $33 to $50+ each way. Direct flights are your only chance of cutting your travel time down to a reasonable timeframe and they cost about $100 to $120 return.
4. Side trip: Cameron Highlands (RM20 or $6.60, 2 hours bus/car from Ipoh)
One side trip you can easily do from Ipoh (or KL, if you like) is Cameron Highlands – you know, that place with strawberry farms and tea plantations that you haven’t visited for 20 years?
In particular, the bus from Ipoh to Cameron Highlands is fairly short – just 2 hours – not to mention super cheap. Buses run the route both ways throughout the day so you needn’t worry about an awkward timing either.
It’s also possible to take a bus from KL, but these take 3.5 to 4 hours and are usually a little more expensive at around RM30.
I just visited Cameron Highlands and loved it. You can stay and eat quite cheaply at the main town of Tanah Rata (avoid Brinchang), but you’ll have to spend on the local taxis to see the sights. It’s particularly nice to go hiking here because of the cooler temperatures.
Ticket price: About RM20 ($6.60) one way from Ipoh or RM30 ($10) from KL. The total journey from JB costs about RM100 ($33) one way.
There are direct coaches from Singapore to Cameron Highlands for $50 one way, but that’s a 9 to 10 hour bus ride, which sounds like agony to me. You can also fly from Singapore to KL or Ipoh and continue by bus, but that’s more expensive as well.
5. Penang (RM79 or $26, 4 hours from KL)
That’s right, one can make a pit stop for assam laksa and street art in Penang by train too. There’s no actual KTM train station at Penang since it’s an island, but it’s very easy to access it via Butterworth station.
Butterworth station is about a 4 hour train ride from KL Sentral, and there are several a day (timetables for KL to Butterworth and Butterworth to KL here).
The better times to depart KL are 11.25am or 2.40pm, because you will want to get to Butterworth before 10pm to catch the frequent ferry service over to Penang.
I say “ferry” but the ride will be over before you can even snap a picture. It’s basically just a few minutes’ ride across on a floating platform, and it costs a ridiculous RM1.20 (i.e. nothing). Ferries run constantly from 5.20am to 10pm; after 10pm you may need to wait up to an hour for the ferry, or take a taxi across.
Ticket price: Usually RM79 ($26) one way from KL Sentral to Butterworth, but for trains arriving late at night, the price is RM59 ($19). The ferry to Penang costs RM1.20 ($0.40) one way and the return trip is free.
Of course, most Singaporeans fly direct to Penang, which takes about 1.5 hours and usually costs about $100 return. If you intend to go to Penang only, flying is certainly a more time-efficient option.
6. Alor Setar (from RM70 or $23, 5 hours from KL)
Most of the places in Malaysia I’ve highlighted so far should be quite familiar to Singaporeans. But I’m willing to bet that most of us have never visited Alor Setar, the state capital of Kedah in the northern reaches of Peninsular Malaysia.
It’s a dazzling city rich in Malay history. If you like going to museums and galleries, you can spend the entire day visiting these together with heart-stoppingly gorgeous old buildings like the Zahir State Mosque, the Royal Hall, the Big Clock Tower, and Wat Nikrodharam.
Because the train journey from KL Sentral is about 5 hours, it’s advisable to spend the night at Alor Setar. There are 5 trains each way daily and you can see timetables from KL to Alor Setar and Alor Setar to KL here.
If you can wake up early, the best train to take from KL Sentral is the one that departs at 7am, because you’ll reach Alor Setar around noon, leaving you the rest of the day to explore. Tickets are also cheaper at RM70. (The next train departs at 10.55am and costs RM93 one way.)
All this trouble is only if you’re coming from KL; if you’re visiting Alor Setar from Penang, there are super cheap shuttle trains that depart Butterworth pretty much hourly, and it’s only an hour’s journey.
Ticket price: RM70 ($23) to RM93 ($31) one way from KL Sentral to Alor Setar.
There’s no direct flight from Singapore to Alor Setar; all flights require a transit at KL. From KL, it takes about an hour to fly to Alor Setar airport, and costs about $50 return (which, yes, is one of the rare occasions when flying costs the same or even cheaper than taking the train).
7. Side trip: Langkawi (from RM23 or $7.50 by ferry)
A fun side trip that you can make from either Alor Setar or Penang is the island getaway of Langkawi. It’s a short ferry ride away from either city.
Langkawi is closer to Alor Setar, so it’s cheaper and faster to go from here. You’d take a bus or taxi from Alor Setar to nearby Kuala Kedah, where you can catch a ferry to Langkawi. It costs RM23 ($7.50) and takes 1 hour and 45 minutes.
There’s also a direct ferry from Penang’s Cruise Ship Terminal to Langkawi, which takes about 3 hours and costs RM70 ($23) one way. There are only two daily departures, though: 8.30am and 2pm.
Ticket price: RM23 ($7.50) one way ferry from Alor Setar, or RM70 ($23) from Penang.
Since there are cheap direct flights from Singapore to Langkawi from about $80 return, travelling by train and ferry is not an efficient or particularly cheap way to get to Langkawi.
But if you’re at the tail end of a long train trip, Langkawi is a nice place to chill out and end your holiday, and from here you can catch a cheap flight back home.
8. Padang Besar i.e. Thai border (from RM76 or $25, 5.5 hours from KL)
In case you were wondering, it’s perfectly possible to take the train all the way through Malaysia and into Thailand along the same route. About 30 minutes’ train ride from Alor Setar is Padang Besar station, which marks the Malaysia-Thai border.
All northbound KTM trains terminate at Padang Besar. If you want to cross over to Thailand, do not leave the train station after alighting – instead, look for signs to Thai border control inside the train station.
Once you clear both Malaysia and Thai border control, you will find yourself on the Thai side of the Padang Besar train station. From here, you can take a shuttle train up to Hat Yai, the southernmost Thai city, which has train connections to Bangkok and beyond.
Note: You may be asked by Thai immigration to show them at least THB10,000 cash. This is not a bribe! You don’t have to give them any money; it’s just to show you’re a legit tourist and not a refugee.
It’s said that the Malaysia border control closes at 4.30pm, so you should aim to arrive early. The two best times to depart KL Sentral are 7am or 10.04am, so you’ll arrive at 12.45pm or 3.55pm respectively. See timetables for KL to Padang Besar and vice versa here.
Ticket price: RM76 ($25) one way for the 7am train from KL to Padang Besar; RM102 ($33.50) for the 10.04am train.
FYI – if you’re stopping by Penang before heading up to Thailand, there are cheap hourly shuttle trains that go up to Padang Besar so you don’t have to worry too much about timing. The journey is about 1 hour and 45 minutes.
It usually takes at least 2 days (a stopover at KL or Penang is recommended) to take the train from Singapore to Thailand.
But if you’re so inclined, there’s a through-train all the way from Gemas to Padang Besar, so it’s theoretically possible to depart JB Sentral for Gemas at 10.40pm, arrive at 3.15am and find a way to kill 4 hours, board the train at Gemas at 7.40am, then end up at Padang Besar at 3.55pm, just in time to cross the border.
For flight connections, Padang Besar’s nearest airport is either Penang or Hat Yai (in Thailand). Scoot flies direct from Singapore to Hat Yai for around $150 return.
9. Taman Negara (RM42 or $14, 10 hours from JB)
Most Singaporeans go to Taman Negara, Malaysia’s most famous national park, as part of a tour package, by chartered coach. The ride is about 8 hours, plus a 3-hour boat ride to the main village of Kuala Tahan (where accommodation and food is).
If you’d like to do it yourself, the train is a nice alternative. There is a direct train from JB Sentral to Jerantut, which is the nearest town to Kuala Tahan.
The timetable is very straightforward: Trains depart JB Sentral at 8.15pm daily and you’ll arrive in Jerantut at 6.18am, in time for an early breakfast and to get a taxi or minibus to Kuala Tahan, about an hour’s drive away.
While the trains that run from Gemas to KL to Penang and Thailand are of the sleek, modern, Japanese-style variety, the eastern KTM rail line is totally different. The trains here are the real old-school trains that really make you feel like you’re travelling through time. Consequently, they’re not as modern or clean, but still powerfully air conditioned and very comfy (to me).
If you don’t fancy sleeping in a recliner seat, the great advantage of the Jungle Line is that you can get a sleeper berth. This is basically a hostel-style bunk bed instead of a seat, with blackout curtains for privacy and darkness.
It’s no 5-star hotel, but you can get some rest while travelling and save on a night’s accommodation too. Try to get a lower bunk (a lot more comfortable and spacious, not to mention less precarious) and definitely bring earplugs (sleepers are extremely popular with local families travelling with young kids).
Coming back, the train departs Jerantut at 2.29am and arrives in JB Sentral at 11.47am. The timing is awful, so consider getting a budget hotel near Jerantut train station for the night to wait more comfortably. On the plus side, you have all morning to gaze out the window and have a leisurely hot breakfast in the restaurant car.
Ticket prices: Sleeper berths are ridiculously cheap at RM36 ($12) one way for upper berth, RM42 ($14) for lower. Lower bunks sell out fast, so early booking on the KTM website is essential. Make sure the ticket says “Superior Night Class” and “Berth” rather than “Seat”.
Seats cost RM30 ($10) one way and are labelled “Superior Class” without the “Night”.
10. Kota Bharu (RM55 or $18, 18 hours from JB)
As its nickname “Jungle Railway” suggests, the eastern KTM rail line goes through some pretty undeveloped parts, and doesn’t serve as many major cities as the main KTM line.
But it does link JB up with Kota Bharu in the north, the capital of Kelantan state and where the state royalty resides. One of the biggest attractions is the Royal Palace, which, along with many, many museums (mostly Malay language, though), should make history buffs really happy.
The other must-see sight in Kota Bharu is the octagonal Central Market which gives you a great insight into local life, and also a great place to eat the traditional Kelantanese breakfast of nasi kerabu (blue rice).
To get to Kota Bharu, you’d take the same sleeper train (see timetable here) that departs JB Sentral at 8.15pm and alight at Wakaf Bharu at 2.10pm. From here, you can take a taxi to Kota Bharu city centre, which is only about 5km away.
It’s a long, long ride, nearly 18 hours, which is why booking a comfortable lower sleeper berth in advance is essential.
You do get generally decent amenities – cold air con, hot food & drinks, OK toilets (restaurant car toilets are cleaner) – on the train. Just remember to bring some entertainment along. The best part of this train journey is that you get jungle views for most of the morning, once the train passes Jerantut.
To return to Singapore, the train departs Wakaf Bharu at 6.33pm and arrives in JB Sentral at 11.47am.
Ticket prices: Sleeper berths cost RM49 ($16) one way for upper berth and RM55 ($18) for lower. Seats are RM43 ($14).
Prices are incredibly cheap compared to flights – and at this distance, coaches are out of the question. Kota Bharu has an airport, but there are no direct flights to Singapore, so you have to make a transfer in KL. It costs about $170 to $200 return and takes about 4 hours.
11. Side trip: Perhentian Islands (RM135 or $44 from Kota Bharu)
Kota Bharu is also a jump-off point for the gorgeous offshore islands in the north of Peninsular Malaysia: the Perhentian Islands.
If you scuba dive, this place is pretty much paradise compared to that other marine park on the east coast of Malaysia, Tioman island. Though it takes a bit more effort and time to get here, the Perhentians make an excellent no-fly alternative to Tioman as a diving destination, and it’s incredibly cheap to get here.
First, the logistics: The main jetty that goes to the Perhentians is called Kuala Besut, about an hour’s drive from Kota Bharu city centre. Online reports say you can get a taxi for about RM80 to RM100 one way, or get a bus from the Kota Bharu Bus Station for RM25 if you’re willing to wait.
From Kuala Besut, it’s a 40-minute speedboat ride to the Perhentian islands; tickets are estimated to cost RM35 one way and RM70 return (there are multiple ferry companies operating here).
In total, you should reach paradise after about 2 hours of travel (taxi/bus + boat).
Ferries are said to run only from 9am to 4pm, so you should leave Kota Bharu as early as possible. If coming straight from the railway station you may want to try getting off at Tanah Merah station at 1.27pm instead. Here’s the train timetable again for your perusal.
Ticket prices: Adding up the taxi and speedboat fares, you’re looking to spend up to RM135 ($44), one way, to get from Kota Bharu to the Perhentians. (Less if you take the bus.)
Plus RM55 ($18) for the sleeper train from JB and approx. RM10 ($3.30) for the taxi from Wakaf Bharu, and you’re looking at a grand total of about $65 one way or $130 return to get to the Perhentian Islands. That’s pretty affordable by scuba diving standards, and you save 2 nights of accommodation as well.
In comparison, going the non-train route would cost $170 to $200 for a return flight from Singapore to Kota Bharu (about 4 hours with layover in KL), plus RM135 ($44) for transfer from Kota Bharu. That’s about $214 to $244, which is still reasonable, but you need to buffer an extra no-dive day before flying back.
Have you ever done any of these train journeys to Malaysia? Tell us what you think in the comments.
If you’re going on an adventure like this soon, don’t forget to get travel insurance. Compare and decide which travel insurance to buy at MoneySmart.sg.
Taking the Train from SG to JB? The Ultimate Guide to KTM Ticket Prices, Train Schedule, and More (2023)
Cheap Guide to Johor Bahru – Where to Go & Best Things to Do in JB
Travel Insurance Singapore Guide (2023): Must-Knows for Choosing the Best Travel Insurance