{"id":2985,"date":"2026-04-22T07:44:08","date_gmt":"2026-04-22T00:44:08","guid":{"rendered":"https:\/\/satusatu.com\/inspiration\/?p=2985"},"modified":"2026-04-22T07:44:10","modified_gmt":"2026-04-22T00:44:10","slug":"desserts-canggu","status":"publish","type":"post","link":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/","title":{"rendered":"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth"},"content":{"rendered":"\n<p>Canggu&#8217;s food scene gets a lot of attention for its surf, its sunsets, and its beach clubs. But ask anyone who&#8217;s spent more than a few days here, and they&#8217;ll tell you the dessert scene is something else entirely.&nbsp;<\/p>\n\n\n\n<p>From gooey freshly baked cookies to elegant European-style cakes, the neighborhood punches well above its weight when it comes to sweet treats. If you&#8217;re planning a trip and wondering where to start, SatuSatu is a Bali travel platform that helps travelers discover and book the best experiences the island has to offer.&nbsp;<\/p>\n\n\n\n<p>Here&#8217;s a guide to five dessert spots in Canggu that are genuinely worth your time.<\/p>\n\n\n\n    <!-- Styles -->\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Overpass:ital,wght@0,100..900;1,100..900&display=swap\" rel=\"stylesheet\">\n    <style>\n        \/* ========================= *\/\n          \/* BASE STYLES *\/\n          \/* ========================= *\/\n          .produk-container {\n              display: flex;\n              flex-direction: column;\n              gap: 12px;\n          }\n\n          .produk-card {\n            cursor: pointer;\n            display: flex;\n            margin: 0;\n            border: 1px solid #eee;\n            border-radius: 12px;\n            overflow: hidden;\n            font-family: Overpass, sans-serif;\n            background: #ffffff;\n          }\n\n          .produk-image {\n            position: relative;\n            flex-shrink: 0;\n          }\n\n          .produk-image img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n          }\n\n          .produk-location {\n            position: absolute;\n            left: 8px;\n            bottom: 8px;\n            background: #fff;\n            border-radius: 12px;\n            border: 1px solid #dadbe0;\n            padding: 4px 6px;\n            font-size: 10px;\n            line-height: 14px;\n          }\n\n          .produk-content {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            gap: 12px;\n          }\n\n          .produk-title {\n            font-weight: 700;\n          }\n\n          .produk-rating {\n            font-size: 16px;\n            color: #333;\n            display: flex;\n            align-items: flex-start;\n            gap: 4px;\n          }\n\n          .produk-rating-line {\n            display: flex;\n            align-items: flex-start;\n            gap: 4px;\n          }\n\n          .produk-price-main {\n            color: #cb1c4f;\n            font-weight: 800;\n            font-size: 16px;\n          }\n\n          .produk-price-strike {\n            text-decoration: line-through;\n            font-size: 14px;\n            opacity: 0.7;\n            margin-right: 8px;\n          }\n\n          .produk-discount {\n            background: #cb1c4f;\n            color: #fff;\n            padding: 2px 6px;\n            border-radius: 4px;\n            font-size: 14px;\n          }\n\n          .produk-btn {\n            background: #cb1c4f;\n            color: #ffffff;\n            padding: 10px 16px;\n            border-radius: 8px;\n            text-decoration: none;\n            font-weight: 600;\n            margin-top: 8px;\n          }\n\n          .produk-btn:hover {\n            text-decoration: none;\n            color: #ffffff;\n          }\n\n          .product-info-wrap {\n            display: flex;\n            flex-wrap: nowrap;\n            justify-content: space-between;\n          }\n\n          \/* ========================= *\/\n          \/* DESKTOP (>= 800px) *\/\n          \/* ========================= *\/\n\n          @media (min-width: 800px) {\n            .produk-image {\n              width: 200px;\n            }\n\n            .produk-content {\n              padding: 20px;\n            }\n\n            .product-info-wrap {\n              flex-direction: row;\n              align-items: center;\n            }\n\n            .produk-btn {\n              display: inline-block;\n            }\n          }\n\n          \/* ========================= *\/\n          \/* TABLET (<= 768px) *\/\n          \/* ========================= *\/\n\n          @media (max-width: 768px) {\n            .produk-card {\n              flex-direction: column;\n            }\n\n            .produk-image {\n              width: 200px;\n              height: 220px;\n            }\n\n            .produk-content {\n              padding: 12px;\n            }\n\n            .produk-title {\n              font-size: 18px;\n            }\n\n            .produk-rating {\n              font-size: 14px;\n            }\n\n            .product-info-wrap {\n              flex-direction: column;\n              align-items: flex-start;\n              gap: 12px;\n            }\n\n            .produk-btn {\n              display: none;\n            }\n          }\n\n          \/* ========================= *\/\n          \/* MOBILE (<= 480px) *\/\n          \/* ========================= *\/\n\n          @media (max-width: 480px) {\n            .produk-image {\n              width: 100%;\n            }\n\n            .produk-content {\n              padding: 12px;\n            }\n\n            .produk-title {\n              font-size: 16px;\n              overflow: hidden;\n              text-overflow: ellipsis;\n            }\n\n            .produk-price-main {\n              font-size: 15px;\n            }\n\n            .produk-discount {\n              font-size: 12px;\n            }\n\n            .produk-btn {\n              display: none;\n            }\n          }\n\n          \/* ======================================= *\/\n          \/* CAROUSEL MODE (inside .carousel-list)  *\/\n          \/* ======================================= *\/\n\n          .carousel-wrapper {\n            position: relative;\n          }\n\n          .carousel-list {\n            overflow-x: auto;\n            overflow-y: hidden;\n            -webkit-overflow-scrolling: touch;\n            scroll-behavior: smooth;\n            scroll-snap-type: x mandatory;\n            scrollbar-width: none;\n          }\n\n          .carousel-list::-webkit-scrollbar {\n            display: none;\n          }\n\n          .carousel-list .produk-container {\n            display: flex;\n            flex-direction: row;\n            flex-wrap: nowrap;\n            width: max-content;\n            gap: 12px;\n          }\n\n          .carousel-list .produk-card {\n            flex: 0 0 auto;\n            width: 220px;\n            flex-direction: column;\n            scroll-snap-align: start;\n          }\n\n          .carousel-list .produk-image {\n            width: 100%;\n            height: 220px;\n          }\n\n          .carousel-list .produk-content {\n            padding: 12px;\n          }\n\n          .carousel-list .produk-title {\n\t\t\t  font-size: 16px;\n\t\t\t  overflow: hidden;\n\t\t\t  text-overflow: ellipsis;\n\t\t\t  display: -webkit-box;\n\t\t\t  -webkit-line-clamp: 2;\n\t\t\t  -webkit-box-orient: vertical;\n\t\t\t  line-clamp: 2;\n\t\t\t}\n\n          .carousel-list .produk-rating {\n            font-size: 14px;\n          }\n\n          .carousel-list .produk-price-main {\n            font-size: 15px;\n          }\n\n          .carousel-list .produk-discount {\n            font-size: 12px;\n          }\n\n          .carousel-list .product-info-wrap {\n            flex-direction: column;\n            align-items: flex-start;\n            gap: 12px;\n          }\n\n          .carousel-list .produk-btn {\n            display: none;\n          }\n\n          \/* ========================= *\/\n          \/* CAROUSEL ARROWS *\/\n          \/* ========================= *\/\n\n          .carousel-arrow {\n            position: absolute;\n            top: 50%;\n            transform: translateY(-50%);\n            width: 36px;\n            height: 36px;\n            border-radius: 50%;\n            background: #ffffff;\n            border: 1px solid #dadbe0;\n            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            z-index: 10;\n            transition: opacity 0.2s, box-shadow 0.2s;\n            padding: 0;\n          }\n\n          .carousel-arrow:hover {\n\t\t\tbackground: #FFFFFF;\n            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n          }\n\n          .carousel-arrow.is-hidden {\n            opacity: 0;\n            pointer-events: none;\n          }\n\n          .carousel-arrow-left {\n            left: -18px;\n          }\n\n          .carousel-arrow-right {\n            right: -18px;\n          }\n\n          @media (max-width: 480px) {\n\t\t\t.carousel-arrow{\n\t\t\t\tdisplay: none;\n\t\t\t}\n            .carousel-arrow-left {\n              left: 4px;\n            }\n\n            .carousel-arrow-right {\n              right: 4px;\n            }\n          }\n    <\/style>\n\n    <!-- HTML -->\n    <div class=\"carousel-wrapper\" data-carousel-id=\"carousel-69f1ec45e614d\" data-is-carousel=\"1\">\n                    <button type=\"button\" class=\"carousel-arrow carousel-arrow-left is-hidden\" aria-label=\"Scroll left\">\n                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"25\" height=\"25\" fill=\"#000000\" viewBox=\"0 0 256 256\"><path d=\"M216,88v80a8,8,0,0,1-8,8H120v48L24,128l96-96V80h88A8,8,0,0,1,216,88Z\" opacity=\"0.2\"><\/path><path d=\"M208,72H128V32a8,8,0,0,0-13.66-5.66l-96,96a8,8,0,0,0,0,11.32l96,96A8,8,0,0,0,128,224V184h80a16,16,0,0,0,16-16V88A16,16,0,0,0,208,72Zm0,96H120a8,8,0,0,0-8,8v28.69L35.31,128,112,51.31V80a8,8,0,0,0,8,8h88Z\"><\/path><\/svg>\n            <\/button>\n            <button type=\"button\" class=\"carousel-arrow carousel-arrow-right is-hidden\" aria-label=\"Scroll right\">\n                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"25\" height=\"25\" fill=\"#000000\" viewBox=\"0 0 256 256\"><path d=\"M136,224V176H48a8,8,0,0,1-8-8V88a8,8,0,0,1,8-8h88V32l96,96Z\" opacity=\"0.2\"><\/path><path d=\"M237.66,122.34l-96-96A8,8,0,0,0,128,32V72H48A16,16,0,0,0,32,88v80a16,16,0,0,0,16,16h80v40a8,8,0,0,0,13.66,5.66l96-96A8,8,0,0,0,237.66,122.34ZM144,204.69V176a8,8,0,0,0-8-8H48V88h88a8,8,0,0,0,8-8V51.31L220.69,128Z\"><\/path><\/svg>\n            <\/button>\n                <div class=\"carousel-list\">\n            <div class=\"produk-container\" data-slugs=\" uluwatu-temple-kecak-fire-dance-satusatu-curated-experience-sameday-booking-bonus-merchandise, satusatu-exclusive-car-charter-sameday-booking, satusatu-airport-transfer-from-to-airport-sameday-booking, nusa-penida-day-tour-satusatu-curated-experience-bonus-merchandise, bali-bird-park-experience-nature-wildlife-adventure\"><\/div>\n        <\/div>\n    <\/div>\n\n    <!-- Script -->\n    <script>\n    (function() {\n\t\tfunction buildCatalogUrl(slug) {\n\t\t\t\/\/ UTM params hardcoded by the shortcode (these always win)\n\t\t\tconst hardcoded = {\n\t\t\t\tutm_source: \"blog\",\n\t\t\t\tutm_medium: \"in_line_product_cta\",\n\t\t\t};\n\n\t\t\t\/\/ UTM params from the current page URL (only used if hardcoded doesn't define them)\n\t\t\tconst pageParams = new URLSearchParams(window.location.search);\n\t\t\tconst utmKeys = [\"utm_source\", \"utm_medium\", \"utm_campaign\", \"utm_content\", \"utm_term\"];\n\t\t\tconst merged = new URLSearchParams();\n\n\t\t\tutmKeys.forEach(key => {\n\t\t\t\tif (hardcoded[key] !== undefined) {\n\t\t\t\t\t\/\/ Hardcoded value takes priority\n\t\t\t\t\tmerged.set(key, hardcoded[key]);\n\t\t\t\t} else if (pageParams.has(key)) {\n\t\t\t\t\t\/\/ Fall back to whatever the page URL has\n\t\t\t\t\tmerged.set(key, pageParams.get(key));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn \"https:\/\/satusatu.com\/en-ID\/catalog\/\" + slug + \"?\" + merged.toString();\n\t\t}\n\t\t\n        function renderCatalogItem(p) {\n            const location = p.location?.name || \"\";\n            const rating = p.rating?.average_rating ?? null;\n            const ratingCount = p.rating?.count_rating_display || \"\";\n            const soldDisplay = p.rating?.total_sold_display || \"\";\n            const currency = p.pricing?.currency_symbol || \"Rp\";\n            const price = p.pricing?.min_price || 0;\n            const originalPrice = p.pricing?.min_original_price || 0;\n            const discount = p.pricing?.discount || 0;\n\t\t\tconst catalogUrl = buildCatalogUrl(p.slug);\n\n            return `\n                <div class=\"produk-card\" data-url=\"${catalogUrl}\">\n                    <div class=\"produk-image\">\n                        <img decoding=\"async\" src=\"${p.image_url}\" alt=\"${p.title}\" \/>\n                        <div class=\"produk-location\">\n\t\t\t\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\"><path d=\"M128,24a80,80,0,0,0-80,80c0,72,80,128,80,128s80-56,80-128A80,80,0,0,0,128,24Zm0,112a32,32,0,1,1,32-32A32,32,0,0,1,128,136Z\" opacity=\"0.2\"><\/path><path d=\"M128,64a40,40,0,1,0,40,40A40,40,0,0,0,128,64Zm0,64a24,24,0,1,1,24-24A24,24,0,0,1,128,128Zm0-112a88.1,88.1,0,0,0-88,88c0,31.4,14.51,64.68,42,96.25a254.19,254.19,0,0,0,41.45,38.3,8,8,0,0,0,9.18,0A254.19,254.19,0,0,0,174,200.25c27.45-31.57,42-64.85,42-96.25A88.1,88.1,0,0,0,128,16Zm0,206c-16.53-13-72-60.75-72-118a72,72,0,0,1,144,0C200,161.23,144.53,209,128,222Z\"><\/path><\/svg>\n                            <span>${location}<\/span>\n                        <\/div>\n                    <\/div>\n                    <div class=\"produk-content\">\n                        <div class=\"produk-title\">${p.title}<\/div>\n                        ${rating ? `\n                        <div class=\"produk-rating\">\n                            <div class=\"produk-rating-line\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"18\" height=\"18\" fill=\"#F87500\" viewBox=\"0 0 256 256\"><path d=\"M229.06,108.79l-48.7,42,14.88,62.79a8.4,8.4,0,0,1-12.52,9.17L128,189.09,73.28,222.74a8.4,8.4,0,0,1-12.52-9.17l14.88-62.79-48.7-42A8.46,8.46,0,0,1,31.73,94L95.64,88.8l24.62-59.6a8.36,8.36,0,0,1,15.48,0l24.62,59.6L224.27,94A8.46,8.46,0,0,1,229.06,108.79Z\" opacity=\"0.2\"><\/path><path d=\"M239.18,97.26A16.38,16.38,0,0,0,224.92,86l-59-4.76L143.14,26.15a16.36,16.36,0,0,0-30.27,0L90.11,81.23,31.08,86a16.46,16.46,0,0,0-9.37,28.86l45,38.83L53,211.75a16.38,16.38,0,0,0,24.5,17.82L128,198.49l50.53,31.08A16.4,16.4,0,0,0,203,211.75l-13.76-58.07,45-38.83A16.43,16.43,0,0,0,239.18,97.26Zm-15.34,5.47-48.7,42a8,8,0,0,0-2.56,7.91l14.88,62.8a.37.37,0,0,1-.17.48c-.18.14-.23.11-.38,0l-54.72-33.65a8,8,0,0,0-8.38,0L69.09,215.94c-.15.09-.19.12-.38,0a.37.37,0,0,1-.17-.48l14.88-62.8a8,8,0,0,0-2.56-7.91l-48.7-42c-.12-.1-.23-.19-.13-.5s.18-.27.33-.29l63.92-5.16A8,8,0,0,0,103,91.86l24.62-59.61c.08-.17.11-.25.35-.25s.27.08.35.25L153,91.86a8,8,0,0,0,6.75,4.92l63.92,5.16c.15,0,.24,0,.33.29S224,102.63,223.84,102.73Z\"><\/path><\/svg>\n                                <span>${rating} (${ratingCount}) &bull; ${soldDisplay} sold<\/span>\n                            <\/div>\n                        <\/div>` : ''}\n                        <div class=\"product-info-wrap\">\n                            <div>\n                                <div style=\"display:flex;gap:6px;\">\n                                    <div style=\"font-size:14px;\">From<\/div>\n                                    <div class=\"produk-price-main\">${currency} ${price.toLocaleString()}<\/div>\n                                <\/div>\n                                ${discount > 0 ? `\n                                <div>\n                                    <span class=\"produk-price-strike\">${currency} ${originalPrice.toLocaleString()}<\/span>\n                                    <span class=\"produk-discount\">-${discount}%<\/span>\n                                <\/div>` : ''}\n                            <\/div>\n                            <div>\n                                <a target=\"_blank\" href=\"${catalogUrl}\" class=\"produk-btn\">Check Availability<\/a>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            `;\n        }\n\n        function initSatuSatuCatalog(wrapperEl) {\n            const scrollEl = wrapperEl.querySelector(\".carousel-list\");\n            const container = wrapperEl.querySelector(\".produk-container\");\n            const slugs = container.getAttribute(\"data-slugs\");\n            const isCarousel = wrapperEl.getAttribute(\"data-is-carousel\") === \"1\";\n            const leftArrow = wrapperEl.querySelector(\".carousel-arrow-left\");\n            const rightArrow = wrapperEl.querySelector(\".carousel-arrow-right\");\n\n            fetch(\"https:\/\/api.satusatu.com\/content\/guest\/satusatu\/v1\/catalogs\/blog\/catalog-list?slugs=\" + slugs)\n                .then(res => res.json())\n                .then(data => {\n                    container.innerHTML = data.data.map(renderCatalogItem).join('');\n                    \/\/ Event handler for card click\n                    container.querySelectorAll('.produk-card').forEach(card => {\n                        card.addEventListener('click', () => {\n                            window.open(card.dataset.url, '_blank');\n                        });\n                    });\n\n                    if (isCarousel && scrollEl && leftArrow && rightArrow) {\n                        const scrollAmount = 240;\n                        function updateArrows() {\n                            const sl = scrollEl.scrollLeft;\n                            const sw = scrollEl.scrollWidth;\n                            const cw = scrollEl.clientWidth;\n                            leftArrow.classList.toggle(\"is-hidden\", sl <= 0);\n                            rightArrow.classList.toggle(\"is-hidden\", sl + cw >= sw - 1);\n                        }\n                        leftArrow.addEventListener(\"click\", e => {\n                            e.stopPropagation();\n                            scrollEl.scrollBy({ left: -scrollAmount, behavior: \"smooth\" });\n                        });\n                        rightArrow.addEventListener(\"click\", e => {\n                            e.stopPropagation();\n                            scrollEl.scrollBy({ left: scrollAmount, behavior: \"smooth\" });\n                        });\n                        scrollEl.addEventListener(\"scroll\", updateArrows);\n                        window.addEventListener(\"resize\", updateArrows);\n                        setTimeout(updateArrows, 200);\n                    }\n                });\n        }\n\n        document.addEventListener(\"DOMContentLoaded\", function() {\n            document.querySelectorAll(\"[data-carousel-id]\").forEach(initSatuSatuCatalog);\n        });\n    })();\n    <\/script>\n    \n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mavammy<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/Mavammy.png\" alt=\"Mavammy\" class=\"wp-image-2987\"\/><\/figure>\n\n\n\n<p>\ud83d\udccd Jl. Pantai Batu Bolong No.8, Batu Bolong, Canggu, a short walk from Batu Bolong Beach&nbsp;<\/p>\n\n\n\n<p>\ud83d\udcb0 Desserts typically start around IDR 60,000 to IDR 120,000&nbsp;<\/p>\n\n\n\n<p>\ud83d\udd50 Open daily, 8:00 AM to 10:00 PM&nbsp;<\/p>\n\n\n\n<p>\ud83d\udc65 <strong>Best For<\/strong>: couples, solo travelers, digital nomads, and anyone who appreciates beautifully presented food&nbsp;<\/p>\n\n\n\n<p>\u2728 <strong>What Makes It Special: <\/strong>refined European-style desserts made with Belgian chocolate and high-quality ingredients, in a cozy cafe setting<\/p>\n\n\n\n<p>Mavammy has built a loyal following among Canggu regulars for its elegantly balanced desserts that never veer into being overly sweet. The Red Velvet cake is a standout for its generous size and fresh, light texture, while the Honey Cake with Orange adds a citrusy brightness that feels at home in Bali&#8217;s tropical heat.&nbsp;<\/p>\n\n\n\n<p>The cafe itself is bathed in afternoon light with a muted color palette of whites, creams, and soft greens that makes it a genuinely pleasant place to sit.<\/p>\n\n\n\n<p>The Lotus Cheesecake and Profiteroles are also crowd favorites, and the hot matcha latte is frequently called one of the best in Canggu. If you&#8217;re after dessert that feels considered rather than commercial, Mavammy delivers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dang! Cookies<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/Dang-Cookies.png\" alt=\"Dang! Cookies\" class=\"wp-image-2988\"\/><\/figure>\n\n\n\n<p>\ud83d\udccd Jl. Batu Mejan Canggu No.2, near Echo Beach, Canggu&nbsp;<\/p>\n\n\n\n<p>\ud83d\udcb0 Individual cookies typically from IDR 25,000 to IDR 70,000; cookie packs available from IDR 85,000&nbsp;<\/p>\n\n\n\n<p>\ud83d\udd50 Open daily from around 9:00 AM to 11:00 PM (hours may vary by location)&nbsp;<\/p>\n\n\n\n<p>\ud83d\udc65 <strong>Best For<\/strong>: families, groups, solo snackers, anyone looking for a grab-and-go treat <\/p>\n\n\n\n<p>\u2728 <strong>What Makes It Special<\/strong>: freshly baked cookies with warm, gooey centers and creative flavor combinations that have earned a cult following across Bali<\/p>\n\n\n\n<p>Walking past Dang! Cookies without stopping is harder than it sounds. The smell hits you first, and then you see the trays.&nbsp;<\/p>\n\n\n\n<p>Each cookie is named like a character: &#8220;Kevin&#8221; combines chocolate and Kit Kat pieces, &#8220;Germaine&#8221; goes dark with chocolate and walnut, and &#8220;Ginny&#8221; brings a white chocolate and Biscoff combination that&#8217;s become one of their most requested. Vegan options are also available, making this an inclusive stop for all kinds of eaters.<\/p>\n\n\n\n<p>The cookies are thick, chewy, and deeply satisfying rather than delicate, which makes Dang! a go-to for people who want proper dessert with no fuss. Pair one with a Chai or Matcha Latte and you&#8217;ve got yourself a genuine afternoon highlight.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Shady Shack<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/The-Shady-Shack.png\" alt=\"The Shady Shack\" class=\"wp-image-2989\"\/><\/figure>\n\n\n\n<p>\ud83d\udccd Jl. Tanah Barak No.53, Canggu, near the rice fields off the main Batu Bolong strip&nbsp;<\/p>\n\n\n\n<p>\ud83d\udcb0 Vegan desserts typically start around IDR 50,000 to IDR 90,000&nbsp;<\/p>\n\n\n\n<p>\ud83d\udd50 Open daily from 7:30 AM to 10:30 PM&nbsp;<\/p>\n\n\n\n<p>\ud83d\udc65 <strong>Best For<\/strong>: health-conscious travelers, vegans, vegetarians, and anyone who doesn&#8217;t want to compromise on flavor&nbsp;<\/p>\n\n\n\n<p>\u2728 <strong>What Makes It Special<\/strong>: raw vegan desserts made fresh daily, free from dairy, gluten, and refined sugar, in a garden setting surrounded by rice fields<\/p>\n\n\n\n<p>The Shady Shack opened in 2016 with a focus on sustainable, plant-based food, and its dessert menu has become as much of a draw as its savory dishes.&nbsp;<\/p>\n\n\n\n<p>The chocolate almond caramel tart features a nutty base, a sweet gooey center, and a rich chocolate topping that manages to feel genuinely indulgent despite containing none of the usual suspects.&nbsp;<\/p>\n\n\n\n<p>All raw vegan cakes are made fresh each day, which means what you get is never sitting in a chiller for days.<\/p>\n\n\n\n<p>The setting matters here too. Nestled next to the rice fields with a leafy outdoor garden and high wooden ceilings inside, The Shady Shack is one of those places where dessert becomes part of a longer, more relaxed afternoon rather than a quick stop.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Milk &amp; Madu<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1408\" height=\"768\" src=\"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/Milk-Madu.png\" alt=\"Milk &amp; Madu\" class=\"wp-image-2990\"\/><\/figure>\n\n\n\n<p>\ud83d\udccd Jl. Pantai Berawa, Berawa area of Canggu, a short ride from Batu Bolong&nbsp;<\/p>\n\n\n\n<p>\ud83d\udcb0 Desserts and smoothie bowls typically IDR 70,000 to IDR 130,000&nbsp;<\/p>\n\n\n\n<p>\ud83d\udd50 Open daily; hours may vary, check their current schedule before visiting&nbsp;<\/p>\n\n\n\n<p>\ud83d\udc65 <strong>Best For<\/strong>: families, brunch lovers, and travelers who want a lively atmosphere with quality food&nbsp;<\/p>\n\n\n\n<p>\u2728 <strong>What Makes It Special<\/strong>: an open-air cafe with a bright, tropical feel and a dessert menu that blends crowd-pleasing classics with fresh local ingredients<\/p>\n\n\n\n<p>Milk &amp; Madu has been a fixture on the Berawa dining scene for years, and its dessert and sweet menu keeps drawing people back visit after visit. The coconut panna cotta is a particular highlight, with passionfruit coulis cutting through the creaminess in a way that feels refreshing rather than heavy.&nbsp;<\/p>\n\n\n\n<p>Fluffy pancakes, vibrant acai bowls, and a smoothie bowl selection that changes with the season round out the sweet offerings nicely.<\/p>\n\n\n\n<p>The atmosphere here is upbeat and genuinely family-friendly, with high ceilings, plenty of natural light, and the kind of comfortable energy that makes it easy to linger well past the last bite. It&#8217;s an especially good call for groups with different dietary preferences, since the menu covers a wide range without feeling like a compromise.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Warung Bu Mi<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/Warung-Bu-Mi.png\" alt=\"Warung Bu Mi\" class=\"wp-image-2991\"\/><\/figure>\n\n\n\n<p>\ud83d\udccd Batu Bolong area, Canggu (a short walk from the main strip)&nbsp;<\/p>\n\n\n\n<p>\ud83d\udcb0 Traditional desserts typically start at IDR 25,000 to IDR 50,000&nbsp;<\/p>\n\n\n\n<p>\ud83d\udd50 Hours vary; best visited in the afternoon when desserts are freshly made&nbsp;<\/p>\n\n\n\n<p>\ud83d\udc65 <strong>Best For<\/strong>: travelers who want an authentic local experience alongside their sweet fix \u2728 <strong>What Makes It Special<\/strong>: traditional Balinese desserts at local warung prices, with mango sticky rice that balances warm coconut-soaked rice against cool, ripe fresh mango<\/p>\n\n\n\n<p>Not every great dessert in Canggu requires a stylish cafe interior and a matcha latte on the side. Warung Bu Mi is a local institution that serves mango sticky rice the way it should be, glutinous rice soaked in sweet coconut milk, topped with slices of ripe fresh mango that bring the whole thing to life.&nbsp;<\/p>\n\n\n\n<p>The contrast between the warm sticky rice and the cool fruit is simple but genuinely satisfying, and it&#8217;s the kind of dessert that a lot of travelers end up hunting down specifically.<\/p>\n\n\n\n<p>Warung Bu Mi is also a reminder of what makes Canggu interesting as a food destination. Fancy cafes and local warungs exist side by side here, and both have something worth trying.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Explore Desserts Canggu Further with SatuSatu<\/h2>\n\n\n\n<p>After exploring Canggu&#8217;s sweet side, you&#8217;ll want a seamless way to keep the rest of your Bali trip just as good. SatuSatu is a Bali-based travel platform built to make exploring the island easier, connecting travelers with curated local experiences, reliable transport, and same-day booking across <a href=\"http:\/\/satusatu.com\">SatuSatu.com<\/a>&nbsp;<\/p>\n\n\n\n<p>If a food-focused day in Canggu has you thinking about what else the island does well, consider the <a href=\"https:\/\/satusatu.com\/en-US\/catalog\/dadi-bali-adventure-atv-quad-bike\"><strong>Dadi Bali Jungle ATV Adventure<\/strong> <\/a>in Payangan, Gianyar.&nbsp;<\/p>\n\n\n\n<p>It&#8217;s a high-energy outdoor experience through jungle trails and rice field scenery, a strong contrast to a quiet afternoon in a Canggu cafe, and one of SatuSatu&#8217;s most popular activity listings.<\/p>\n\n\n\n<p>Getting to and from Canggu is easy when you arrange an <a href=\"https:\/\/satusatu.com\/en-US\/catalog\/satusatu-airport-transfer-from-to-airport-sameday-booking\"><strong>SatuSatu Airport Transfer<\/strong><\/a> in advance. It takes the hassle out of arrival with transparent pricing, no negotiating required, and same-day booking available from Ngurah Rai Airport to anywhere in Bali.<\/p>\n\n\n\n<p>For exploring Canggu&#8217;s dessert spots and beyond at your own pace, the <a href=\"https:\/\/satusatu.com\/en-US\/catalog\/satusatu-exclusive-car-charter-sameday-booking\"><strong>SatuSatu Exclusive Car Charter<\/strong><\/a> gives you a dedicated local driver for the day with no fixed schedule. Whether you&#8217;re visiting all five places on this list or heading somewhere completely different, flexible and bookable directly on <a href=\"http:\/\/satusatu.com\">SatuSatu.com<\/a>&nbsp;<\/p>\n\n\n\n<p>And before you leave Bali, do not miss the <a href=\"https:\/\/satusatu.com\/en-US\/catalog\/uluwatu-temple-kecak-fire-dance-satusatu-curated-experience-sameday-booking-bonus-merchandise\"><strong>Uluwatu Temple Kecak &amp; Fire Dance<\/strong><\/a>, SatuSatu&#8217;s best-selling experience with over 1,000 tickets sold.&nbsp;<\/p>\n\n\n\n<p>The performance unfolds at sunset on the clifftops of Uluwatu Temple, with traditional Kecak dancers, an open flame, and views over the Indian Ocean. Same-day booking and bonus merchandise are available through SatuSatu.<\/p>\n\n\n\n<p>All bookings are made directly on <a href=\"http:\/\/satusatu.com\">SatuSatu.com<\/a> which supports local payment methods including BCA, Mandiri, OVO, DANA, credit cards, and more.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ about Desserts Canggu<\/h2>\n\n\n\n<p><strong>What are the best desserts in Canggu?<\/strong>&nbsp;<\/p>\n\n\n\n<p>Canggu has a wide range of options depending on what you&#8217;re looking for. Mavammy is known for its refined cakes and pastries using Belgian chocolate, Dang! Cookies has built a following for its thick, gooey freshly baked cookies, and The Shady Shack serves raw vegan desserts made fresh daily next to the rice fields.<\/p>\n\n\n\n<p><strong>Are there vegan dessert options in Canggu?<\/strong>&nbsp;<\/p>\n\n\n\n<p>Yes, quite a few. The Shady Shack specializes in raw vegan cakes and desserts free from dairy, gluten, and refined sugar. Dang! Cookies also offers vegan cookie options, and Milk &amp; Madu has plant-based treats on its menu.<\/p>\n\n\n\n<p><strong>Where can I find traditional Balinese desserts in Canggu?<\/strong>&nbsp;<\/p>\n\n\n\n<p>Warung Bu Mi in the Batu Bolong area is a good starting point for traditional Balinese sweets, particularly mango sticky rice. Local markets like the Samadi Sunday Market are also worth visiting for sticky rice cakes and coconut-based treats.<\/p>\n\n\n\n<p><strong>Is the dessert scene in Canggu expensive?<\/strong>&nbsp;<\/p>\n\n\n\n<p>It varies. Warung Bu Mi and Dang! Cookies are very affordable, with individual desserts typically under IDR 70,000. Cafe-style desserts at places like Mavammy tend to run a little higher, usually in the IDR 60,000 to IDR 130,000 range, which is still reasonable by international standards.<\/p>\n\n\n\n<p><strong>What time of day is best for desserts in Canggu?<\/strong><\/p>\n\n\n\n<p>Most cafes open from around 7:30 AM to 8:00 AM and run through the evening, so dessert is genuinely available all day. For raw vegan cakes at The Shady Shack, visiting earlier in the day gives you the best selection before items sell out. Mavammy&#8217;s Friday evening discount on desserts runs from 6:00 PM to 8:00 PM, which is a good window if you time it right.<\/p>\n\n\n\n    <!-- Styles -->\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Overpass:ital,wght@0,100..900;1,100..900&display=swap\" rel=\"stylesheet\">\n    <style>\n        \/* ========================= *\/\n          \/* BASE STYLES *\/\n          \/* ========================= *\/\n          .produk-container {\n              display: flex;\n              flex-direction: column;\n              gap: 12px;\n          }\n\n          .produk-card {\n            cursor: pointer;\n            display: flex;\n            margin: 0;\n            border: 1px solid #eee;\n            border-radius: 12px;\n            overflow: hidden;\n            font-family: Overpass, sans-serif;\n            background: #ffffff;\n          }\n\n          .produk-image {\n            position: relative;\n            flex-shrink: 0;\n          }\n\n          .produk-image img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n          }\n\n          .produk-location {\n            position: absolute;\n            left: 8px;\n            bottom: 8px;\n            background: #fff;\n            border-radius: 12px;\n            border: 1px solid #dadbe0;\n            padding: 4px 6px;\n            font-size: 10px;\n            line-height: 14px;\n          }\n\n          .produk-content {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            gap: 12px;\n          }\n\n          .produk-title {\n            font-weight: 700;\n          }\n\n          .produk-rating {\n            font-size: 16px;\n            color: #333;\n            display: flex;\n            align-items: flex-start;\n            gap: 4px;\n          }\n\n          .produk-rating-line {\n            display: flex;\n            align-items: flex-start;\n            gap: 4px;\n          }\n\n          .produk-price-main {\n            color: #cb1c4f;\n            font-weight: 800;\n            font-size: 16px;\n          }\n\n          .produk-price-strike {\n            text-decoration: line-through;\n            font-size: 14px;\n            opacity: 0.7;\n            margin-right: 8px;\n          }\n\n          .produk-discount {\n            background: #cb1c4f;\n            color: #fff;\n            padding: 2px 6px;\n            border-radius: 4px;\n            font-size: 14px;\n          }\n\n          .produk-btn {\n            background: #cb1c4f;\n            color: #ffffff;\n            padding: 10px 16px;\n            border-radius: 8px;\n            text-decoration: none;\n            font-weight: 600;\n            margin-top: 8px;\n          }\n\n          .produk-btn:hover {\n            text-decoration: none;\n            color: #ffffff;\n          }\n\n          .product-info-wrap {\n            display: flex;\n            flex-wrap: nowrap;\n            justify-content: space-between;\n          }\n\n          \/* ========================= *\/\n          \/* DESKTOP (>= 800px) *\/\n          \/* ========================= *\/\n\n          @media (min-width: 800px) {\n            .produk-image {\n              width: 200px;\n            }\n\n            .produk-content {\n              padding: 20px;\n            }\n\n            .product-info-wrap {\n              flex-direction: row;\n              align-items: center;\n            }\n\n            .produk-btn {\n              display: inline-block;\n            }\n          }\n\n          \/* ========================= *\/\n          \/* TABLET (<= 768px) *\/\n          \/* ========================= *\/\n\n          @media (max-width: 768px) {\n            .produk-card {\n              flex-direction: column;\n            }\n\n            .produk-image {\n              width: 200px;\n              height: 220px;\n            }\n\n            .produk-content {\n              padding: 12px;\n            }\n\n            .produk-title {\n              font-size: 18px;\n            }\n\n            .produk-rating {\n              font-size: 14px;\n            }\n\n            .product-info-wrap {\n              flex-direction: column;\n              align-items: flex-start;\n              gap: 12px;\n            }\n\n            .produk-btn {\n              display: none;\n            }\n          }\n\n          \/* ========================= *\/\n          \/* MOBILE (<= 480px) *\/\n          \/* ========================= *\/\n\n          @media (max-width: 480px) {\n            .produk-image {\n              width: 100%;\n            }\n\n            .produk-content {\n              padding: 12px;\n            }\n\n            .produk-title {\n              font-size: 16px;\n              overflow: hidden;\n              text-overflow: ellipsis;\n            }\n\n            .produk-price-main {\n              font-size: 15px;\n            }\n\n            .produk-discount {\n              font-size: 12px;\n            }\n\n            .produk-btn {\n              display: none;\n            }\n          }\n\n          \/* ======================================= *\/\n          \/* CAROUSEL MODE (inside .carousel-list)  *\/\n          \/* ======================================= *\/\n\n          .carousel-wrapper {\n            position: relative;\n          }\n\n          .carousel-list {\n            overflow-x: auto;\n            overflow-y: hidden;\n            -webkit-overflow-scrolling: touch;\n            scroll-behavior: smooth;\n            scroll-snap-type: x mandatory;\n            scrollbar-width: none;\n          }\n\n          .carousel-list::-webkit-scrollbar {\n            display: none;\n          }\n\n          .carousel-list .produk-container {\n            display: flex;\n            flex-direction: row;\n            flex-wrap: nowrap;\n            width: max-content;\n            gap: 12px;\n          }\n\n          .carousel-list .produk-card {\n            flex: 0 0 auto;\n            width: 220px;\n            flex-direction: column;\n            scroll-snap-align: start;\n          }\n\n          .carousel-list .produk-image {\n            width: 100%;\n            height: 220px;\n          }\n\n          .carousel-list .produk-content {\n            padding: 12px;\n          }\n\n          .carousel-list .produk-title {\n\t\t\t  font-size: 16px;\n\t\t\t  overflow: hidden;\n\t\t\t  text-overflow: ellipsis;\n\t\t\t  display: -webkit-box;\n\t\t\t  -webkit-line-clamp: 2;\n\t\t\t  -webkit-box-orient: vertical;\n\t\t\t  line-clamp: 2;\n\t\t\t}\n\n          .carousel-list .produk-rating {\n            font-size: 14px;\n          }\n\n          .carousel-list .produk-price-main {\n            font-size: 15px;\n          }\n\n          .carousel-list .produk-discount {\n            font-size: 12px;\n          }\n\n          .carousel-list .product-info-wrap {\n            flex-direction: column;\n            align-items: flex-start;\n            gap: 12px;\n          }\n\n          .carousel-list .produk-btn {\n            display: none;\n          }\n\n          \/* ========================= *\/\n          \/* CAROUSEL ARROWS *\/\n          \/* ========================= *\/\n\n          .carousel-arrow {\n            position: absolute;\n            top: 50%;\n            transform: translateY(-50%);\n            width: 36px;\n            height: 36px;\n            border-radius: 50%;\n            background: #ffffff;\n            border: 1px solid #dadbe0;\n            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            z-index: 10;\n            transition: opacity 0.2s, box-shadow 0.2s;\n            padding: 0;\n          }\n\n          .carousel-arrow:hover {\n\t\t\tbackground: #FFFFFF;\n            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n          }\n\n          .carousel-arrow.is-hidden {\n            opacity: 0;\n            pointer-events: none;\n          }\n\n          .carousel-arrow-left {\n            left: -18px;\n          }\n\n          .carousel-arrow-right {\n            right: -18px;\n          }\n\n          @media (max-width: 480px) {\n\t\t\t.carousel-arrow{\n\t\t\t\tdisplay: none;\n\t\t\t}\n            .carousel-arrow-left {\n              left: 4px;\n            }\n\n            .carousel-arrow-right {\n              right: 4px;\n            }\n          }\n    <\/style>\n\n    <!-- HTML -->\n    <div class=\"carousel-wrapper\" data-carousel-id=\"carousel-69f1ec45e616d\" data-is-carousel=\"1\">\n                    <button type=\"button\" class=\"carousel-arrow carousel-arrow-left is-hidden\" aria-label=\"Scroll left\">\n                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"25\" height=\"25\" fill=\"#000000\" viewBox=\"0 0 256 256\"><path d=\"M216,88v80a8,8,0,0,1-8,8H120v48L24,128l96-96V80h88A8,8,0,0,1,216,88Z\" opacity=\"0.2\"><\/path><path d=\"M208,72H128V32a8,8,0,0,0-13.66-5.66l-96,96a8,8,0,0,0,0,11.32l96,96A8,8,0,0,0,128,224V184h80a16,16,0,0,0,16-16V88A16,16,0,0,0,208,72Zm0,96H120a8,8,0,0,0-8,8v28.69L35.31,128,112,51.31V80a8,8,0,0,0,8,8h88Z\"><\/path><\/svg>\n            <\/button>\n            <button type=\"button\" class=\"carousel-arrow carousel-arrow-right is-hidden\" aria-label=\"Scroll right\">\n                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"25\" height=\"25\" fill=\"#000000\" viewBox=\"0 0 256 256\"><path d=\"M136,224V176H48a8,8,0,0,1-8-8V88a8,8,0,0,1,8-8h88V32l96,96Z\" opacity=\"0.2\"><\/path><path d=\"M237.66,122.34l-96-96A8,8,0,0,0,128,32V72H48A16,16,0,0,0,32,88v80a16,16,0,0,0,16,16h80v40a8,8,0,0,0,13.66,5.66l96-96A8,8,0,0,0,237.66,122.34ZM144,204.69V176a8,8,0,0,0-8-8H48V88h88a8,8,0,0,0,8-8V51.31L220.69,128Z\"><\/path><\/svg>\n            <\/button>\n                <div class=\"carousel-list\">\n            <div class=\"produk-container\" data-slugs=\" uluwatu-temple-kecak-fire-dance-satusatu-curated-experience-sameday-booking-bonus-merchandise, satusatu-exclusive-car-charter-sameday-booking, satusatu-airport-transfer-from-to-airport-sameday-booking, nusa-penida-day-tour-satusatu-curated-experience-bonus-merchandise, bali-bird-park-experience-nature-wildlife-adventure\"><\/div>\n        <\/div>\n    <\/div>\n\n    <!-- Script -->\n    <script>\n    (function() {\n\t\tfunction buildCatalogUrl(slug) {\n\t\t\t\/\/ UTM params hardcoded by the shortcode (these always win)\n\t\t\tconst hardcoded = {\n\t\t\t\tutm_source: \"blog\",\n\t\t\t\tutm_medium: \"in_line_product_cta\",\n\t\t\t};\n\n\t\t\t\/\/ UTM params from the current page URL (only used if hardcoded doesn't define them)\n\t\t\tconst pageParams = new URLSearchParams(window.location.search);\n\t\t\tconst utmKeys = [\"utm_source\", \"utm_medium\", \"utm_campaign\", \"utm_content\", \"utm_term\"];\n\t\t\tconst merged = new URLSearchParams();\n\n\t\t\tutmKeys.forEach(key => {\n\t\t\t\tif (hardcoded[key] !== undefined) {\n\t\t\t\t\t\/\/ Hardcoded value takes priority\n\t\t\t\t\tmerged.set(key, hardcoded[key]);\n\t\t\t\t} else if (pageParams.has(key)) {\n\t\t\t\t\t\/\/ Fall back to whatever the page URL has\n\t\t\t\t\tmerged.set(key, pageParams.get(key));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn \"https:\/\/satusatu.com\/en-ID\/catalog\/\" + slug + \"?\" + merged.toString();\n\t\t}\n\t\t\n        function renderCatalogItem(p) {\n            const location = p.location?.name || \"\";\n            const rating = p.rating?.average_rating ?? null;\n            const ratingCount = p.rating?.count_rating_display || \"\";\n            const soldDisplay = p.rating?.total_sold_display || \"\";\n            const currency = p.pricing?.currency_symbol || \"Rp\";\n            const price = p.pricing?.min_price || 0;\n            const originalPrice = p.pricing?.min_original_price || 0;\n            const discount = p.pricing?.discount || 0;\n\t\t\tconst catalogUrl = buildCatalogUrl(p.slug);\n\n            return `\n                <div class=\"produk-card\" data-url=\"${catalogUrl}\">\n                    <div class=\"produk-image\">\n                        <img decoding=\"async\" src=\"${p.image_url}\" alt=\"${p.title}\" \/>\n                        <div class=\"produk-location\">\n\t\t\t\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\"><path d=\"M128,24a80,80,0,0,0-80,80c0,72,80,128,80,128s80-56,80-128A80,80,0,0,0,128,24Zm0,112a32,32,0,1,1,32-32A32,32,0,0,1,128,136Z\" opacity=\"0.2\"><\/path><path d=\"M128,64a40,40,0,1,0,40,40A40,40,0,0,0,128,64Zm0,64a24,24,0,1,1,24-24A24,24,0,0,1,128,128Zm0-112a88.1,88.1,0,0,0-88,88c0,31.4,14.51,64.68,42,96.25a254.19,254.19,0,0,0,41.45,38.3,8,8,0,0,0,9.18,0A254.19,254.19,0,0,0,174,200.25c27.45-31.57,42-64.85,42-96.25A88.1,88.1,0,0,0,128,16Zm0,206c-16.53-13-72-60.75-72-118a72,72,0,0,1,144,0C200,161.23,144.53,209,128,222Z\"><\/path><\/svg>\n                            <span>${location}<\/span>\n                        <\/div>\n                    <\/div>\n                    <div class=\"produk-content\">\n                        <div class=\"produk-title\">${p.title}<\/div>\n                        ${rating ? `\n                        <div class=\"produk-rating\">\n                            <div class=\"produk-rating-line\">\n                                <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"18\" height=\"18\" fill=\"#F87500\" viewBox=\"0 0 256 256\"><path d=\"M229.06,108.79l-48.7,42,14.88,62.79a8.4,8.4,0,0,1-12.52,9.17L128,189.09,73.28,222.74a8.4,8.4,0,0,1-12.52-9.17l14.88-62.79-48.7-42A8.46,8.46,0,0,1,31.73,94L95.64,88.8l24.62-59.6a8.36,8.36,0,0,1,15.48,0l24.62,59.6L224.27,94A8.46,8.46,0,0,1,229.06,108.79Z\" opacity=\"0.2\"><\/path><path d=\"M239.18,97.26A16.38,16.38,0,0,0,224.92,86l-59-4.76L143.14,26.15a16.36,16.36,0,0,0-30.27,0L90.11,81.23,31.08,86a16.46,16.46,0,0,0-9.37,28.86l45,38.83L53,211.75a16.38,16.38,0,0,0,24.5,17.82L128,198.49l50.53,31.08A16.4,16.4,0,0,0,203,211.75l-13.76-58.07,45-38.83A16.43,16.43,0,0,0,239.18,97.26Zm-15.34,5.47-48.7,42a8,8,0,0,0-2.56,7.91l14.88,62.8a.37.37,0,0,1-.17.48c-.18.14-.23.11-.38,0l-54.72-33.65a8,8,0,0,0-8.38,0L69.09,215.94c-.15.09-.19.12-.38,0a.37.37,0,0,1-.17-.48l14.88-62.8a8,8,0,0,0-2.56-7.91l-48.7-42c-.12-.1-.23-.19-.13-.5s.18-.27.33-.29l63.92-5.16A8,8,0,0,0,103,91.86l24.62-59.61c.08-.17.11-.25.35-.25s.27.08.35.25L153,91.86a8,8,0,0,0,6.75,4.92l63.92,5.16c.15,0,.24,0,.33.29S224,102.63,223.84,102.73Z\"><\/path><\/svg>\n                                <span>${rating} (${ratingCount}) &bull; ${soldDisplay} sold<\/span>\n                            <\/div>\n                        <\/div>` : ''}\n                        <div class=\"product-info-wrap\">\n                            <div>\n                                <div style=\"display:flex;gap:6px;\">\n                                    <div style=\"font-size:14px;\">From<\/div>\n                                    <div class=\"produk-price-main\">${currency} ${price.toLocaleString()}<\/div>\n                                <\/div>\n                                ${discount > 0 ? `\n                                <div>\n                                    <span class=\"produk-price-strike\">${currency} ${originalPrice.toLocaleString()}<\/span>\n                                    <span class=\"produk-discount\">-${discount}%<\/span>\n                                <\/div>` : ''}\n                            <\/div>\n                            <div>\n                                <a target=\"_blank\" href=\"${catalogUrl}\" class=\"produk-btn\">Check Availability<\/a>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            `;\n        }\n\n        function initSatuSatuCatalog(wrapperEl) {\n            const scrollEl = wrapperEl.querySelector(\".carousel-list\");\n            const container = wrapperEl.querySelector(\".produk-container\");\n            const slugs = container.getAttribute(\"data-slugs\");\n            const isCarousel = wrapperEl.getAttribute(\"data-is-carousel\") === \"1\";\n            const leftArrow = wrapperEl.querySelector(\".carousel-arrow-left\");\n            const rightArrow = wrapperEl.querySelector(\".carousel-arrow-right\");\n\n            fetch(\"https:\/\/api.satusatu.com\/content\/guest\/satusatu\/v1\/catalogs\/blog\/catalog-list?slugs=\" + slugs)\n                .then(res => res.json())\n                .then(data => {\n                    container.innerHTML = data.data.map(renderCatalogItem).join('');\n                    \/\/ Event handler for card click\n                    container.querySelectorAll('.produk-card').forEach(card => {\n                        card.addEventListener('click', () => {\n                            window.open(card.dataset.url, '_blank');\n                        });\n                    });\n\n                    if (isCarousel && scrollEl && leftArrow && rightArrow) {\n                        const scrollAmount = 240;\n                        function updateArrows() {\n                            const sl = scrollEl.scrollLeft;\n                            const sw = scrollEl.scrollWidth;\n                            const cw = scrollEl.clientWidth;\n                            leftArrow.classList.toggle(\"is-hidden\", sl <= 0);\n                            rightArrow.classList.toggle(\"is-hidden\", sl + cw >= sw - 1);\n                        }\n                        leftArrow.addEventListener(\"click\", e => {\n                            e.stopPropagation();\n                            scrollEl.scrollBy({ left: -scrollAmount, behavior: \"smooth\" });\n                        });\n                        rightArrow.addEventListener(\"click\", e => {\n                            e.stopPropagation();\n                            scrollEl.scrollBy({ left: scrollAmount, behavior: \"smooth\" });\n                        });\n                        scrollEl.addEventListener(\"scroll\", updateArrows);\n                        window.addEventListener(\"resize\", updateArrows);\n                        setTimeout(updateArrows, 200);\n                    }\n                });\n        }\n\n        document.addEventListener(\"DOMContentLoaded\", function() {\n            document.querySelectorAll(\"[data-carousel-id]\").forEach(initSatuSatuCatalog);\n        });\n    })();\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"<p>Canggu&#8217;s food scene gets a lot of attention for its surf, its sunsets, and its beach clubs. But ask anyone who&#8217;s spent more than a few days here, and they&#8217;ll tell you the dessert scene is something else entirely.&nbsp; From gooey freshly baked cookies to elegant European-style cakes, the neighborhood punches well above its weight&hellip;&nbsp;<\/p>\n","protected":false},"author":22,"featured_media":2986,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[535,4111],"tags":[605,49,4271,4269,526],"class_list":["post-2985","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bali-culinary","category-bali-food","tag-bali-culinary","tag-canggu","tag-dessert","tag-desserts-canggu","tag-satusatu"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>5 Best Desserts Canggu Has to Offer for Every Sweet Tooth - SatuSatu Inspiration<\/title>\n<meta name=\"description\" content=\"Discover the best desserts in Canggu, from gooey cookies to elegant cakes and local sweets top spots every sweet tooth should try\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth - SatuSatu Inspiration\" \/>\n<meta property=\"og:description\" content=\"Discover the best desserts in Canggu, from gooey cookies to elegant cakes and local sweets top spots every sweet tooth should try\" \/>\n<meta property=\"og:url\" content=\"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/\" \/>\n<meta property=\"og:site_name\" content=\"SatuSatu Inspiration\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-22T00:44:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-22T00:44:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Fatiya Aulia Muthmainnah\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatiya Aulia Muthmainnah\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/\"},\"author\":{\"name\":\"Fatiya Aulia Muthmainnah\",\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/#\\\/schema\\\/person\\\/4b773aced63910f3c4d3c4a8c82516c2\"},\"headline\":\"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth\",\"datePublished\":\"2026-04-22T00:44:08+00:00\",\"dateModified\":\"2026-04-22T00:44:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/\"},\"wordCount\":1725,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/desserts-canggu.png\",\"keywords\":[\"Bali Culinary\",\"Canggu\",\"Dessert\",\"Desserts Canggu\",\"SatuSatu\"],\"articleSection\":[\"Bali Culinary\",\"Bali Food\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/\",\"url\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/\",\"name\":\"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth - SatuSatu Inspiration\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/desserts-canggu.png\",\"datePublished\":\"2026-04-22T00:44:08+00:00\",\"dateModified\":\"2026-04-22T00:44:10+00:00\",\"description\":\"Discover the best desserts in Canggu, from gooey cookies to elegant cakes and local sweets top spots every sweet tooth should try\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/#primaryimage\",\"url\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/desserts-canggu.png\",\"contentUrl\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/desserts-canggu.png\",\"width\":1536,\"height\":1024,\"caption\":\"Desserts Canggu\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/desserts-canggu\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/#website\",\"url\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/\",\"name\":\"SatuSatu\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/#organization\",\"name\":\"SatuSatu\",\"url\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Variant1024.png\",\"contentUrl\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Variant1024.png\",\"width\":1024,\"height\":1024,\"caption\":\"SatuSatu\"},\"image\":{\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/#\\\/schema\\\/person\\\/4b773aced63910f3c4d3c4a8c82516c2\",\"name\":\"Fatiya Aulia Muthmainnah\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f1bd35afe4fc3154c4ed985ce96b5941e11cd1aca25cc24a42ff9c58d10c640e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f1bd35afe4fc3154c4ed985ce96b5941e11cd1aca25cc24a42ff9c58d10c640e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f1bd35afe4fc3154c4ed985ce96b5941e11cd1aca25cc24a42ff9c58d10c640e?s=96&d=mm&r=g\",\"caption\":\"Fatiya Aulia Muthmainnah\"},\"url\":\"https:\\\/\\\/satusatu.com\\\/inspiration\\\/author\\\/ext-fatiya-aulia\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth - SatuSatu Inspiration","description":"Discover the best desserts in Canggu, from gooey cookies to elegant cakes and local sweets top spots every sweet tooth should try","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/","og_locale":"en_US","og_type":"article","og_title":"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth - SatuSatu Inspiration","og_description":"Discover the best desserts in Canggu, from gooey cookies to elegant cakes and local sweets top spots every sweet tooth should try","og_url":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/","og_site_name":"SatuSatu Inspiration","article_published_time":"2026-04-22T00:44:08+00:00","article_modified_time":"2026-04-22T00:44:10+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png","type":"image\/png"}],"author":"Fatiya Aulia Muthmainnah","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatiya Aulia Muthmainnah","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/#article","isPartOf":{"@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/"},"author":{"name":"Fatiya Aulia Muthmainnah","@id":"https:\/\/satusatu.com\/inspiration\/#\/schema\/person\/4b773aced63910f3c4d3c4a8c82516c2"},"headline":"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth","datePublished":"2026-04-22T00:44:08+00:00","dateModified":"2026-04-22T00:44:10+00:00","mainEntityOfPage":{"@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/"},"wordCount":1725,"commentCount":0,"publisher":{"@id":"https:\/\/satusatu.com\/inspiration\/#organization"},"image":{"@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/#primaryimage"},"thumbnailUrl":"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png","keywords":["Bali Culinary","Canggu","Dessert","Desserts Canggu","SatuSatu"],"articleSection":["Bali Culinary","Bali Food"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/satusatu.com\/inspiration\/desserts-canggu\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/","url":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/","name":"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth - SatuSatu Inspiration","isPartOf":{"@id":"https:\/\/satusatu.com\/inspiration\/#website"},"primaryImageOfPage":{"@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/#primaryimage"},"image":{"@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/#primaryimage"},"thumbnailUrl":"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png","datePublished":"2026-04-22T00:44:08+00:00","dateModified":"2026-04-22T00:44:10+00:00","description":"Discover the best desserts in Canggu, from gooey cookies to elegant cakes and local sweets top spots every sweet tooth should try","breadcrumb":{"@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/satusatu.com\/inspiration\/desserts-canggu\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/#primaryimage","url":"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png","contentUrl":"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png","width":1536,"height":1024,"caption":"Desserts Canggu"},{"@type":"BreadcrumbList","@id":"https:\/\/satusatu.com\/inspiration\/desserts-canggu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/satusatu.com\/inspiration\/"},{"@type":"ListItem","position":2,"name":"5 Best Desserts Canggu Has to Offer for Every Sweet Tooth"}]},{"@type":"WebSite","@id":"https:\/\/satusatu.com\/inspiration\/#website","url":"https:\/\/satusatu.com\/inspiration\/","name":"SatuSatu","description":"","publisher":{"@id":"https:\/\/satusatu.com\/inspiration\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/satusatu.com\/inspiration\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/satusatu.com\/inspiration\/#organization","name":"SatuSatu","url":"https:\/\/satusatu.com\/inspiration\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/satusatu.com\/inspiration\/#\/schema\/logo\/image\/","url":"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/01\/Variant1024.png","contentUrl":"https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/01\/Variant1024.png","width":1024,"height":1024,"caption":"SatuSatu"},"image":{"@id":"https:\/\/satusatu.com\/inspiration\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/satusatu.com\/inspiration\/#\/schema\/person\/4b773aced63910f3c4d3c4a8c82516c2","name":"Fatiya Aulia Muthmainnah","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f1bd35afe4fc3154c4ed985ce96b5941e11cd1aca25cc24a42ff9c58d10c640e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f1bd35afe4fc3154c4ed985ce96b5941e11cd1aca25cc24a42ff9c58d10c640e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f1bd35afe4fc3154c4ed985ce96b5941e11cd1aca25cc24a42ff9c58d10c640e?s=96&d=mm&r=g","caption":"Fatiya Aulia Muthmainnah"},"url":"https:\/\/satusatu.com\/inspiration\/author\/ext-fatiya-aulia\/"}]}},"uagb_featured_image_src":{"full":["https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png",1536,1024,false],"thumbnail":["https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png",150,100,false],"medium":["https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png",300,200,false],"medium_large":["https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png",768,512,false],"large":["https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png",1024,683,false],"1536x1536":["https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png",1536,1024,false],"2048x2048":["https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png",1536,1024,false],"neve-blog":["https:\/\/satusatu.com\/inspiration\/wp-content\/uploads\/2026\/04\/desserts-canggu.png",930,620,false]},"uagb_author_info":{"display_name":"Fatiya Aulia Muthmainnah","author_link":"https:\/\/satusatu.com\/inspiration\/author\/ext-fatiya-aulia\/"},"uagb_comment_info":0,"uagb_excerpt":"Canggu&#8217;s food scene gets a lot of attention for its surf, its sunsets, and its beach clubs. But ask anyone who&#8217;s spent more than a few days here, and they&#8217;ll tell you the dessert scene is something else entirely.&nbsp; From gooey freshly baked cookies to elegant European-style cakes, the neighborhood punches well above its weight&hellip;&nbsp;","_links":{"self":[{"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/posts\/2985","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/comments?post=2985"}],"version-history":[{"count":1,"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/posts\/2985\/revisions"}],"predecessor-version":[{"id":2992,"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/posts\/2985\/revisions\/2992"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/media\/2986"}],"wp:attachment":[{"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/media?parent=2985"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/categories?post=2985"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/satusatu.com\/inspiration\/wp-json\/wp\/v2\/tags?post=2985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}