Third-party apps
Installed apps, what each owns, and which theme files belong to it.
Third-party apps
Apps reach the storefront three ways. Which one applies decides how much control the theme has.
The theme cannot stop scripts injected through content_for_header, so it uses Yett to hold them back.
Theme snippets shipped by an app run only where a Liquid file renders them.
Browser SDKs, such as Sesami's, run only when theme code calls them.
Apps in active use
| App | Owns | Theme files | Integration |
|---|---|---|---|
| Klaviyo | Email and SMS capture, back in stock, MediSpa booking form | snippets/klaviyo-back-in-stock.liquid, snippets/klaviyo-popup-trigger.liquid, snippets/pdp-offers-cta.liquid | SDK plus form IDs in theme settings and source |
| Sesami | Appointment availability and reservations | snippets/sesami-custom-button.liquid, snippets/sesami-custom-atc.liquid, snippets/sesami-cutom-solution.liquid | window.SesamiSDK |
| Discount Ninja (Limoni Apps) | Promotions, discount codes, promotional bars and badges | snippets/limoniapps-discountninja-*.liquid, 10 files | Injected scripts plus snippets |
| Boost | Search and collection filtering | snippets/boost-pfs.liquid, snippets/boost-pfs-style.liquid, snippets/boost-pfs-filter-skeleton.liquid | Injected scripts plus snippets |
| Google Tag Manager | Analytics | snippets/gtm.liquid, snippets/ga4-ecommerce-scripts.liquid, snippets/ga4-events-variables.liquid | Container ID in theme settings |
| Swym | Wishlist | snippets/swymSnippet.liquid, snippets/swym-product-view.liquid, snippets/custom-swym-wishlist-button.liquid and siblings | window._swat, window.SwymCallbacks |
| Gorgias | Customer chat | snippets/load-gorgias-chat.liquid | Injected script |
| Smile | Loyalty | snippets/smile-initializer.liquid | Injected script |
| Plug in SEO Plus | Title, description and structured data templates | Theme settings only, the four SEO groups | Theme settings |
| Rebuy | Recommendations | snippets/rebuy-extensions.liquid | Injected script |
| Stamped | Reviews | Referenced through window.StampedFn | Injected script |
| Zapier | Booking intent routing | Webhook URL in theme settings | Outbound webhook |
Apps with a smaller footprint
| App | Files | Notes |
|---|---|---|
| Appstle | 3 | Subscriptions. Held back by Yett outside the subscriptions app proxy |
| Recurpay | 4 | Subscriptions. snippets/recurpay.liquid, snippets/recurpay-cart.liquid |
| Weglot | 5 | Translation. snippets/weglot_hreftags.liquid, snippets/weglot_switcher.liquid |
| Videoly | 8 | Product video. On every MediSpa blocklist |
| Tolstoy | 3 | Shoppable video. On every MediSpa blocklist |
| Hulk Apps | 11 | Wishlist button remnants |
| Booster | 3 | Currency conversion. snippets/booster-currency.liquid |
| Upsellio | 3 | Upsells. snippets/upsellio.liquid, snippets/upsellio_embed.liquid |
| Upnova | 5 | Upsells. Blocked by Yett in the main layout as upez and upnova |
Upnova appears under two names. Its scripts match upez and its snippets say Upnova. Both patterns are in
window.YETT_BLACKLIST in layout/theme.liquid, and src/entrypoints/upnova-sticky-fix.ts works around its sticky
positioning.
Script blocking
Every layout loads Yett synchronously before content_for_header and sets window.YETT_BLACKLIST.
layout/theme.liquid blocks Appstle outside the subscriptions app proxy, plus upez and upnova.
The MediSpa layouts block a much longer list: Smile, Gorgias, Boost, Swym, Stamped, Rebuy, Videoly, Tolstoy, upez and
upnova. Klaviyo, Google Tag Manager and Meta stay unblocked, because these pages carry paid traffic and their only
call to action is a booking form.
snippets/yett-unblock.liquid releases everything Yett holds on the first touch, keypress or click. Blocked apps
therefore load on interaction rather than never.
A script that appears missing on a MediSpa page is usually blocked rather than broken. Check the layout's blocklist first.
Cart writers
Discount Ninja, Upsellio, Upnova and Rebuy write to the Shopify Ajax Cart directly, which is why the mini-cart patches
window.fetch.
None of them notify the theme when they write. The interceptor observes them and emits the same events the mini-cart's own writes produce. See Mini-cart.
Vendor files
Any file carrying a vendor prefix is vendor-owned. Editing one works until the app updates its theme integration and overwrites the change, at which point the fix disappears with no warning.
Several vendor snippets are in .prettierignore, because the app regenerates them and reformatting produces noise in
every diff:
snippets/icart-drawer.liquid
snippets/limoniapps-discountninja-context-settings.liquid
snippets/shade-selector-modal.liquid
snippets/special-offers.liquid
snippets/upsellio.liquidWhen vendor behaviour has to change, change it in the app's own admin. When that is impossible, wrap the vendor file rather than editing it, and record why.
Apps whose files remain but are not in use
The theme carries files from apps that appear to have been removed. sca.* snippets are the largest group, with
references across 128 files. See Legacy and unused code.
Do not remove a vendor file on the basis of a name you do not recognise. Search for it across layout/, templates/,
sections/ and snippets/ first, and check whether the app is still listed in Shopify Admin under Apps.
Verifying what is installed
The authoritative list is Shopify Admin, under Apps. This repository only shows what the theme integrates with, which lags behind installs and removals.
An app can be installed and contribute nothing to the theme, and an app can be uninstalled while its snippets remain.