10% OFF ORDERS OVER $25 USE CODE COASTAL VIBES

Your Everyday Coastal Adventure Starts Here

Everyday coastal vibes—Made for the coastal state of mind. Discover our originals (apparel and accessories) and our original and hand-picked (mini swells, jewelry and wall art/decor)

Signature Originals

Designs created by our talented artists and designers bring everyday coastal vibes to your wardrobe.

Hand-Picked Finds

Sourced jewelry, accessories, and art selected to match your coastal lifestyle.

Made for Adventure

Premium materials built for beach days, lazy Sundays, and everyday wear.

Small Business

Quick Answers, real people, reliable care

Home and Office

Jewelry / Accessories

Mini Swell Club

New pieces just landed. Browse fresh coastal styles, limited releases, and easy favorites made for the season ahead. Find your next Salty Breakers staple before it drifts away

Guardians of the Ocean | Batik Craft Kit | Hand-Waxed DIY Art Kit UK

Price range: $30 through $38

Gift Cards

Price range: $15 through $200

Koi Fish Glass Cutting Board

In stock

$45

Jellyfish Dish Drying Mat

In stock

$23

Dolphin Dish Drying Mat

In stock

$23

Seahorses Dish Drying Mat

In stock

$23

Dolphin Dish Drying Mat

In stock

$23

Ahlers Sailboats Wood Wooden Coastal Wall Art by Nature Wonders

Price range: $30 through $685

Salty Breakers™ Malibu polarized sunglasses in matte white with reflective blue mirror lenses resting on a Seafoam White presentation box and branded microfiber storage pouch atop a woven basket against sea jetty rocks.
Malibu Wayfarer Polarized Sunglasses | Salty Breakers™

$80

High-resolution coastal lifestyle photograph of a woman wearing the vibrant Pink Raspberry Salty Breakers Sport-Tek Women's PosiCharge Competitor Polo. The specific ‘SB with waves’ monogram script logo—white text with double turquoise and blue waves—is perfectly visible on the left chest. The woman is standing on the teak deck of a luxury center-console boat at a Florida marina during golden hour, confidently adjusting a mooring line. Her polarized sunglasses with aquamarine reflective lenses rest on her nose. Natural, warm sunlight casts gentle highlights on the technical performance fabric, making the polo and its detailed logo the undisputed star against the blurred backdrop of sparkling ocean water and yachts.
Women’s Performance Coastal Polo Shirt - Quick-Dry Activewear | Salty Breakers™

Price range: $48 through $52

Natural morning action photograph set at an upscale marina in St. Petersburg, Florida, featuring a man in his late 30s. He is wearing the vibrant Atomic Blue Salty Breakers Sport-Tek PosiCharge Competitor Polo with the precisely placed trademark ‘SB with waves’ monogram (white script over dual turquoise/blue waves) on the left chest. He is smiling while making subtle technical adjustments to polarized sunglasses on a neoprene lanyard around his neck. The man is standing near custom polished stainless steel on a professional center-console fishing boat, conveying an authoritative, effortless confidence. Bright natural sunlight illuminates the texture of the turquoise performance fabric and the defined lines of the intricate logo decoration.
Men’s BreakerDry™ Performance Coastal Polo Shirt - Quick-Dry Activewear | Salty Breakers™

Price range: $48 through $52

Anchor Charm Pendant

In stock

$12

Discover Endless Style with Salty Breakers Apparel

Bring everyday coastal vibes by shopping our sunglass and BreakerDry line!

Curated finds for a steady mind and a beautiful space. Bring good flow to your home and work.

Scenic Sunset Vertical Posters

Price range: $27 through $46

Loggerhead Sea Turtle Doormat

In stock

$31

Turtle Drive Glass Cutting Board

In stock

$45

Turtle Drive Doormat

In stock

$46

Turtle Drive Apron

In stock

$29

Salty Beach Hand Towel — Salty Beach Gonna Stay That Way

$19

Yellow Salty Beach Hand Towel

$19

Fishing On The Bayou Glass Cutting Board

In stock

