Semarang is served by Ahmad Yani International Airport, about 5 km from the city center. There are direct flights from Jakarta (45 minutes), Bali (1.5 hours), Surabaya, and several other Indonesian cities. Garuda Indonesia, Lion Air, and Citilink all serve the route.
By train, Semarang sits on the main north coast line between Jakarta (about 5 hours by fast train) and Surabaya (about 4 hours). Tawang station is the main terminus, right in the old colonial center — one of the most handsome train stations in Java and worth seeing even if you're not catching a train.
Buses connect Semarang with other Javanese cities; Terboyo is the main long-distance terminal but is poorly connected to the center. Most travelers prefer the train.