The ultimate weekend at Ko Olina Resort in O‘ahu

Leave behind daily chaos on a 3-day weekend that focuses on self-care at a luxe hotel, with incredible food, pristine waters and sunsets that defy belief.

Mar 21, 2025 - 05:26
 0
The ultimate weekend at Ko Olina Resort in O‘ahu

I love Hawaii so much. It’s divine any time of year, but especially in winter, I am grateful whenever I can escape the miserable cold in the northeastern US. I can’t pick a favorite island – they all have so much to offer – so Delta's nonstop from New York City to O‘ahu makes that choice easier. (Hawaiian Airlines also flies nonstop.) Even after a tough-on-the-body 13-hour flight (well, round trip, so two flights), I always walk away wishing I could return more often. 

This go-round, I had a few days to myself before moving on to a family friend’s house in East Honolulu, and I was lucky enough to be invited to stay at Four Seasons O‘ahu, a resort in Ko Olina, a stunning beachfront destination for couples and families.

  • When to arrive: I arrived Thursday afternoon. If you can arrive midday, all the better because traffic is a serious problem during rush hour, likely doubling the travel time. A midweek stay will be much more economical. 
  • How to get from the airport: Take a taxi or rideshare (prices vary; I paid $60 during rush hour). Unfortunately, there are no easy options to get to Ko Olina via public transportation.
  • Getting around town: If you want to leave Ko Olina, you need to have a car or use a rideshare service, but there is plenty to do around the resort.
  • Where to stay: Adjacent to the Four Seasons is a Disney resort, Aulani. You can also stay at the Beach Villas at Ko Olina or Marriott’s Ko Olina Beach Club.
  • What to pack: Nothing could be more casual – bathing suits, shorts, T-shirts and flip-flops will get you most everywhere. Perhaps pack something other than beachwear if you’re planning to go out to eat. You’ll also want to have reef-safe sunscreen (though they do have it around the pools), a hat, sunglasses and sneakers if you’re planning to exercise.
Sunset at Four Seasons O‘ahu Sunset at Four Seasons O‘ahu at Ko Olina. Brekke Fletcher/Lonely Planet Brekke Fletcher/Lonely Planet

Day 1: Arrive in time for sunset

How to spend the afternoon

Check into your room. If you can manage it budget-wise, ante up for an ocean view with a lanai where you can relax while watching the sun go down. Listen for the blowing of the conch, see the lighting of the tiki torches and enjoy the vibrant orange-red colors as the sun dips beneath the horizon of the Pacific.

Dinner

My first dinner was at the outdoor Mānalo Lounge. It was cool enough for me to be only slightly envious of the couple having their drinks and food in front of a table-level fireplace, but I was so happy to be where I was that I couldn't make jealousy happen. 

The menu is limited, in a good way, with sushi and sashimi, specialty rolls and the best spicy, saucy fried cauliflower I’ve ever tasted. I also had the Red Phoenix roll with spicy ahi, sliced ahi, cucumber, avocado and shiso. I demurred in the face of the good-looking mocktails and cocktails on the menu because I was feeling the time difference.