$45

Fishing On The Bayou Doormat

In stock

$46

Fishing On The Bayou Apron

In stock

$29

Fishing On The Bayou Doormat

In stock

$31

Fishing On The Bayou Pair of Pot Holders

In stock

$26

Why Choose Us

The Salty Breakers Difference

Our Community

Share Your Everyday Coastal Vibes

Follow us on social and don’t be shy—tag #SaltyBreakers to share your beach days, custom style, and coastal home setups!

Join our VIP Club

Subscribe to the VIP Club for exclusive offers and fresh monthly drops.

(() => { 'use strict'; const ROOT_SELECTOR = '.mp-peek-slider'; const SWIPER_SELECTOR = '.jet-listing-grid__slider.swiper'; const PATCHED_ATTR = 'data-mp-peek-applied'; const INIT_TIMEOUT_MS = 10000; const DEFAULT_MOBILE_MAX_WIDTH = 767; const PEEK_PARAMS = Object.freeze({ slidesPerView: 1.2, slidesPerGroup: 1 }); const getMobileMaxWidth = () => { const value = Number( window.elementorFrontend?.config?.responsive?.activeBreakpoints?.mobile?.value, ); return Number.isFinite(value) && value > 0 ? value : DEFAULT_MOBILE_MAX_WIDTH; }; const buildBreakpoints = (swiper) => { const originalParams = swiper.originalParams ?? swiper.params; const originalBreakpoints = originalParams.breakpoints ?? {}; const tabletMinWidth = getMobileMaxWidth() + 1; const sortedKeys = Object.keys(originalBreakpoints) .map(Number) .filter(Number.isFinite) .sort((a, b) => a - b); const activeKeyAtTablet = sortedKeys.filter((key) => key key > tabletMinWidth) .forEach((key) => { breakpoints[key] = { ...originalBreakpoints[key] }; }); return breakpoints; }; const applyPeek = (swiper) => { const breakpoints = buildBreakpoints(swiper); swiper.params.breakpoints = breakpoints; if (swiper.originalParams) { swiper.originalParams.breakpoints = breakpoints; } swiper.currentBreakpoint = undefined; swiper.setBreakpoint(); swiper.update(); }; const waitForSwiper = (el) => new Promise((resolve) => { if (el.swiper?.initialized) { resolve(el.swiper); return; } let timerId = null; const observer = new MutationObserver(() => { if (el.swiper?.initialized) { cleanup(); resolve(el.swiper); } }); const cleanup = () => { observer.disconnect(); if (timerId !== null) window.clearTimeout(timerId); }; timerId = window.setTimeout(() => { cleanup(); resolve(el.swiper?.initialized ? el.swiper : null); }, INIT_TIMEOUT_MS); observer.observe(el, { attributes: true, attributeFilter: ['class'] }); }); const patchSlider = async (el) => { if (el.hasAttribute(PATCHED_ATTR)) return; el.setAttribute(PATCHED_ATTR, 'pending'); const swiper = await waitForSwiper(el); if (!swiper) { el.removeAttribute(PATCHED_ATTR); return; } applyPeek(swiper); el.setAttribute(PATCHED_ATTR, 'true'); }; const initWithin = (scope) => { const root = scope ?? document; const selector = `${ROOT_SELECTOR} ${SWIPER_SELECTOR}`; if (root instanceof Element && root.matches(ROOT_SELECTOR)) { root.querySelectorAll(SWIPER_SELECTOR).forEach((el) => void patchSlider(el)); return; } root.querySelectorAll(selector).forEach((el) => void patchSlider(el)); }; if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => initWithin(document), { once: true }); } else { initWithin(document); } window.addEventListener('elementor/frontend/init', () => { const hooks = window.elementorFrontend?.hooks; if (!hooks) return; hooks.addAction('frontend/element_ready/jet-listing-grid.default', ($scope) => { const element = $scope?.[0] ?? null; if (element) initWithin(element); }); }); })();
(() => { 'use strict'; const ROOT_SELECTOR = '.mp-peek-center'; const SWIPER_SELECTOR = '.elementor-main-swiper.swiper'; const PATCHED_ATTR = 'data-mp-peek-center-applied'; const INIT_TIMEOUT_MS = 10000; const DEFAULT_MOBILE_MAX_WIDTH = 767; const LOOP_ADDITIONAL_SLIDES = 1; const PEEK_PARAMS = Object.freeze({ slidesPerView: 1.4, slidesPerGroup: 1, centeredSlides: true, }); const getMobileMaxWidth = () => { const value = Number( window.elementorFrontend?.config?.responsive?.activeBreakpoints?.mobile?.value, ); return Number.isFinite(value) && value > 0 ? value : DEFAULT_MOBILE_MAX_WIDTH; }; const buildBreakpoints = (swiper) => { const originalParams = swiper.originalParams ?? swiper.params; const originalBreakpoints = originalParams.breakpoints ?? {}; const tabletMinWidth = getMobileMaxWidth() + 1; const sortedKeys = Object.keys(originalBreakpoints) .map(Number) .filter(Number.isFinite) .sort((a, b) => a - b); const activeKeyAtTablet = sortedKeys.filter((key) => key { const result = { ...source }; Object.keys(PEEK_PARAMS).forEach((key) => { if (result[key] === undefined && originalParams[key] !== undefined) { result[key] = originalParams[key]; } }); return result; }; const tabletSource = activeKeyAtTablet !== undefined ? originalBreakpoints[activeKeyAtTablet] : {}; const breakpoints = { 0: { ...PEEK_PARAMS }, [tabletMinWidth]: withRevertedKeys(tabletSource), }; sortedKeys .filter((key) => key > tabletMinWidth) .forEach((key) => { breakpoints[key] = withRevertedKeys(originalBreakpoints[key]); }); return breakpoints; }; const applyPeek = (swiper) => { const breakpoints = buildBreakpoints(swiper); swiper.params.loopAdditionalSlides = LOOP_ADDITIONAL_SLIDES; swiper.params.breakpoints = breakpoints; if (swiper.originalParams) { swiper.originalParams.loopAdditionalSlides = LOOP_ADDITIONAL_SLIDES; swiper.originalParams.breakpoints = breakpoints; } swiper.currentBreakpoint = undefined; swiper.setBreakpoint(); swiper.update(); }; const waitForSwiper = (el) => new Promise((resolve) => { if (el.swiper?.initialized) { resolve(el.swiper); return; } let timerId = null; const observer = new MutationObserver(() => { if (el.swiper?.initialized) { cleanup(); resolve(el.swiper); } }); const cleanup = () => { observer.disconnect(); if (timerId !== null) window.clearTimeout(timerId); }; timerId = window.setTimeout(() => { cleanup(); resolve(el.swiper?.initialized ? el.swiper : null); }, INIT_TIMEOUT_MS); observer.observe(el, { attributes: true, attributeFilter: ['class'] }); }); const patchSlider = async (el) => { if (el.hasAttribute(PATCHED_ATTR)) return; el.setAttribute(PATCHED_ATTR, 'pending'); const swiper = await waitForSwiper(el); if (!swiper) { el.removeAttribute(PATCHED_ATTR); return; } applyPeek(swiper); el.setAttribute(PATCHED_ATTR, 'true'); }; const initWithin = (scope) => { const root = scope ?? document; if (root instanceof Element && root.matches(ROOT_SELECTOR)) { root.querySelectorAll(SWIPER_SELECTOR).forEach((el) => void patchSlider(el)); return; } root .querySelectorAll(`${ROOT_SELECTOR} ${SWIPER_SELECTOR}`) .forEach((el) => void patchSlider(el)); }; if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => initWithin(document), { once: true }); } else { initWithin(document); } window.addEventListener('elementor/frontend/init', () => { const hooks = window.elementorFrontend?.hooks; if (!hooks) return; hooks.addAction('frontend/element_ready/media-carousel.default', ($scope) => { const element = $scope?.[0] ?? null; if (element) initWithin(element); }); }); })();