Piran Travel Guide

Piran Travel Guide

Piran is a medieval town in the southwest of Slovenia, on the country’s short stretch of the Adriatic coast. The town has been occupied and traded between empires more times than you can count, but for a formative 514 years between 1283 and 1797, Piran was part of the Republic of Venice; an allegiance reflected in the signature Venetian architecture and layout of the old town.

Like much of Slovenia, Piran is heavily influenced by its border neighbours; in this case Croatia and Italy. While walking the streets I was struck by how different Piran feels to the other parts of the country, with a distinct Italian feel to everything from the weather and food, to a slight variation in dialect.

We were there for two nights at the end of our Slovenian trip, before crossing the border into Italy, and found it a wonderfully relaxing place. Slow, warm days walking among vineyards and cobbled streets sipping wine, and a visit to the absolutely stunning Postojna Caves.


Piran Slovenia
Restaurants line the edge of the Piran peninsular
Getting There

We arrived to nearby city Koper to return the rental car we had for the last leg of our trip. For the full breakdown of rental car costs, check out the Lake Bled blog. From Koper bus station we caught a bus to Piran for €2.70 each, taking about 30 minutes. I think the bus was actually bound for Portorož, but we explained to the bus driver where we needed to go and he dropped us at the closest stop to our accommodation on the hills overlooking Piran.

Bus is about the only option into Piran and most domestic and international buses will go through Koper. From Ljubljana you can take the 943 bus to Koper for around €8 and connect there.

Trains also run between Ljubljana and Koper and are fast and cheap. Check out Slovenske Železnice for full details.

The only other method of arrival, if coming from Italy, is ferry from Trieste. Check out Trieste Lines for details.

  • Koper is the closest transport link
  • Ljubljana to Koper bus – €8
  • Koper to Piran bus – €2.70
  • Trains are a good option to Koper from Ljubljana

Hint – Trains can be booked on the day, but try to book at least 24 hours in advance for buses if you have time constraints.


Piran Slovenia
Looking inland from the Župnijska Cerkev sv. Jurija church

We found a motel type room about a 30 minute walk from the old town, using Airbnb. Our room was on beautiful grounds surrounded by olive groves and with views from the balcony of both Italy and Croatia in the distance. We paid €40 per night for the double room and were generally quite happy with our location. Check it out here.

I wasn’t able to find dorm rooms in Piran, but the places calling themslves Hostels are in Piran Old town and start at €36 per night for a private double room. The highest rated hostels are Val Hostel and Youth Hostel Piran.

Bnb’s are common and scattered through the wider Piran area. For a good double room in the old town, expect to pay between €35 and €65. For something within a 30 minute walk, expect to pay between €25 and €50.

Hotels are also scattered around the old town and outer areas and can be very fancy. Double rooms start from €55, but one of the nicer hotels might set you back upwards of €120 per room per night.

We found staying outside of the old town nice and relaxing, even if it was a fair walk to and from the action. If we were to return I would stay outside to old town again to avoid the tourist centre. Staying in nearby Portorož is also a good option as its not far from Piran and has its own offerings, there is also a frequent shuttle bus between the two towns.

  • Hostels – From €36
  • Bnb’s – €25 to €65
  • Hotels – €55 to €120


Cocktails Piran Slovenia
Sea-side cocktails
Do / Eat / See

So far I’ve just talked about Piran, but there’s a major attraction not far away which we visited on our way down from Bled; Postojna Caves. Postojna Caves is an immense cave system about halfway between capital Ljubljana and Koper on the coast. A ticket costs something like €25 but they try to up-sell you the other attractions like exhibitions and the nearby castle (which we regrettably missed out on). Our tickets cost €30.90 each and included the caves, exhibition and parking. You enter and exit the cave system via mini-train and spend about an hour on a tour through the various caverns. It’s absolutely astounding. I cannot emphasise this enough; whatever you do in Piran or Slovenia, do not miss Postojna Caves. It’s easily one of the best places I’ve ever been or seen.

Piran itself is very small and can be explored fully in a couple of hours on foot. The main activity is strolling along the oceanside promenade, eating and drinking in the cafes, restaurants, bars and ice cream parlours that line the entire outside edge of the peninsular. The old town is mainly for tourists, but is lovely none the less, and it’s not too hard to find a private spot on the rocks or beach.

The city walls are worth a look and provide stunning views of the old town’s orange roofs. The most popular photos of Piran you will see are taken from here (see featured image). It costs €1 per person to enter, but on the day we visited (a Saturday) the gates were open for free entry.

The bell tower of Župnijska Cerkev sv. Jurija church costs €1 each to climb and has a nice view. Beware that the tower bells go off every 15 minutes and if you time your visit to coincide with the hour your skull will get a good rattling.

Postojna Caves Slovenia
Inside Postojna Caves

If you walk around the far (north) side of the peninsular you will find a small pebble beach full of sunbathers, and if you dare climb the fortifications and walk along the ocean wall you will find a much bigger beach that’s less populated. This beach runs the whole way along the coast and can be more easily accessed from further inland. Swimming is a little difficult here due to the rocks, so either take rubber shoes or jump off the rocks nearer the old town to swim in the sea.

Cantina Klet is a nice informal place for a bite to eat in a more local setting compared to waterside. We relaxed with multiple beers and ate stuffed olives, fries and fresh Tuna with polenta, and spent €25.90 for both of us. You order drinks at the bar, order food at a separate window next door, and dine with the locals in a secluded square.

Sunsets are epic in Piran as you can watch the sun disappear over the Adriatic sea. Grab a bottle of wine and some desert and head down to the rocks at the tip of the peninsular for the best view. Most places will give you plastic glasses for your wine if you ask, remember to take a blanket to sit on and something warm to put on once the sun is gone; even in summer the wind can bring a comparative chill. A good bottle of local wine might set you back something like €6 from a grocery shop.

Hint – For a good lunch on a budget, go to a supermarket like Mercator. At the deli counter the staff will make you sandwiches by request with anything you want. A typical lunch for two including sandwiches, chips, fruit and drinks will cost around €7.



Piran town centre Slovenia
Piran town centre
  • Do not miss Postonja Caves
  • Watch the sunset from the rocks
  • Check out Cantina Klet for food
  • Two nights is plenty of time


Cost Summary (per person)

Piran for two nights;

  • Bus from Koper – €2.70
  • Accommodation (two nights) – €40
  • Food (self-catered, picnics, one restaurant dinner) – €21.10
  • Drinks – €18.60
  • Attractions (Postojna caves, bell tower) – €31.90
  • Misc (ice cream, water) – €3
  • Total – €117.30

This article is now available as a mobile app.

Go to GPSmyCity to download the app for GPS-assisted travel directions to the attractions featured in this article.


If you found this post useful, please consider donating to help keep Roam and Recon going!



Piran Sunset Slovenia
Piran Sunset

Leave a Reply

Your email address will not be published. Required fields are marked *

If you've found the information on Roam and Recon to be useful, please consider donating!

Receive free travel advice to your inbox

Instagram has returned invalid data.
Instagram has returned invalid data.