It didn’t matter really, since this is not a late-night scene, so if you’re looking for any kind of nightlife action, this is not the place for you. Also: I was the only solo guest at the restaurant, if not the entire resort, so expect a lot of couples and families.Exception: The parser function of type "canto_collage" 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_collage') #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/EventSubscribers/EntityEventSubscriber.php(146): Drupal\aws_event_pipeline\AwsEventSync->sendToAws(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #8 [internal function]: Drupal\aws_event_pipeline\EventSubscribers\EntityEventSubscriber->onEntityUpdate(Object(Drupal\Core\Entity\EntityEvent), 'entity.update', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #9 /code/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Drupal\Core\Entity\EntityEvent), 'entity.update', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #10 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(231): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object(Drupal\Core\Entity\EntityEvent), 'entity.update') #11 /code/web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(900): Drupal\Core\Entity\EntityStorageBase->invokeHook('update', Object(Drupal\node\Entity\Node)) #12 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(579): Drupal\Core\Entity\ContentEntityStorageBase->invokeHook('update', Object(Drupal\node\Entity\Node)) #13 /code/web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(781): Drupal\Core\Entity\EntityStorageBase->doPostSave(Object(Drupal\node\Entity\Node), true) #14 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(504): Drupal\Core\Entity\ContentEntityStorageBase->doPostSave(Object(Drupal\node\Entity\Node), true) #15 /code/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php(806): Drupal\Core\Entity\EntityStorageBase->save(Object(Drupal\node\Entity\Node)) #16 /code/web/core/lib/Drupal/Core/Entity/EntityBase.php(339): Drupal\Core\Entity\Sql\SqlContentEntityStorage->save(Object(Drupal\node\Entity\Node)) #17 /code/web/core/modules/node/src/NodeForm.php(270): Drupal\Core\Entity\EntityBase->save() #18 [internal function]: Drupal\node\NodeForm->save(Array, Object(Drupal\Core\Form\FormState)) #19 /code/web/core/lib/Drupal/Core/Form/FormSubmitter.php(114): call_user_func_array(Array, Array) #20 /code/web/core/lib/Drupal/Core/Form/FormSubmitter.php(52): Drupal\Core\Form\FormSubmitter->executeSubmitHandlers(Array, Object(Drupal\Core\Form\FormState)) #21 /code/web/core/lib/Drupal/Core/Form/FormBuilder.php(597): Drupal\Core\Form\FormSubmitter->doSubmitForm(Array, Object(Drupal\Core\Form\FormState)) #22 /code/web/modules/contrib/autosave_form/src/Form/AutosaveFormBuilder.php(144): Drupal\Core\Form\FormBuilder->processForm('node_article_ed...', Array, Object(Drupal\Core\Form\FormState)) #23 /code/web/core/lib/Drupal/Core/Form/FormBuilder.php(325): Drupal\autosave_form\Form\AutosaveFormBuilder->processForm('node_article_ed...', Array, Object(Drupal\Core\Form\FormState)) #24 /code/web/modules/contrib/autosave_form/src/Form/AutosaveFormBuilder.php(97): Drupal\Core\Form\FormBuilder->buildForm(Object(Drupal\node\NodeForm), Object(Drupal\Core\Form\FormState)) #25 /code/web/core/lib/Drupal/Core/Controller/FormController.php(73): Drupal\autosave_form\Form\AutosaveFormBuilder->buildForm(Object(Drupal\node\NodeForm), Object(Drupal\Core\Form\FormState)) #26 /code/web/core/modules/layout_builder/src/Controller/LayoutBuilderHtmlEntityFormController.php(39): Drupal\Core\Controller\FormController->getContentResult(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\RouteMatch)) #27 [internal function]: Drupal\layout_builder\Controller\LayoutBuilderHtmlEntityFormController->getContentResult(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\RouteMatch)) #28 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array) #29 /code/web/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #30 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #31 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) #32 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #33 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #34 /code/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(44): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #35 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #36 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #37 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #38 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true) #39 /code/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #40 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #41 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #42 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #43 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #44 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #45 {main}

Day 2: Can you canoe (and snorkel)? Yes

Morning

I awoke in my 15th-floor room (with its palatial bathroom and outdoor lanai). I’d slept with the doors open, which automatically cuts off the air-conditioning, and the screens closed because a bird flew in when I left the doors wide open. First bird in a room for me! 

Though the sunrise was behind me, the sky started to light up at about 6:30am. After making myself a Nespresso (the best) and sipping it on the lanai, I got ready to start my day. 

How to spend the day

I’d prebooked the Ka’aumoana canoe experience, which meant being on the beach and ready to hop aboard a Hawaiian canoe, or wa’a, by 7:45am. After blowing a conch shell, our captain expertly guided us to our snorkeling spot. There was no wind, so no sailing, but it was still pretty awesome to be on the water that early, learning about Hawaiian way-finding traditions and taking in all the beauty. 

At our destination I slid into the water with my snorkel gear on and paddled around for about 5 minutes before seeing a sea turtle. I swam after him for a while, then lost sight of him. I guess he’s the better swimmer? The water was calm and crystal clear – and did I mention the quiet? It’s such a treat to hear nothing except the sound of your own breath.

Evening diners at tables under palm trees at the two-story Monkeypod Kitchen at the Ko Olina Center Monkeypod Kitchen at the Ko Olina Center. Monekypod Kitchen by Merriman Courtesy Monkeypod Kitchen by Merriman

