A first-time guide to Split, Croatia
Plan a perfect break in Split with these insider tips for first-time visitors.

Split is truly unlike anywhere else in the world thanks to the vast Roman palace that encloses the old town center. Built in 305 CE, Diocletian’s Palace is a dazzling bric-a-brac of marble that’s been added to over the millennia and is now made up of over 200 buildings that are home to 3000 people who live within the vast walls. It’s one of the largest Roman remains in existence yet is labyrinthine in layout, full of thin alleys that could just as likely lead you to a hidden courtyard as a colorful cocktail bar.
Never quite knowing what you're going to get is part of Split’s charm. The museums and nightclubs are just as appealing as one another, as is relaxing on the Riva waterfront, watching the world go by over a coffee. Beyond the old town walls, Split spreads out to be Croatia’s second-largest city, with beaches, national parks and nearby islands that see some visitors stay for months on end in this extremely liveable seaside metropolis.
When should I go to Split?
Spring or early fall are the best times to visit Split. These "shoulder" seasons are the sweet spots for great weather and marginally fewer tourists. Visiting in May and June, or September and October means you can experience the city at a comfortable time when a swim is also possible. By July and August temperatures average 30°C (86°F), making this the hottest period that falls during the busiest months of the year.
If you’re traveling on a budget and not in town for beach life, January, February and March are cold but bright, and the perfect time for cycling and hiking. A lot of clubs and some attractions close for the winter but the national parks and cycle routes are accessible all year.
How much time should I spend in Split?
Split is an ideal destination for a weekend city break, as the old town center is compact and easy to cover in a day or two, with beach bars and nightclubs just a short Uber drive (or manageable walk) away. In two or three nights you can get a great sense of the city and head home wanting more.
If you can stretch your stay to a long weekend or even a full week, you’ll be able to include the best restaurants, museums and galleries. This will also leave time for day trips to the beaches, nearby national parks Plitvice or Krka, or Klis Fortress, a medieval citadel that overlooks the city.
Is it easy to get in and around Split?
Most of the old town center of Split is pedestrianized, so if you’re staying within or near the walls of Diocletian’s Palace you will be pottering around on foot. There are beaches within walking distance too. But if you do prefer to be on wheels, the NextBike e-bike rentals are easy to use once you’ve signed up to the app on the website.
The local bus service, Promet, links the neighboring towns (including Trogir), and FlixBus offers connections between Split and Rijeka, Dubrovnik and Zagreb. Zagreb is also reachable by train from Split, which takes 5 hours. Uber is the main taxi app in Croatia. Split also has an airport 22km (14 miles) west of the city, which is served by shuttle bus, as well as a busy ferry port for onward journeys to the Dalmatian islands.
Top things to do in Split
Hike around the majestic Plitvice Lakes National Park
Croatia’s busiest national park, Plitvice Lakes National Park is a true wonder of nature. The 16 aquamarine lakes are stunning, and the interconnecting waterfalls – one of which, Veliki Slap, is Croatia’s highest, at 62m (203ft) tall – are an ethereal sight. Visiting in spring or fall is more enjoyable – the park gets exceptionally busy all summer, for good reason.
Take a tour of Diocletian’s Palace
If wandering through Diocletian's Palace feels like stepping into a Game of Thrones set, that’s because it once was. This ancient Roman "retirement home" (built by the Emperor Diocletian as a palace to potter around once he resigned his duties) is now a maze of bars, boutiques and courtyards. To make the most of your visit, book a guide who’ll lead you to explore underground chambers, climb the bell tower for panoramic views, and soak in the thousands of years of history.Exception: The parser function of type "canto_diptych" is not defined. Define your custom parser functions as: https://github.com/shuqikhor/editorjs-html-php#extend-for-custom-blocks in /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php:70 Stack trace: #0 /code/vendor/sqkhor/editorjs-html/src/edjsHTML.php(17): edjsHTML::parse_function_error('canto_diptych') #1 [internal function]: edjsHTML::parse_block(Array) #2 /code/web/modules/custom/editorjs_custom_plugins/src/Parser/CustomParser.php(28): array_map(Array, Array) #3 /code/web/modules/custom/aws_event_pipeline/src/Mappers/v1/ArticleMapper.php(123): Drupal\editorjs_custom_plugins\Parser\CustomParser::parse(Array) #4 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(168): Drupal\aws_event_pipeline\Mappers\v1\ArticleMapper->toAwsPayload(Object(Drupal\node\Entity\Node)) #5 /code/web/modules/custom/aws_event_pipeline/src/AwsFormatter.php(151): Drupal\aws_event_pipeline\AwsFormatter->getPayload(Object(Drupal\node\Entity\Node), Array) #6 /code/web/modules/custom/aws_event_pipeline/src/AwsEventSync.php(174): Drupal\aws_event_pipeline\AwsFormatter->getAwsMessage(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent), Array) #7 /code/web/modules/custom/aws_event_pipeline/src/Plugin/QueueWorker/AepQueueProcessor.php(177): Drupal\aws_event_pipeline\AwsEventSync->sendToAws(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #8 /code/web/modules/contrib/ultimate_cron/src/QueueWorker.php(111): Drupal\aws_event_pipeline\Plugin\QueueWorker\AepQueueProcessor->processItem(Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #9 [internal function]: Drupal\ultimate_cron\QueueWorker->queueCallback(Object(Drupal\ultimate_cron\Entity\CronJob)) #10 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(325): call_user_func(Array, Object(Drupal\ultimate_cron\Entity\CronJob)) #11 /code/web/modules/contrib/ultimate_cron/src/Entity/CronJob.php(471): Drupal\ultimate_cron\Entity\CronJob->invokeCallback() #12 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(213): Drupal\ultimate_cron\Entity\CronJob->run(Object(Drupal\Core\StringTranslation\TranslatableMarkup)) #13 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(334): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launch(Object(Drupal\ultimate_cron\Entity\CronJob)) #14 /code/web/modules/contrib/ultimate_cron/src/Plugin/ultimate_cron/Launcher/SerialLauncher.php(309): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->runThread('6265566', 1, Array) #15 /code/web/modules/contrib/ultimate_cron/src/UltimateCron.php(64): Drupal\ultimate_cron\Plugin\ultimate_cron\Launcher\SerialLauncher->launchJobs(Array) #16 /code/web/modules/contrib/ultimate_cron/src/ProxyClass/UltimateCron.php(70): Drupal\ultimate_cron\UltimateCron->run() #17 /code/web/core/modules/system/src/CronController.php(46): Drupal\ultimate_cron\ProxyClass\UltimateCron->run() #18 [internal function]: Drupal\system\CronController->run() #19 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array) #20 /code/web/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #21 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #22 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) #23 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #24 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #25 /code/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(44): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #26 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #27 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #28 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(191): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #29 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(128): Drupal\page_cache\StackMiddleware\PageCache->fetch(Object(Symfony\Component\HttpFoundation\Request), 1, true) #30 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(82): Drupal\page_cache\StackMiddleware\PageCache->lookup(Object(Symfony\Component\HttpFoundation\Request), 1, true) #31 /code/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #32 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #33 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #34 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #35 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #36 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #37 {main}
Lounge on one of Split’s fantastic city beaches
Split’s beaches have everything from buzzing beach bars to quiet little coves. Bačvice is perfect for sandy swims and watching picigin (a local volleyball-esque, sea-based game), the shallows of Firule are great for families, while Kasjuni boasts crystal-clear waters and a scenic pine backdrop. For a quieter vibe, head to Bene, tucked inside Marjan Forest Park.
Cafe hop around the city center
Embrace the pomalo (easygoing) pace that’s ingrained in Dalmatian coastal living by savoring an excellent coffee, slowly as you watch the world go by, at one of Split’s top cafe spots. Heavenly patisserie Cookie Lab sits on the main road between Bačvice and Firule beaches; D16 brews the best coffee in Split and has one little table on the sidewalk that’s great for soaking up the old town vibes; and grazing on brunch at the Daltonist is a Split must.
Say “Živeli!” at Split’s longest-running bar crawl
The swiftest way to get introduced to Split’s vivacious nightlife (and make friends if you’re traveling solo) is joining the Tower Pub Crawl, which rolls through the old town at 9pm every night of the week during high season. It’s €20 (US$22) to join if you pay in person at the meeting point, Sanctuary Cantina, and your ticket includes free shots in each of the five bars – be sure to try the honey rakija (grappa) – as well as entry to 305 beach club at the end of the tour, if you last that long.
My favorite thing to do in Split
I haven’t truly arrived in Split until I’ve had my Aperol Spritz at Tennis, a beach bar overlooking the pebble shores of Firule, one of the city’s popular bays. My actual favorite thing to do though, no matter the time of year, is go for a walk around Split 3, the colossal modernist housing estate built in the 1970s. It’s not touristy at all and is indicative of the ambitious development the Croatian coast went through in the latter years of the Yugoslavian era – one for the architecture nerds.
How much money do I need for Split?
Split is loved for many reasons but being cheap is not one of them. It’s one of the most expensive places in Croatia, eclipsed only by Dubrovnik, so come prepared. That’s not to say it can’t be done on a stringent budget, but don’t expect to walk into an affordable, smart hostel without pre-booking in advance. You can find deals on accommodations in the winter months, but eating out and drinks are pretty punchy all year in the old town center.
If you’re traveling with friends who’ve been to Split before, they may be surprised at the high prices, but don’t be too hasty to blame the locals. The country adopted the euro in January 2023, which caused very rapid inflation and a lot of financial problems for Croatians, who you’ll never hear complain about it.
- One night at a hotel in the old town walls: from €100–400 (US$108–434)
- One night at a hostel near the old town: €30 (US$33)
- Coffee at a waterfront cafe: from €3 (US$3.25)
- Slice of burek pastry from: €2 (US$2.17)
- Meal in a restaurant in the old town: €40 (US$43)
- Rakija from a local bar: from €3 (US$3.25)
- Glass of wine: from €6 (US$6.51)
- Boat trip for a day of lagoon swimming: €45 (US$49)
- Entry to the cathedral and bell tower: €10 (US$10.85)
- Entry to the Ethnographic Museum: €5 (US$5.43)
How do I take the ferry to or from Split?
Three ferry companies now operate between Split and Dubrovnik; TP, Krilo and Jadrolinija - usually stopping at Hvar, Brač and Korčula en route. But bear in mind these services do not run throughout the winter months of November, December, January and February, so check the schedules before banking on them.
Are cafes and bars in Split non-smoking?
Don’t be surprised if wafts of cigarette smoke billow around you at cafes, restaurants and bars – Croatians like to smoke. Attempts are being made at new rules to limit indoor smoking but it’ll take time to catch on.