Getting around Malaysia: flights, ferries, and buses explained

Updated: Sep 13
On a Malaysian itinerary, the real transport question is almost never the price of any single leg. It's the order the regions come in. Peninsula, east-coast islands, Sabah, Sarawak: each one comes with its own constraints (seasonal ferries, a mandatory flight, limited frequencies), and a poorly sequenced itinerary shows up as a missed connection or a lost night in transit — not just as extra cost.
This guide follows the logic of a real itinerary: the Peninsula first, then the islands, then the crossing to Borneo (Sabah and Sarawak), then getting around once you're already there.

On the Peninsula: buses, trains, and the app that changes everything in town
The Peninsula is the easiest part to cover independently. Long-distance buses connect nearly every major town — Kuala Lumpur–Penang, Kuala Lumpur–Melaka, Kuala Lumpur–Johor Bahru (with an onward option to Singapore) — with multiple operators and frequent departures, on journeys of 4 to 6 hours depending on distance, for a fare typically between RM30 and RM50 (€6–10).
The ETS (Electric Train Service) connects Kuala Lumpur to Ipoh and on to Butterworth, the gateway to Penang, for around RM75–120 (€15–25) depending on class. More comfortable than a bus, at a slightly higher fare, for a similar travel time on direct services.
In town, Grab (the local ride-hailing app) works well and is reasonably priced in Kuala Lumpur, Penang, Kuching, and Kota Kinabalu. That changes once you're away from the city centers: on the smaller islands and in rural Borneo, these trips need to be arranged differently — through your accommodation, a local driver, or a transfer booked in advance.
Getting to the islands: one jetty per island, and a season to respect
No two islands share the same departure point, and none of them are interchangeable:
Perhentian: jetty at Kuala Besut, a 30–45 minute speedboat crossing, around RM70–80 (€14–16) round trip.
Redang: jetty at Merang or Shahbandar, near Kuala Terengganu, around RM90–120 (€18–24) round trip.
Tioman: jetty at Mersing, with Tanjung Gemok as an alternative, around RM80–90 (€16–18) round trip.
Langkawi: jetty at Kuala Perlis or Kuala Kedah, around RM70 (€14) round trip — the only island on this list that also has its own airport, which makes it reachable even outside ferry season.
Pangkor: jetty at Lumut, the shortest and most frequent crossing on this list, around 30 minutes for RM14 (€3) round trip.
The detail that matters most: the east-coast islands (Perhentian, Redang, Tioman) close to boat traffic during the monsoon, generally from November to February. This isn't a case of reduced frequencies — most resorts close and the ferries stop running entirely. An itinerary planned for this window should be built around Langkawi or the west coast instead of the east-coast islands.

Crossing to Borneo: Sabah, Sarawak, and why it's never just a domestic flight
There's no ferry link between the Peninsula and Borneo; flying is the only way to make this crossing. Expect around 2h30 to Kota Kinabalu (Sabah) or 1h50 to Kuching (Sarawak), the two main gateways, for a fare typically between RM150 and RM500 (€30–100) depending on how far ahead you book.
The detail that actually matters isn't the flight time — it's how you book it: a single booking covering the whole itinerary (one PNR) protects you if an earlier flight is delayed, while two separate tickets leave you with no recourse if you miss the connection. It's a difference that costs a lot the day a flight runs late, and very little to plan around in advance.
Many itineraries only see Borneo through Sabah — Kinabalu, Sepilok, the Kinabatangan River — and miss Sarawak, which has its own character entirely: Kuching, a colonial-era town on the Sarawak River, Bako National Park for a one-day introduction to the jungle, or Gunung Mulu, harder to reach but connected by direct flight from Kuching or Miri. The two states aren't visited with the same logistics and aren't interchangeable — which is exactly why it's worth choosing one, the other, or both, before fixing the rest of the itinerary.

Getting around once you're in Borneo
Between towns in Sabah or Sarawak, short hops (Kota Kinabalu–Sandakan, Kota Kinabalu–Miri, Kuching–Miri) are mostly operated by Air Bornéo, which flies smaller turboprop aircraft on these routes, for fares often between RM100 and RM250 (€20–50), with limited daily frequencies and different baggage allowances.
For some legs, the road remains a reasonable option: a van or shared vehicle connects Kota Kinabalu to Kinabalu Park, for example, or Kota Kinabalu to Sandakan for travelers who'd rather drive than take a short flight. For some lodges, particularly along the Kinabatangan River, the transfer is by boat and is built directly into the stay rather than booked separately.
Two booking habits that avoid the most complications
Book flights as soon as your dates are set, especially around Chinese New Year, Hari Raya, and Malaysian school holidays, when domestic fares climb quickly.
Book island ferries one to three months ahead, since schedules move with the season and the operator (tide times play a role too), and aren't always open for booking more than three months out — that's the case for Tioman.
Get a real transport plan for your trip
The information above is a good starting point for thinking through the sequence of your itinerary, but the right combination of flights, ferries, and ground transport depends on your exact dates and the regions you're visiting. Get in touch and we'll build you a real, route-by-route transport plan for your specific itinerary.