I then popped over to have lunch with a local friend at Monkeypod Kitchen by Merriman at the Ko Olina Center. This is where you'll find a range of independent boutiques, dining, coffee, ice cream, you name it. Monkeypod is an upmarket casual spot (and a popular local minichain) whipping up specialty cocktails and globally inflected fare like bulgogi pork tacos and lobster-topped pizza. I ordered its famous poke tacos, and we had a lovely al fresco meal while being serenaded by live music.

After lunch I went to the Naupaka Spa and Wellness center, which occupies four floors of the building adjacent to the Four Seasons. There you’ll find a gym, rooftop tennis and pickleball courts, and a decked-out locker room (whirlpool, steam, sauna, showers). I opted for a lomilomi massage and tacked on a coconut oil scalp massage. 

Dinner

I had dinner at Noe, the Italian restaurant at the Four Seasons. This place has a decidedly romantic vibe, with outdoor tables lit by string lights and tiki torches. I felt a bit out of place, eating alone under the soft lights, but the Negronis helped. The menu features homemade pastas, local seafood and an excellent selection of Italian wines. I ordered the veal chop based on the server’s enthusiastic recommendation, and it was both enormous (I couldn’t finish it) and delicious. No dessert and I was asleep by 9pm!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/EventSubscribers/EntityEventSubscriber.php(146): Drupal\aws_event_pipeline\AwsEventSync->sendToAws(Object(Drupal\node\Entity\Node), Object(Drupal\aws_event_pipeline\AwsEvent\AwsEvent)) #8 [internal function]: Drupal\aws_event_pipeline\EventSubscribers\EntityEventSubscriber->onEntityUpdate(Object(Drupal\Core\Entity\EntityEvent), 'entity.update', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #9 /code/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Drupal\Core\Entity\EntityEvent), 'entity.update', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #10 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(231): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object(Drupal\Core\Entity\EntityEvent), 'entity.update') #11 /code/web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(900): Drupal\Core\Entity\EntityStorageBase->invokeHook('update', Object(Drupal\node\Entity\Node)) #12 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(579): Drupal\Core\Entity\ContentEntityStorageBase->invokeHook('update', Object(Drupal\node\Entity\Node)) #13 /code/web/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php(781): Drupal\Core\Entity\EntityStorageBase->doPostSave(Object(Drupal\node\Entity\Node), true) #14 /code/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(504): Drupal\Core\Entity\ContentEntityStorageBase->doPostSave(Object(Drupal\node\Entity\Node), true) #15 /code/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php(806): Drupal\Core\Entity\EntityStorageBase->save(Object(Drupal\node\Entity\Node)) #16 /code/web/core/lib/Drupal/Core/Entity/EntityBase.php(339): Drupal\Core\Entity\Sql\SqlContentEntityStorage->save(Object(Drupal\node\Entity\Node)) #17 /code/web/core/modules/node/src/NodeForm.php(270): Drupal\Core\Entity\EntityBase->save() #18 [internal function]: Drupal\node\NodeForm->save(Array, Object(Drupal\Core\Form\FormState)) #19 /code/web/core/lib/Drupal/Core/Form/FormSubmitter.php(114): call_user_func_array(Array, Array) #20 /code/web/core/lib/Drupal/Core/Form/FormSubmitter.php(52): Drupal\Core\Form\FormSubmitter->executeSubmitHandlers(Array, Object(Drupal\Core\Form\FormState)) #21 /code/web/core/lib/Drupal/Core/Form/FormBuilder.php(597): Drupal\Core\Form\FormSubmitter->doSubmitForm(Array, Object(Drupal\Core\Form\FormState)) #22 /code/web/modules/contrib/autosave_form/src/Form/AutosaveFormBuilder.php(144): Drupal\Core\Form\FormBuilder->processForm('node_article_ed...', Array, Object(Drupal\Core\Form\FormState)) #23 /code/web/core/lib/Drupal/Core/Form/FormBuilder.php(325): Drupal\autosave_form\Form\AutosaveFormBuilder->processForm('node_article_ed...', Array, Object(Drupal\Core\Form\FormState)) #24 /code/web/modules/contrib/autosave_form/src/Form/AutosaveFormBuilder.php(97): Drupal\Core\Form\FormBuilder->buildForm(Object(Drupal\node\NodeForm), Object(Drupal\Core\Form\FormState)) #25 /code/web/core/lib/Drupal/Core/Controller/FormController.php(73): Drupal\autosave_form\Form\AutosaveFormBuilder->buildForm(Object(Drupal\node\NodeForm), Object(Drupal\Core\Form\FormState)) #26 /code/web/core/modules/layout_builder/src/Controller/LayoutBuilderHtmlEntityFormController.php(39): Drupal\Core\Controller\FormController->getContentResult(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\RouteMatch)) #27 [internal function]: Drupal\layout_builder\Controller\LayoutBuilderHtmlEntityFormController->getContentResult(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\RouteMatch)) #28 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array) #29 /code/web/core/lib/Drupal/Core/Render/Renderer.php(592): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #30 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #31 /code/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) #32 /code/vendor/symfony/http-kernel/HttpKernel.php(181): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() #33 /code/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #34 /code/web/modules/contrib/redirect_after_login/src/RedirectMiddleware.php(44): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #35 /code/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Drupal\redirect_after_login\RedirectMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #36 /code/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #37 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #38 /code/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true) #39 /code/vendor/asm89/stack-cors/src/Cors.php(53): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #40 /code/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\Stack\Cors->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #41 /code/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #42 /code/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #43 /code/web/core/lib/Drupal/Core/DrupalKernel.php(704): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #44 /code/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #45 {main}

