From Surabaya

Surabaya is Indonesia's second city and the eastern anchor of the Java network. It has two stations that are not interchangeable: Gubeng serves the southern line towards Yogyakarta, Solo and Bandung, while Pasarturi handles the northern coastal line to Semarang and Jakarta. Getting this wrong means crossing the city. From Surabaya you can also reach Malang in the highlands, Probolinggo for Mount Bromo, and Banyuwangi, where the station sits beside the ferry terminal for Bali.