Busy Yogyakarta Adisucipto International Airport (JOG) lies to the northwest of the city, an easy 10 kilometres from the town centre, close to Prambanan temple complex.
Direct international connections can be made twice daily to/from Kuala Lumpur in Malaysia, and once daily to/from Singapore with Air Asia, and five time per week to/from Singapore with Silk Air.
Garuda, AirAsia and Lion Air frequently fly the popular domestic routes to/from Jakarta and Bali.
Other domestic destinations, operated by major (and not so major) domestic carriers include: Balikpapan (Garuda, Lion Air, Sriwijaya Air, Citilink), Bandung (Lion Air, Wings Air), Banjarmasin (Garuda, Lion Air), Batam (Lion Air), Makassar (Garuda, Lion Air, Sriwijaya Air), Mataram (Lion Air), Medan (AirAsia), Pekanbaru (Citilink), Palembang (NAM Air), Pontianak (NAM Air, XpressAir), Surabaya (Garuda, Wings Air) and Tarakan (Sriwijaya Air).
To reach the city from the airport a number of options are available. Taxi companies within the airport run on a voucher system, however prices are variable, with the less expensive options outside the arrival gate. To the city centre prices ranges from 70,000 to 100,000 rupiah and to the Prawirotaman area 80,000 to 120,000 rupiah. A less expensive option is to walk out to the street and hail a metered cab.
A TransJogja bus stop is conveniently located within the airport carpark, and connects all over town for 3,600 rupiah, operating between 05:30 and 21:30 (you may have to change routes to reach your destination). If you are planning to go directly to Prambanan, this is an excellent connection, as there’s a stop outside the temple, however if you have more than a carry-on bag, it may be less convenient.
Damri bus connects to other areas including Magalang (for Borobudur) on the hour from 07:00 to 21:00 for 50,000 rupiah. With additional less frequent connections to Purworejo (50,000 rupiah) and Kebuem (60,000 rupiah).
Maguwo train station (MGW) is connected to the airport via a tunnel. Trains link to Yogyakarta station (YK) (formerly Tugu station) in the centre of the city with the Pramesks (8,000 rupiah), Sriwedari (13,000 rupiah) and Madiun Jaya (20,000 rupiah) train services, as well as other destinations including nearby Solo.
ATMs and money changers (not great rates) are located at the airport near the arrival gate.
A new, larger international airport is currently under construction in Kulon Progo, to the west of Yogya. This will have an integrated train directly to Borobudur. Expected completion date is 2020.
Yogyakarta train station (formally Tugu station) is conveniently located at the top of Jalan Malioboro, one of Yogya’s main tourist accommodation hubs. Executive, business and air-con economy class trains arrive and depart at Yogyakarta Station connecting major cities all over Java, while basic economy class trains arrive and depart at Lempuyangan Station, 1.5 kilometres to the east of Yogyakarta Station.
Executive and business class trains offer similar service, with slightly better reclining seats on executive trains plus a free pillow. Both have air-con, food service and toilets. Economy trains have smaller, harder (yet still padded) seats and less leg room, so tall and large travellers may wish to take that into account when booking. They do however, make more frequent stops and connect to smaller destinations such as Sideraja (Cilacap), a transit point for travellers heading to the coastal towns of Pangandaran and Batu Keras, convenient if your terminus is not a major hub. It can be a false economy to take a night train to save on a hotel room; check your arrival time at your destination, as it may be an inconvenient hour, and you’ll miss out on some great views of the Javanese countryside, too.
Bookings are recommended and essential (weeks before) for travel during Ramadan. Check schedules, but this site is only in Indonesian and doesn’t accept international credit cards. Or try this alternative. Bookings can be made directly at any train station in Indonesia or Indomaret and Alphamart convenience stores. You will need passport information for each traveller.
Jakarta: From Yogyakarta Station, comfortable direct executive class trains run to/from Jakarta’s Gambir Station six times per day. Business and air-con economy class services run to/from Jakarta’s Pasar Senen station five times per day. Economy trains run between Lempuyangan Station and Jakarta’s Pasar Senen station three times per day. Trains take 7.5 to 9.5 hours and cost 75,000 to 430,000 rupiah.
Bandung: Six trains run daily between Yogyakarta Station and Bandung Station, and two economy trains to/from Lempuyangan Station and Bandung’s Kiaracondong station. Trains take 7.5 to 9.5 hours and cost 85,000 to 370,000 rupiah.
Solo: Solo is less than an hour by train and frequent connections leave both Yogyakarta Station (19 daily), and Lempuyangan Station (10 daily) to either Purwosari or Solobalapan stations in Solo. Regular economy fare is 50,000 rupiah, but on trains with further destinations, a seat can cost as much as 350,000 rupiah just to Solo.
Surabaya: Seven trains run daily between Yogyakarta Station and Surabaya’s Gubeng station. Four economy trains run daily between Lempuyangan Station and Surabaya’s Gubeng station. Fares are 75,000 to 285,000 rupiah and duration is 4.45 to 7.5 hours.
Malang: Trains to Malang only depart/arrive at Yogyakarta Station, with six services per day taking 7 to 8 hours. Fares are 120,000 to 430,000 rupiah.
Probolingo (for Bromo): Only economy class trains travel to/from Probolingo (twice daily from Lempuyangan Station). Duration is 8.5 to 9-5 hours for 75,000 to 100,000 rupiah. It may be more comfortable for travellers enroute to Bromo to catch an executive or business class train to Surabaya and connect from there.
Banyuwangi (for connections to Ijen and Bali): One economy class train departs Lempuyangan Station for Banyuwangi daily. Duration is 14 hours for 95,000 rupiah, again better connections are made via Surabaya.
Giwangan, Yogya’s main terminal for intercity buses, is about six kilometres south of the city centre. Frequent departures connect cities all over Java and to Bali and Sumatra (via ferry). Buses are classed as executive, VIP, patas, business or economy. All except economy class offer air-con. Executive and most VIP buses have toilets, include a meal and pillow and blanket. Executive, VIP and Patas are comfortable with reclining seats with a two by two configuration. Business class are no frills with two by three seat configuration. Economy have no air-con and little comfort, particular for longer trips. Some bus drivers drive recklessly—don’t be afraid to get off a bus with a crazy driver. There will always be someone to help in Indonesia, even in the middle of nowhere. Take a train if you can and avoid night buses. Entry to the expansive Giwangan terminal is 500 rupiah. Bays with destinations are marked, but it can be confusing. For destinations southwest head to block G, east block H, west and some destinations east, block P. An information booth isn’t always manned, however agents on the second level can offer bus information as well as sell tickets.
Jakarta: Numerous companies make frequent departures to Jakarta (85,000 to 275,000 rupiah / 12 hours).
Surabaya / Mojokerto / Solo: Eka, Mira, and Sumber Kencono make regular departures to Surabuya (90,000 rupiah / 8 hours), passing Solo (15,000 rupiah / 2 hours) and Mojokerto (75,000 rupiah / 7 hours).
Denpasar / Banyuwangi / Probolinggo: Bus depart three times per day to Denpasar, Bali (300,000 rupiah / 20 hours) passing Probolinggo (for Bromo) (150,000 rupiah / 9 hours) and Banyuwangi (for Ijen) (150,000 rupiah / 13 hours). Gunung Harto and Tami Jaya depart at: 12:00, Wisato Komodo departs: 13:00, Restu Mulyo departs: 14:00.
Travel agents offer bus tickets at slightly higher rates which often include transfers from your hotel to the bus station. They also operate door-to-door minibus services to popular tourist destinations, both local and further afield.
Metered taxis are an inexpensive way to travel, however there can sometimes be traffic congestion. Note that Jalan Malioboro in the city is one-way only, so you may have to travel a roundabout route. Minimum fee is 20,000 rupiah. Some taxis refuse to use the meter, so just wait for one who will.
GoJek motorbike taxis are fast and less expensive than taxis. You will need to download the GoJek app and register to use.
Becak (pedicabs) are abundant. While scenic, these are not the vehicles to take if you are in a hurry, especially since drivers often detour unannounced to their friend’s batik workshops en route. It's best to arrange a price first (a short trip in the Yogya town centre should be no more than 10,000 to 20,000 rupiah, even at tourist prices) and if you have several destinations in mind, you can rent a becak for several hours for a flat rate.
Andong (horse-drawn carts) are another local transport option, but beware of overloading the poor overworked nags.
Clean, air-con TransJogja buses follow set colour-coded and numbered routes that pass by several major tourist areas, including Jalan Malioboro, Prambanan temple, Giwangan bus terminal and the airport. Fares are a flat 3,600 rupiah per trip and the attendants can help you catch the right bus. Pick up a free route map from the Government Tourist Information Centre on Jalan Malioboro.
Borobudur: Public buses (Cemera Tunggal and Ragil Kuning) from Jombor terminal in the north of the city leave regularly to Borobudur between 06:00 and 16:00, and cost 30,000 rupiah (1.5 hours). TransJogja buses will link you to Jombor terminal via routes 2A (sky blue) and 2B (green) (3,600 rupiah), you may have to connect to these routes via another TransJogja route. The last bus back from Borobudur leaves at 16:00. Borobudur terminal is a 10-minute walk from the temple complex, or becaks and taxis will be willing and waiting to transport you. Alternatively you can catch a Cemera Tunggal bus from Giwangan terminal in the south of the city (2 hours), although these leave less regularly and only operate 08:00 to 15:00. TransJogja links to Giwangan terminal via routes 3A (yellow), 3B (red), 4A (purple) and 4B (orange).