Day 3: Snorkel, beach, eat, repeat

Morning

The breakfast at Four Seasons O‘ahu is as delicious as it is expensive. You choose between a buffet or à la carte menu. The buffet, my friends, is bonkers, with absolutely everything you could want for breakfast for the taking (after you pony up $50), including bagels with the works, breads, pastries, an omelet station, pancakes and all the fixings, potatoes, eggs Benedict, fruit, granola, cereal, more eggs, fried rice and dim sum.

How to spend the day

After breakfast it was time for another water adventure, this time with Mana Cruises. I joined a family of three on a sailing catamaran (again, no wind, so no sailing), and the crew offered us more fruit and a morning mai tai, which I couldn’t quite get down at 9:30am. But tasty. 

We ended up mooring almost exactly where I had been the day before, in front of a power station (sigh), but that’s where the fish are. Except we didn’t see the dolphins and turtles I was hoping for. One of the crew members tried to coax an octopus from its cave – he wasn’t having it – so we snorkeled for an hour and were served lunch afterward, then returned to the Ko Olina marina.

The Ko Olina Resort One of the lagoons facing Four Seasons O‘ahu. Courtesy Ko Olina Resort Courtesy Ko Olina Resort

A terrific path stretches from the marina alongside all of Ko Olina’s lagoons. It’s a great spot to get in your steps. As I walked back to the hotel, I passed beachgoers, locals, a swim team, people fishing and an outdoor yoga class, and I took tons of pictures, none of which really captured what I was experiencing. 

At the hotel, my sister and her boyfriend joined me at the beach. Then I took my sister over to the Ko Olina shopping area to do a little shopping and browsing. We bought some locally-made crafts at CocoNene, ogled some designer swimwear at BikiniBird and stopped by Island Country Markets is your repository for supplies of all sorts: groceries, souvenirs, sunscreen, booze, snacks, basically anything you could possibly need that you couldn’t or didn’t pack.

Dinner

Roy’s is a Hawaii institution, and the Ko Olina branch has been around for 20 years. General Manager Taisei Lee set the tone with a convivial welcome – saying hello to all the regulars he’s met since the restaurant opened. You want to eat outside because the indoor dining room lacks the communal experience on the deck. And there's live music.

I recommend a medley of appetizers to maximize flavors: the Mongolian baby back ribs, the brussels sprouts and the spicy, crunchy tuna roll made for a perfect tasting potpourri. Finish it off with a mini chocolate soufflé because yum.

Four Seasons O‘ahu is a special place. From the food to the grounds to the swim-up pool bar, my entire stay was relaxing and luxurious. I’m not much of a shopper, but the gift shop and boutiques are pretty dreamy, stocked with everything from sunscreen to fine jewelry.

The lobby coffee shop is a nice option for a quick bite if you’re not a big breakfast person. And Ko Olina’s location is nicely set apart from the Waikiki throngs, and it feels more like a little village than a resort.

Brekke Fletcher traveled to Ko Olina Resort as its guest. Lonely Planet does not accept freebies in exchange for positive coverage.